diff --git a/.github/workflows/main_workflow.yml b/.github/workflows/main_workflow.yml index 26b66fc..a6486ac 100644 --- a/.github/workflows/main_workflow.yml +++ b/.github/workflows/main_workflow.yml @@ -66,7 +66,7 @@ jobs: - name: Check dependencies run: tox -e check-dependencies - name: Check doc links - run: tomte check-doc-links + run: tomte check-doc-links --url-skips https://soft-sly-slug.base-mainnet.quiknode.pro/f13d998d9d68685faeee903499e15b4b386a8b1c/ - name: Check doc IPFS hashes run: tox -e check-doc-hashes @@ -133,7 +133,7 @@ jobs: with: go-version: "1.17.7" - run: | - wget https://github.com/zricethezav/gitleaks/releases/download/v8.15.3/gitleaks_8.15.3_linux_x64.tar.gz && \ - tar -xzf gitleaks_8.15.3_linux_x64.tar.gz && \ + wget https://github.com/gitleaks/gitleaks/releases/download/v8.21.2/gitleaks_8.21.2_linux_x64.tar.gz && \ + tar -xzf gitleaks_8.21.2_linux_x64.tar.gz && \ sudo install gitleaks /usr/bin && \ - gitleaks detect --report-format json --report-path leak_report \ No newline at end of file + gitleaks detect --report-format json --report-path leak_report -v \ No newline at end of file diff --git a/.gitleaksignore b/.gitleaksignore index 1cf97a5..2d359c2 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -374,3 +374,10 @@ a36c8662abbacb603cbb477a4233dabfe812ee22:contracts/MemeBase.sol:generic-api-key: 0bcda208e49ee4514539e7f0abb959b5dfbc4884:scripts/deployment/globals_arbitrum_one.json:generic-api-key:1 a2eae7cc6176b84e4aaa59a85321249d4a906305:scripts/deployment/globals_arbitrum_one.json:generic-api-key:1 a2eae7cc6176b84e4aaa59a85321249d4a906305:scripts/deployment/globals_celo_mainnet.json:generic-api-key:1 +264b5956daeb372f99ac9de84faf1e257c81513b:audits/internal3/analysis/contracts/MemeBase-flatten.sol:generic-api-key:1303 +722650392739117747fb1729f46966282186d02c:scripts/deployment/globals_arbitrum_one_meme_alpha.json:generic-api-key:15 +722650392739117747fb1729f46966282186d02c:scripts/deployment/globals_arbitrum_one_meme_alpha.json:generic-api-key:16 +722650392739117747fb1729f46966282186d02c:scripts/deployment/globals_arbitrum_one_meme_alpha.json:generic-api-key:18 +722650392739117747fb1729f46966282186d02c:scripts/deployment/globals_celo_mainnet.json:generic-api-key:1 +7efd156c77f4b4e6d1b94e643e651f1f91612154:scripts/deployment/globals_celo_mainnet.json:generic-api-key:1 +93830648ce39e12a4a3c4229363a02eb64f698c4:scripts/deployment/globals_arbitrum_one.json:generic-api-key:1 diff --git a/README.md b/README.md index 9fadfb7..7ba2f89 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,8 @@ See [here](docs/agents.md). ## Contract Development See [here](docs/contracts.md). + +## Acknowledgements +- [Rari-Capital](https://github.com/Rari-Capital/solmate). +- [Uniswap V3](https://github.com/Uniswap/v3-core). +- [Zelic reports](https://reports.zellic.io/publications/beefy-uniswapv3/sections/observation-cardinality-observation-cardinality). diff --git a/abis/0.8.28/BalancerPriceOracle.json b/abis/0.8.28/BalancerPriceOracle.json new file mode 100644 index 0000000..075d062 --- /dev/null +++ b/abis/0.8.28/BalancerPriceOracle.json @@ -0,0 +1,231 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BalancerPriceOracle", + "sourceName": "contracts/oracles/BalancerPriceOracle.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_olas", + "type": "address" + }, + { + "internalType": "address", + "name": "_nativeToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_maxSlippage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_minUpdateTimePeriod", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_balancerVault", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_balancerPoolId", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "currentPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cumulativePrice", + "type": "uint256" + } + ], + "name": "PriceUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "balancerPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "balancerVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "direction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minUpdateTimePeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "olas", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "snapshotHistory", + "outputs": [ + { + "internalType": "uint256", + "name": "cumulativePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdated", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "averagePrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updatePrice", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "validatePrice", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x610160604052348015610010575f5ffd5b5060405161131b38038061131b83398101604081905261002f91610467565b606484106100845760405162461bcd60e51b815260206004820152601f60248201527f536c697070616765206d757374206265206c657373207468616e20313030250060448201526064015b60405180910390fd5b6001600160a01b038681166101005285811660e052608085905260a08490528216610120819052610140829052604051631f29a8cd60e31b8152600481018390525f919063f94d4668906024015f60405180830381865afa1580156100eb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101129190810190610593565b50509050856001600160a01b0316815f8151811061013257610132610661565b60200260200101516001600160a01b03161461014e57600160c0525b610156610163565b5050505050505050610706565b5f8061016d610354565b90505f81116101be5760405162461bcd60e51b815260206004820152601660248201527f5072696365206d757374206265206e6f6e2d7a65726f00000000000000000000604482015260640161007b565b6001545f908103610211575f8082556002820183905542600183015560405133915f5160206112fb5f395f51905f529161020091868252602082015260400190565b60405180910390a260019250505090565b60a0516001546102219190610689565b421015610230575f9250505090565b5f81600101544261024191906106a2565b905080826002015461025391906106b5565b825f015f8282546102649190610689565b9091555050600282015482545f91839161027e91906106e0565b6102889190610689565b61029283866106b5565b845461029e9190610689565b6102a891906106e0565b90506064608051826102ba91906106b5565b6102c491906106e0565b6102ce90826106a2565b8410806102fd57506064608051826102e691906106b5565b6102f091906106e0565b6102fa9082610689565b84115b1561030c575f94505050505090565b60028301819055426001840155825460405133915f5160206112fb5f395f51905f529161034191888252602082015260400190565b60405180910390a2600194505050505090565b5f5f610120516001600160a01b031663f94d4668610140516040518263ffffffff1660e01b815260040161038a91815260200190565b5f60405180830381865afa1580156103a4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103cb9190810190610593565b509150505f8160c051815181106103e4576103e4610661565b602002602001015190505f82600260c05160016104019190610689565b61040b91906106f3565b8151811061041b5761041b610661565b602002602001015190508181670de0b6b3a764000061043a91906106b5565b61044491906106e0565b935050505090565b80516001600160a01b0381168114610462575f5ffd5b919050565b5f5f5f5f5f5f60c0878903121561047c575f5ffd5b6104858761044c565b95506104936020880161044c565b60408801516060890151919650945092506104b06080880161044c565b915060a087015190509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156104ff576104ff6104c3565b604052919050565b5f6001600160401b0382111561051f5761051f6104c3565b5060051b60200190565b5f82601f830112610538575f5ffd5b815161054b61054682610507565b6104d7565b8082825260208201915060208360051b86010192508583111561056c575f5ffd5b602085015b83811015610589578051835260209283019201610571565b5095945050505050565b5f5f5f606084860312156105a5575f5ffd5b83516001600160401b038111156105ba575f5ffd5b8401601f810186136105ca575f5ffd5b80516105d861054682610507565b8082825260208201915060208360051b8501019250888311156105f9575f5ffd5b6020840193505b82841015610622576106118461044c565b825260209384019390910190610600565b6020880151909650925050506001600160401b03811115610641575f5ffd5b61064d86828701610529565b604095909501519396949550929392505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561069c5761069c610675565b92915050565b8181038181111561069c5761069c610675565b808202811582820484141761069c5761069c610675565b634e487b7160e01b5f52601260045260245ffd5b5f826106ee576106ee6106cc565b500490565b5f82610701576107016106cc565b500690565b60805160a05160c05160e051610100516101205161014051610b6d61078e5f395f818161022601526106b801525f818161014001526106f701525f60cc01525f61024d01525f818161019c0152818161078801526107c701525f818161016701526104ed01525f81816101cb01528181610272015281816105a201526105ea0152610b6d5ff3fe608060405234801561000f575f5ffd5b50600436106100c3575f3560e01c8063673a7e281161007d578063a9ed0e1f11610058578063a9ed0e1f146101f5578063dbbb64b914610221578063e1758bd814610248575f5ffd5b8063673a7e28146101be5780638c04166f146101c657806398d5fdca146101ed575f5ffd5b8063158274a5116100ad578063158274a51461013b578063441cc37a14610162578063645539ed14610197575f5ffd5b806231d115146100c7578063136d6f2114610118575b5f5ffd5b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012b61012636600461083d565b61026f565b604051901515815260200161010f565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161010f565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b61012b610409565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b610189610690565b5f5460015460025461020692919083565b6040805193845260208401929092529082015260600161010f565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f00000000000000000000000000000000000000000000000000000000000000008211156102ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536c697070616765206f766572666c6f7700000000000000000000000000000060448201526064015b60405180910390fd5b604080516060810182525f8054825260015460208301819052600254938301939093529091900361033257505f92915050565b5f8160200151426103439190610881565b9050805f0361035557505f9392505050565b5f818360400151845f015161036a91906108c7565b61037491906108da565b82846040015161038491906108ed565b845161039091906108da565b61039a91906108c7565b90505f6103a5610690565b90505f60646103b48882610881565b6103be90856108ed565b6103c891906108c7565b90505f60646103d789826108da565b6103e190866108ed565b6103eb91906108c7565b90508183101580156103fd5750808311155b98975050505050505050565b5f5f610413610690565b90505f811161047e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5072696365206d757374206265206e6f6e2d7a65726f0000000000000000000060448201526064016102f6565b6001545f9081036104e4575f8082556002820183905542600183015560405133917fb556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c0916104d391868252602082015260400190565b60405180910390a260019250505090565b600154610512907f0000000000000000000000000000000000000000000000000000000000000000906108da565b421015610521575f9250505090565b5f8160010154426105329190610881565b905080826002015461054491906108ed565b825f015f82825461055591906108da565b9091555050600282015482545f91839161056f91906108c7565b61057991906108da565b61058383866108ed565b845461058f91906108da565b61059991906108c7565b905060646105c77f0000000000000000000000000000000000000000000000000000000000000000836108ed565b6105d191906108c7565b6105db9082610881565b8410806106265750606461060f7f0000000000000000000000000000000000000000000000000000000000000000836108ed565b61061991906108c7565b61062390826108da565b84115b15610635575f94505050505090565b60028301819055426001840155825460405133917fb556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c09161067d91888252602082015260400190565b60405180910390a2600194505050505090565b6040517ff94d46680000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f94d4668906024015f60405180830381865afa15801561073b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107809190810190610a0d565b509150505f817f0000000000000000000000000000000000000000000000000000000000000000815181106107b7576107b7610af7565b602002602001015190505f8260027f000000000000000000000000000000000000000000000000000000000000000060016107f291906108da565b6107fc9190610b24565b8151811061080c5761080c610af7565b602002602001015190508181670de0b6b3a764000061082b91906108ed565b61083591906108c7565b935050505090565b5f6020828403121561084d575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561089457610894610854565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826108d5576108d561089a565b500490565b8082018082111561089457610894610854565b808202811582820484141761089457610894610854565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561097857610978610904565b604052919050565b5f67ffffffffffffffff82111561099957610999610904565b5060051b60200190565b5f82601f8301126109b2575f5ffd5b81516109c56109c082610980565b610931565b8082825260208201915060208360051b8601019250858311156109e6575f5ffd5b602085015b83811015610a035780518352602092830192016109eb565b5095945050505050565b5f5f5f60608486031215610a1f575f5ffd5b835167ffffffffffffffff811115610a35575f5ffd5b8401601f81018613610a45575f5ffd5b8051610a536109c082610980565b8082825260208201915060208360051b850101925088831115610a74575f5ffd5b6020840193505b82841015610ab757835173ffffffffffffffffffffffffffffffffffffffff81168114610aa6575f5ffd5b825260209384019390910190610a7b565b80965050505050602084015167ffffffffffffffff811115610ad7575f5ffd5b610ae3868287016109a3565b604095909501519396949550929392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82610b3257610b3261089a565b50069056fea26469706673582212203e01ca34147e7cdac958df161df5a11dca4f7383c89ea18a95d7d946d863a68164736f6c634300081c0033b556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c0", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100c3575f3560e01c8063673a7e281161007d578063a9ed0e1f11610058578063a9ed0e1f146101f5578063dbbb64b914610221578063e1758bd814610248575f5ffd5b8063673a7e28146101be5780638c04166f146101c657806398d5fdca146101ed575f5ffd5b8063158274a5116100ad578063158274a51461013b578063441cc37a14610162578063645539ed14610197575f5ffd5b806231d115146100c7578063136d6f2114610118575b5f5ffd5b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012b61012636600461083d565b61026f565b604051901515815260200161010f565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161010f565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b61012b610409565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b610189610690565b5f5460015460025461020692919083565b6040805193845260208401929092529082015260600161010f565b6101897f000000000000000000000000000000000000000000000000000000000000000081565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f00000000000000000000000000000000000000000000000000000000000000008211156102ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536c697070616765206f766572666c6f7700000000000000000000000000000060448201526064015b60405180910390fd5b604080516060810182525f8054825260015460208301819052600254938301939093529091900361033257505f92915050565b5f8160200151426103439190610881565b9050805f0361035557505f9392505050565b5f818360400151845f015161036a91906108c7565b61037491906108da565b82846040015161038491906108ed565b845161039091906108da565b61039a91906108c7565b90505f6103a5610690565b90505f60646103b48882610881565b6103be90856108ed565b6103c891906108c7565b90505f60646103d789826108da565b6103e190866108ed565b6103eb91906108c7565b90508183101580156103fd5750808311155b98975050505050505050565b5f5f610413610690565b90505f811161047e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5072696365206d757374206265206e6f6e2d7a65726f0000000000000000000060448201526064016102f6565b6001545f9081036104e4575f8082556002820183905542600183015560405133917fb556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c0916104d391868252602082015260400190565b60405180910390a260019250505090565b600154610512907f0000000000000000000000000000000000000000000000000000000000000000906108da565b421015610521575f9250505090565b5f8160010154426105329190610881565b905080826002015461054491906108ed565b825f015f82825461055591906108da565b9091555050600282015482545f91839161056f91906108c7565b61057991906108da565b61058383866108ed565b845461058f91906108da565b61059991906108c7565b905060646105c77f0000000000000000000000000000000000000000000000000000000000000000836108ed565b6105d191906108c7565b6105db9082610881565b8410806106265750606461060f7f0000000000000000000000000000000000000000000000000000000000000000836108ed565b61061991906108c7565b61062390826108da565b84115b15610635575f94505050505090565b60028301819055426001840155825460405133917fb556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c09161067d91888252602082015260400190565b60405180910390a2600194505050505090565b6040517ff94d46680000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f94d4668906024015f60405180830381865afa15801561073b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107809190810190610a0d565b509150505f817f0000000000000000000000000000000000000000000000000000000000000000815181106107b7576107b7610af7565b602002602001015190505f8260027f000000000000000000000000000000000000000000000000000000000000000060016107f291906108da565b6107fc9190610b24565b8151811061080c5761080c610af7565b602002602001015190508181670de0b6b3a764000061082b91906108ed565b61083591906108c7565b935050505090565b5f6020828403121561084d575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561089457610894610854565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826108d5576108d561089a565b500490565b8082018082111561089457610894610854565b808202811582820484141761089457610894610854565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561097857610978610904565b604052919050565b5f67ffffffffffffffff82111561099957610999610904565b5060051b60200190565b5f82601f8301126109b2575f5ffd5b81516109c56109c082610980565b610931565b8082825260208201915060208360051b8601019250858311156109e6575f5ffd5b602085015b83811015610a035780518352602092830192016109eb565b5095945050505050565b5f5f5f60608486031215610a1f575f5ffd5b835167ffffffffffffffff811115610a35575f5ffd5b8401601f81018613610a45575f5ffd5b8051610a536109c082610980565b8082825260208201915060208360051b850101925088831115610a74575f5ffd5b6020840193505b82841015610ab757835173ffffffffffffffffffffffffffffffffffffffff81168114610aa6575f5ffd5b825260209384019390910190610a7b565b80965050505050602084015167ffffffffffffffff811115610ad7575f5ffd5b610ae3868287016109a3565b604095909501519396949550929392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82610b3257610b3261089a565b50069056fea26469706673582212203e01ca34147e7cdac958df161df5a11dca4f7383c89ea18a95d7d946d863a68164736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/BuyBackBurnerBalancer.json b/abis/0.8.28/BuyBackBurnerBalancer.json new file mode 100644 index 0000000..9cb2401 --- /dev/null +++ b/abis/0.8.28/BuyBackBurnerBalancer.json @@ -0,0 +1,388 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BuyBackBurnerBalancer", + "sourceName": "contracts/BuyBackBurnerBalancer.sol", + "abi": [ + { + "inputs": [], + "name": "AlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "T", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "olasAmount", + "type": "uint256" + } + ], + "name": "BuyBack", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "OraclePriceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "OracleUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "BUY_BACK_BURNER_PROXY", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ALLOWED_DEVIATION", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OLAS_BURNER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SECONDS_AGO", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "balancerPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "balancerVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nativeTokenAmount", + "type": "uint256" + } + ], + "name": "buyBack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "changeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "changeOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "address", + "name": "uniV3PositionManager", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "checkPoolPrices", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "payload", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAccountActivities", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "olas", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateOraclePrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405260016005553480156013575f5ffd5b506123c5806100215f395ff3fe608060405234801561000f575f5ffd5b5060043610610162575f3560e01c80638b9ee610116100c7578063c0bbd8841161007d578063e1758bd811610063578063e1758bd814610312578063f9cc3e9c14610332578063ffa1ad7414610359575f5ffd5b8063c0bbd88414610301578063dbbb64b914610309575f5ffd5b80638da5cb5b116100ad5780638da5cb5b146102b1578063a6f9dae1146102d0578063aeb2d711146102e3575f5ffd5b80638b9ee6101461028d5780638c04166f146102a8575f5ffd5b8063439fab911161011c57806347c421b51161010257806347c421b51461024b5780637c9e639f1461025e5780637dc0d1d01461026d575f5ffd5b8063439fab911461022557806343b23a1b14610238575f5ffd5b8063158274a51161014c578063158274a5146101c557806317a68dd8146101e557806340b67a9b146101f8575f5ffd5b806231d11514610166578063053f9040146101b0575b5f5ffd5b6001546101869073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101c36101be366004611a72565b6103a2565b005b6007546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6101c36101f3366004611aaa565b610596565b610217610206366004611aaa565b60066020525f908152604090205481565b6040519081526020016101a7565b6101c3610233366004611b48565b6106bb565b6101c3610246366004611bfa565b610744565b6101c3610259366004611aaa565b610b07565b61021767016345785d8a000081565b6003546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6101867351eb65012ca5ceb07320c497f4151ac207fea4e081565b61021760045481565b5f546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6101c36102de366004611aaa565b610c33565b6102ec61070881565b60405163ffffffff90911681526020016101a7565b6101c3610d5d565b61021760085481565b6002546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6102177fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b6103956040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516101a79190611ca6565b600554600114610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026005819055546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610484573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a89190611cb8565b90508115806104b657508082115b156104bf578091505b5f8211610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e73756666696369656e74206e617469766520746f6b656e20616d6f756e74604482015260640161040a565b335f90815260066020526040812080549161054283611cfc565b91905055505f61055183610ebe565b90507fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93508160405161058491815260200190565b60405180910390a15050600160055550565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610607575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161040a565b73ffffffffffffffffffffffffffffffffffffffff8116610654576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff161561070a576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600160055561074181611200565b50565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b29190611d33565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015262ffffff851660448301529192505f91831690631698ee8290606401602060405180830381865afa158015610834573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108589190611d33565b905073ffffffffffffffffffffffffffffffffffffffff81166108d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f7420657869737400000000000000000000000000604482015260640161040a565b5f5f8273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610922573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109469190611d73565b50506040517f252c09d700000000000000000000000000000000000000000000000000000000815261ffff841660048201529496509194505f9373ffffffffffffffffffffffffffffffffffffffff8816935063252c09d792506024019050608060405180830381865afa1580156109c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e49190611e17565b505050905042610708826109f89190611e74565b63ffffffff161015610a0e575050505050610b01565b5f610a188561138a565b90505f610a4573ffffffffffffffffffffffffffffffffffffffff86168068010000000000000000611520565b90505f8215610a8657828211610a7657610a71610a628385611e96565b670de0b6b3a764000085611520565b610a83565b610a83610a628484611e96565b90505b67016345785d8a0000811115610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f507269636520646576696174696f6e20746f6f20686967680000000000000000604482015260640161040a565b50505050505050505b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b78575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161040a565b73ffffffffffffffffffffffffffffffffffffffff8116610bc5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b8180940394905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610ca4575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161040a565b73ffffffffffffffffffffffffffffffffffffffff8116610cf1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b335f908152600660205260408120805491610d7783611cfc565b9091555050600354604080517f673a7e2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163673a7e28916004808301926020929190829003018187875af1158015610dea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0e9190611ea9565b905080610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f7261636c6520707269636520757064617465206661696c6564000000000000604482015260640161040a565b600354604051339173ffffffffffffffffffffffffffffffffffffffff16907fccf049defd051e7117a233e0f6c01636afab6fb9b1824ae42b5bf7e034fdba37905f90a350565b600354600480546040517f136d6f21000000000000000000000000000000000000000000000000000000008152918201525f9173ffffffffffffffffffffffffffffffffffffffff169063136d6f2190602401602060405180830381865afa158015610f2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f509190611ea9565b610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4265666f7265207377617020736c697070616765206c696d697420697320627260448201527f6561636865640000000000000000000000000000000000000000000000000000606482015260840161040a565b600354604080517f98d5fdca00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff16916398d5fdca9160048083019260209291908290030181865afa158015611049573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106d9190611cb8565b90506110788361153e565b91505f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111099190611cb8565b90505f6064600454606461111d9190611e96565b6111279085611ec2565b6111319190611f06565b90505f606460045460646111459190611f19565b61114f9086611ec2565b6111599190611f06565b905081831015801561116b5750808311155b6111f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4166746572207377617020736c697070616765206c696d69742069732062726560448201527f6163686564000000000000000000000000000000000000000000000000000000606482015260840161040a565b50505050919050565b6060818060200190518101906112169190611f4f565b600455600855805190915081905f9061123157611231612000565b602002602001015160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018151811061128b5761128b612000565b602002602001015160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002815181106112e5576112e5612000565b602002602001015160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038151811061133f5761133f612000565b602002602001015160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6040805160028082526060820183525f9283929190602083019080368337019050509050610708815f815181106113c3576113c3612000565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063883bdbfd9061142c90859060040161202d565b5f60405180830381865afa158015611446573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261148b91908101906120e3565b5090505f815f815181106114a1576114a1612000565b6020026020010151826001815181106114bc576114bc612000565b60200260200101516114ce91906121a8565b90505f6114dd610708836121ed565b90505f6114e982611712565b905061151573ffffffffffffffffffffffffffffffffffffffff82168068010000000000000000611520565b979650505050505050565b828202811515841585830485141716611537575f5ffd5b0492915050565b6002546007546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018490525f92919091169063095ea7b3906044016020604051808303815f875af11580156115ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115de9190611ea9565b506040805160c08101825260085481525f60208083018290526002805473ffffffffffffffffffffffffffffffffffffffff90811685870152600154811660608087019190915260808087018a9052875180890189529384527f30780000000000000000000000000000000000000000000000000000000000008486015260a087019390935286519283018752308084529383018590528287019390935291810183905260075494517f52bbbe29000000000000000000000000000000000000000000000000000000008152939490939116916352bbbe29916116ca9186918691904290600401612260565b6020604051808303815f875af11580156116e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170a9190611cb8565b949350505050565b5f5f5f8360020b12611727578260020b61172e565b8260020b5f035b9050620d89e881111561176d576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001165f0361178f577001000000000000000000000000000000006117a1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156117d5576ffff97272373d413259a46990580e213a0260801c5b60048216156117f4576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611813576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611832576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611851576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611870576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561188f576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156118af576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156118cf576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156118ef576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561190f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561192f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561194f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561196f576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561198f576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156119b0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156119d0576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156119ef576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611a0c576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611a4a57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611a4657611a46611ed9565b0490505b640100000000810615611a5e576001611a60565b5f5b60ff16602082901c0192505050919050565b5f60208284031215611a82575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610741575f5ffd5b5f60208284031215611aba575f5ffd5b8135611ac581611a89565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b4057611b40611acc565b604052919050565b5f60208284031215611b58575f5ffd5b813567ffffffffffffffff811115611b6e575f5ffd5b8201601f81018413611b7e575f5ffd5b803567ffffffffffffffff811115611b9857611b98611acc565b611bc960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611af9565b818152856020838501011115611bdd575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f5f5f60808587031215611c0d575f5ffd5b8435611c1881611a89565b93506020850135611c2881611a89565b92506040850135611c3881611a89565b9150606085013562ffffff81168114611c4f575f5ffd5b939692955090935050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f611ac56020830184611c5a565b5f60208284031215611cc8575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d2c57611d2c611ccf565b5060010190565b5f60208284031215611d43575f5ffd5b8151611ac581611a89565b805161ffff81168114611d5f575f5ffd5b919050565b80518015158114611d5f575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611d89575f5ffd5b8751611d9481611a89565b8097505060208801518060020b8114611dab575f5ffd5b9550611db960408901611d4e565b9450611dc760608901611d4e565b9350611dd560808901611d4e565b925060a088015160ff81168114611dea575f5ffd5b9150611df860c08901611d64565b905092959891949750929550565b8051600681900b8114611d5f575f5ffd5b5f5f5f5f60808587031215611e2a575f5ffd5b845163ffffffff81168114611e3d575f5ffd5b9350611e4b60208601611e06565b92506040850151611e5b81611a89565b9150611e6960608601611d64565b905092959194509250565b63ffffffff8181168382160190811115611e9057611e90611ccf565b92915050565b81810381811115611e9057611e90611ccf565b5f60208284031215611eb9575f5ffd5b611ac582611d64565b8082028115828204841417611e9057611e90611ccf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611f1457611f14611ed9565b500490565b80820180821115611e9057611e90611ccf565b5f67ffffffffffffffff821115611f4557611f45611acc565b5060051b60200190565b5f5f5f60608486031215611f61575f5ffd5b835167ffffffffffffffff811115611f77575f5ffd5b8401601f81018613611f87575f5ffd5b8051611f9a611f9582611f2c565b611af9565b8082825260208201915060208360051b850101925088831115611fbb575f5ffd5b6020840193505b82841015611fe6578351611fd581611a89565b825260209384019390910190611fc2565b602088015160409098015190999798509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b8181101561206a57835163ffffffff16835260209384019390920191600101612046565b509095945050505050565b5f82601f830112612084575f5ffd5b8151612092611f9582611f2c565b8082825260208201915060208360051b8601019250858311156120b3575f5ffd5b602085015b838110156120d95780516120cb81611a89565b8352602092830192016120b8565b5095945050505050565b5f5f604083850312156120f4575f5ffd5b825167ffffffffffffffff81111561210a575f5ffd5b8301601f8101851361211a575f5ffd5b8051612128611f9582611f2c565b8082825260208201915060208360051b850101925087831115612149575f5ffd5b6020840193505b828410156121725761216184611e06565b825260209384019390910190612150565b80955050505050602083015167ffffffffffffffff811115612192575f5ffd5b61219e85828601612075565b9150509250929050565b600682810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008112667fffffffffffff82131715611e9057611e90611ccf565b5f8160060b8360060b8061220357612203611ed9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008314161561225757612257611ccf565b90059392505050565b60e08152845160e08201525f6020860151600281106122a6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b610100830152604086015173ffffffffffffffffffffffffffffffffffffffff1661012083015260608601516122f561014084018273ffffffffffffffffffffffffffffffffffffffff169052565b50608086015161016083015260a086015160c061018084015261231c6101a0840182611c5a565b91505061237d602083018673ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526060810151151560608301525050565b60a082019390935260c001529291505056fea264697066735822122006168a318ea0882914208037f4239439cd8ed3beebc7f4b354ef7619788fb72a64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610162575f3560e01c80638b9ee610116100c7578063c0bbd8841161007d578063e1758bd811610063578063e1758bd814610312578063f9cc3e9c14610332578063ffa1ad7414610359575f5ffd5b8063c0bbd88414610301578063dbbb64b914610309575f5ffd5b80638da5cb5b116100ad5780638da5cb5b146102b1578063a6f9dae1146102d0578063aeb2d711146102e3575f5ffd5b80638b9ee6101461028d5780638c04166f146102a8575f5ffd5b8063439fab911161011c57806347c421b51161010257806347c421b51461024b5780637c9e639f1461025e5780637dc0d1d01461026d575f5ffd5b8063439fab911461022557806343b23a1b14610238575f5ffd5b8063158274a51161014c578063158274a5146101c557806317a68dd8146101e557806340b67a9b146101f8575f5ffd5b806231d11514610166578063053f9040146101b0575b5f5ffd5b6001546101869073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101c36101be366004611a72565b6103a2565b005b6007546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6101c36101f3366004611aaa565b610596565b610217610206366004611aaa565b60066020525f908152604090205481565b6040519081526020016101a7565b6101c3610233366004611b48565b6106bb565b6101c3610246366004611bfa565b610744565b6101c3610259366004611aaa565b610b07565b61021767016345785d8a000081565b6003546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6101867351eb65012ca5ceb07320c497f4151ac207fea4e081565b61021760045481565b5f546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6101c36102de366004611aaa565b610c33565b6102ec61070881565b60405163ffffffff90911681526020016101a7565b6101c3610d5d565b61021760085481565b6002546101869073ffffffffffffffffffffffffffffffffffffffff1681565b6102177fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b6103956040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516101a79190611ca6565b600554600114610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026005819055546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610484573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a89190611cb8565b90508115806104b657508082115b156104bf578091505b5f8211610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e73756666696369656e74206e617469766520746f6b656e20616d6f756e74604482015260640161040a565b335f90815260066020526040812080549161054283611cfc565b91905055505f61055183610ebe565b90507fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93508160405161058491815260200190565b60405180910390a15050600160055550565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610607575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161040a565b73ffffffffffffffffffffffffffffffffffffffff8116610654576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff161561070a576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600160055561074181611200565b50565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b29190611d33565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015262ffffff851660448301529192505f91831690631698ee8290606401602060405180830381865afa158015610834573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108589190611d33565b905073ffffffffffffffffffffffffffffffffffffffff81166108d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f7420657869737400000000000000000000000000604482015260640161040a565b5f5f8273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610922573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109469190611d73565b50506040517f252c09d700000000000000000000000000000000000000000000000000000000815261ffff841660048201529496509194505f9373ffffffffffffffffffffffffffffffffffffffff8816935063252c09d792506024019050608060405180830381865afa1580156109c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e49190611e17565b505050905042610708826109f89190611e74565b63ffffffff161015610a0e575050505050610b01565b5f610a188561138a565b90505f610a4573ffffffffffffffffffffffffffffffffffffffff86168068010000000000000000611520565b90505f8215610a8657828211610a7657610a71610a628385611e96565b670de0b6b3a764000085611520565b610a83565b610a83610a628484611e96565b90505b67016345785d8a0000811115610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f507269636520646576696174696f6e20746f6f20686967680000000000000000604482015260640161040a565b50505050505050505b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b78575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161040a565b73ffffffffffffffffffffffffffffffffffffffff8116610bc5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b8180940394905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610ca4575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161040a565b73ffffffffffffffffffffffffffffffffffffffff8116610cf1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b335f908152600660205260408120805491610d7783611cfc565b9091555050600354604080517f673a7e2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163673a7e28916004808301926020929190829003018187875af1158015610dea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0e9190611ea9565b905080610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f7261636c6520707269636520757064617465206661696c6564000000000000604482015260640161040a565b600354604051339173ffffffffffffffffffffffffffffffffffffffff16907fccf049defd051e7117a233e0f6c01636afab6fb9b1824ae42b5bf7e034fdba37905f90a350565b600354600480546040517f136d6f21000000000000000000000000000000000000000000000000000000008152918201525f9173ffffffffffffffffffffffffffffffffffffffff169063136d6f2190602401602060405180830381865afa158015610f2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f509190611ea9565b610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4265666f7265207377617020736c697070616765206c696d697420697320627260448201527f6561636865640000000000000000000000000000000000000000000000000000606482015260840161040a565b600354604080517f98d5fdca00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff16916398d5fdca9160048083019260209291908290030181865afa158015611049573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106d9190611cb8565b90506110788361153e565b91505f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111099190611cb8565b90505f6064600454606461111d9190611e96565b6111279085611ec2565b6111319190611f06565b90505f606460045460646111459190611f19565b61114f9086611ec2565b6111599190611f06565b905081831015801561116b5750808311155b6111f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4166746572207377617020736c697070616765206c696d69742069732062726560448201527f6163686564000000000000000000000000000000000000000000000000000000606482015260840161040a565b50505050919050565b6060818060200190518101906112169190611f4f565b600455600855805190915081905f9061123157611231612000565b602002602001015160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018151811061128b5761128b612000565b602002602001015160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002815181106112e5576112e5612000565b602002602001015160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038151811061133f5761133f612000565b602002602001015160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6040805160028082526060820183525f9283929190602083019080368337019050509050610708815f815181106113c3576113c3612000565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063883bdbfd9061142c90859060040161202d565b5f60405180830381865afa158015611446573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261148b91908101906120e3565b5090505f815f815181106114a1576114a1612000565b6020026020010151826001815181106114bc576114bc612000565b60200260200101516114ce91906121a8565b90505f6114dd610708836121ed565b90505f6114e982611712565b905061151573ffffffffffffffffffffffffffffffffffffffff82168068010000000000000000611520565b979650505050505050565b828202811515841585830485141716611537575f5ffd5b0492915050565b6002546007546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018490525f92919091169063095ea7b3906044016020604051808303815f875af11580156115ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115de9190611ea9565b506040805160c08101825260085481525f60208083018290526002805473ffffffffffffffffffffffffffffffffffffffff90811685870152600154811660608087019190915260808087018a9052875180890189529384527f30780000000000000000000000000000000000000000000000000000000000008486015260a087019390935286519283018752308084529383018590528287019390935291810183905260075494517f52bbbe29000000000000000000000000000000000000000000000000000000008152939490939116916352bbbe29916116ca9186918691904290600401612260565b6020604051808303815f875af11580156116e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170a9190611cb8565b949350505050565b5f5f5f8360020b12611727578260020b61172e565b8260020b5f035b9050620d89e881111561176d576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001165f0361178f577001000000000000000000000000000000006117a1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156117d5576ffff97272373d413259a46990580e213a0260801c5b60048216156117f4576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611813576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611832576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611851576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611870576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561188f576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156118af576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156118cf576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156118ef576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561190f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561192f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561194f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561196f576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561198f576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156119b0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156119d0576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156119ef576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611a0c576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611a4a57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611a4657611a46611ed9565b0490505b640100000000810615611a5e576001611a60565b5f5b60ff16602082901c0192505050919050565b5f60208284031215611a82575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610741575f5ffd5b5f60208284031215611aba575f5ffd5b8135611ac581611a89565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b4057611b40611acc565b604052919050565b5f60208284031215611b58575f5ffd5b813567ffffffffffffffff811115611b6e575f5ffd5b8201601f81018413611b7e575f5ffd5b803567ffffffffffffffff811115611b9857611b98611acc565b611bc960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611af9565b818152856020838501011115611bdd575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f5f5f60808587031215611c0d575f5ffd5b8435611c1881611a89565b93506020850135611c2881611a89565b92506040850135611c3881611a89565b9150606085013562ffffff81168114611c4f575f5ffd5b939692955090935050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f611ac56020830184611c5a565b5f60208284031215611cc8575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d2c57611d2c611ccf565b5060010190565b5f60208284031215611d43575f5ffd5b8151611ac581611a89565b805161ffff81168114611d5f575f5ffd5b919050565b80518015158114611d5f575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611d89575f5ffd5b8751611d9481611a89565b8097505060208801518060020b8114611dab575f5ffd5b9550611db960408901611d4e565b9450611dc760608901611d4e565b9350611dd560808901611d4e565b925060a088015160ff81168114611dea575f5ffd5b9150611df860c08901611d64565b905092959891949750929550565b8051600681900b8114611d5f575f5ffd5b5f5f5f5f60808587031215611e2a575f5ffd5b845163ffffffff81168114611e3d575f5ffd5b9350611e4b60208601611e06565b92506040850151611e5b81611a89565b9150611e6960608601611d64565b905092959194509250565b63ffffffff8181168382160190811115611e9057611e90611ccf565b92915050565b81810381811115611e9057611e90611ccf565b5f60208284031215611eb9575f5ffd5b611ac582611d64565b8082028115828204841417611e9057611e90611ccf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611f1457611f14611ed9565b500490565b80820180821115611e9057611e90611ccf565b5f67ffffffffffffffff821115611f4557611f45611acc565b5060051b60200190565b5f5f5f60608486031215611f61575f5ffd5b835167ffffffffffffffff811115611f77575f5ffd5b8401601f81018613611f87575f5ffd5b8051611f9a611f9582611f2c565b611af9565b8082825260208201915060208360051b850101925088831115611fbb575f5ffd5b6020840193505b82841015611fe6578351611fd581611a89565b825260209384019390910190611fc2565b602088015160409098015190999798509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b8181101561206a57835163ffffffff16835260209384019390920191600101612046565b509095945050505050565b5f82601f830112612084575f5ffd5b8151612092611f9582611f2c565b8082825260208201915060208360051b8601019250858311156120b3575f5ffd5b602085015b838110156120d95780516120cb81611a89565b8352602092830192016120b8565b5095945050505050565b5f5f604083850312156120f4575f5ffd5b825167ffffffffffffffff81111561210a575f5ffd5b8301601f8101851361211a575f5ffd5b8051612128611f9582611f2c565b8082825260208201915060208360051b850101925087831115612149575f5ffd5b6020840193505b828410156121725761216184611e06565b825260209384019390910190612150565b80955050505050602083015167ffffffffffffffff811115612192575f5ffd5b61219e85828601612075565b9150509250929050565b600682810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008112667fffffffffffff82131715611e9057611e90611ccf565b5f8160060b8360060b8061220357612203611ed9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008314161561225757612257611ccf565b90059392505050565b60e08152845160e08201525f6020860151600281106122a6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b610100830152604086015173ffffffffffffffffffffffffffffffffffffffff1661012083015260608601516122f561014084018273ffffffffffffffffffffffffffffffffffffffff169052565b50608086015161016083015260a086015160c061018084015261231c6101a0840182611c5a565b91505061237d602083018673ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526060810151151560608301525050565b60a082019390935260c001529291505056fea264697066735822122006168a318ea0882914208037f4239439cd8ed3beebc7f4b354ef7619788fb72a64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/BuyBackBurnerProxy.json b/abis/0.8.28/BuyBackBurnerProxy.json new file mode 100644 index 0000000..80669e2 --- /dev/null +++ b/abis/0.8.28/BuyBackBurnerProxy.json @@ -0,0 +1,59 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BuyBackBurnerProxy", + "sourceName": "contracts/BuyBackBurnerProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "buyBackBurnerData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InitializationFailed", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroData", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroImplementationAddress", + "type": "error" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "BUY_BACK_BURNER_PROXY", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561000f575f5ffd5b506040516102f23803806102f283398101604081905261002e9161012d565b6001600160a01b0382166100555760405163d02c623d60e01b815260040160405180910390fd5b80515f036100765760405163c922446b60e01b815260040160405180910390fd5b817fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19555f826001600160a01b0316826040516100b291906101fc565b5f60405180830381855af49150503d805f81146100ea576040519150601f19603f3d011682016040523d82523d5f602084013e6100ef565b606091505b505090508061011157604051630337323560e31b815260040160405180910390fd5b505050610212565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561013e575f5ffd5b82516001600160a01b0381168114610154575f5ffd5b60208401519092506001600160401b0381111561016f575f5ffd5b8301601f8101851361017f575f5ffd5b80516001600160401b0381111561019857610198610119565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101c6576101c6610119565b6040528181528282016020018710156101dd575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60d48061021e5f395ff3fe608060405260043610601b575f3560e01c8063f9cc3e9c14605b575b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1954365f5f375f5f365f845af490503d5f5f3e806056573d5ffd5b503d5ff35b3480156065575f5ffd5b50608c7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b60405190815260200160405180910390f3fea2646970667358221220b437186076f0a9c3f61400f5d25b2121f2b7bbd6b66da86a715d53fa1fef927864736f6c634300081c0033", + "deployedBytecode": "0x608060405260043610601b575f3560e01c8063f9cc3e9c14605b575b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1954365f5f375f5f365f845af490503d5f5f3e806056573d5ffd5b503d5ff35b3480156065575f5ffd5b50608c7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b60405190815260200160405180910390f3fea2646970667358221220b437186076f0a9c3f61400f5d25b2121f2b7bbd6b66da86a715d53fa1fef927864736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/BuyBackBurnerUniswap.json b/abis/0.8.28/BuyBackBurnerUniswap.json new file mode 100644 index 0000000..f689928 --- /dev/null +++ b/abis/0.8.28/BuyBackBurnerUniswap.json @@ -0,0 +1,375 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BuyBackBurnerUniswap", + "sourceName": "contracts/BuyBackBurnerUniswap.sol", + "abi": [ + { + "inputs": [], + "name": "AlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "T", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "olasAmount", + "type": "uint256" + } + ], + "name": "BuyBack", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "OraclePriceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "OracleUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "BUY_BACK_BURNER_PROXY", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ALLOWED_DEVIATION", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OLAS_BURNER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SECONDS_AGO", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nativeTokenAmount", + "type": "uint256" + } + ], + "name": "buyBack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "changeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "changeOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "address", + "name": "uniV3PositionManager", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "checkPoolPrices", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "payload", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAccountActivities", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "olas", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateOraclePrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405260016005553480156013575f5ffd5b506123c3806100215f395ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80638b9ee610116100c7578063c0bbd8841161007d578063f887ea4011610063578063f887ea40146102ef578063f9cc3e9c1461030f578063ffa1ad7414610336575f5ffd5b8063c0bbd884146102c7578063e1758bd8146102cf575f5ffd5b80638da5cb5b116100ad5780638da5cb5b14610277578063a6f9dae114610296578063aeb2d711146102a9575f5ffd5b80638b9ee610146102535780638c04166f1461026e575f5ffd5b8063439fab911161011c57806347c421b51161010257806347c421b5146102115780637c9e639f146102245780637dc0d1d014610233575f5ffd5b8063439fab91146101eb57806343b23a1b146101fe575f5ffd5b806231d1151461014c578063053f90401461019657806317a68dd8146101ab57806340b67a9b146101be575b5f5ffd5b60015461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101a96101a4366004611a97565b61037f565b005b6101a96101b9366004611acf565b610573565b6101dd6101cc366004611acf565b60066020525f908152604090205481565b60405190815260200161018d565b6101a96101f9366004611b6d565b610698565b6101a961020c366004611c1f565b610721565b6101a961021f366004611acf565b610ae4565b6101dd67016345785d8a000081565b60035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b61016c7351eb65012ca5ceb07320c497f4151ac207fea4e081565b6101dd60045481565b5f5461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a96102a4366004611acf565b610c10565b6102b261070881565b60405163ffffffff909116815260200161018d565b6101a9610d3a565b60025461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b60075461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b6103726040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161018d9190611c7f565b6005546001146103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026005819055546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610461573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104859190611cd2565b905081158061049357508082115b1561049c578091505b5f8211610505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e73756666696369656e74206e617469766520746f6b656e20616d6f756e7460448201526064016103e7565b335f90815260066020526040812080549161051f83611d16565b91905055505f61052e83610e9b565b90507fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93508160405161056191815260200190565b60405180910390a15050600160055550565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105e4575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103e7565b73ffffffffffffffffffffffffffffffffffffffff8116610631576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff16156106e7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600160055561071e816111dd565b50565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078f9190611d4d565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015262ffffff851660448301529192505f91831690631698ee8290606401602060405180830381865afa158015610811573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108359190611d4d565b905073ffffffffffffffffffffffffffffffffffffffff81166108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f742065786973740000000000000000000000000060448201526064016103e7565b5f5f8273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156108ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109239190611d8d565b50506040517f252c09d700000000000000000000000000000000000000000000000000000000815261ffff841660048201529496509194505f9373ffffffffffffffffffffffffffffffffffffffff8816935063252c09d792506024019050608060405180830381865afa15801561099d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c19190611e31565b505050905042610708826109d59190611e8e565b63ffffffff1610156109eb575050505050610ade565b5f6109f585611364565b90505f610a2273ffffffffffffffffffffffffffffffffffffffff861680680100000000000000006114fa565b90505f8215610a6357828211610a5357610a4e610a3f8385611eb0565b670de0b6b3a7640000856114fa565b610a60565b610a60610a3f8484611eb0565b90505b67016345785d8a0000811115610ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f507269636520646576696174696f6e20746f6f2068696768000000000000000060448201526064016103e7565b50505050505050505b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b55575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103e7565b73ffffffffffffffffffffffffffffffffffffffff8116610ba2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b8180940394905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c81575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103e7565b73ffffffffffffffffffffffffffffffffffffffff8116610cce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b335f908152600660205260408120805491610d5483611d16565b9091555050600354604080517f673a7e2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163673a7e28916004808301926020929190829003018187875af1158015610dc7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610deb9190611ec3565b905080610e54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f7261636c6520707269636520757064617465206661696c656400000000000060448201526064016103e7565b600354604051339173ffffffffffffffffffffffffffffffffffffffff16907fccf049defd051e7117a233e0f6c01636afab6fb9b1824ae42b5bf7e034fdba37905f90a350565b600354600480546040517f136d6f21000000000000000000000000000000000000000000000000000000008152918201525f9173ffffffffffffffffffffffffffffffffffffffff169063136d6f2190602401602060405180830381865afa158015610f09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2d9190611ec3565b610fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4265666f7265207377617020736c697070616765206c696d697420697320627260448201527f656163686564000000000000000000000000000000000000000000000000000060648201526084016103e7565b600354604080517f98d5fdca00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff16916398d5fdca9160048083019260209291908290030181865afa158015611026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190611cd2565b905061105583611518565b91505f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e69190611cd2565b90505f606460045460646110fa9190611eb0565b6111049085611edc565b61110e9190611f20565b90505f606460045460646111229190611f33565b61112c9086611edc565b6111369190611f20565b90508183101580156111485750808311155b6111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4166746572207377617020736c697070616765206c696d69742069732062726560448201527f616368656400000000000000000000000000000000000000000000000000000060648201526084016103e7565b50505050919050565b6060818060200190518101906111f39190611f69565b600455805190915081905f9061120b5761120b612012565b602002602001015160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018151811061126557611265612012565b602002602001015160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002815181106112bf576112bf612012565b602002602001015160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038151811061131957611319612012565b602002602001015160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6040805160028082526060820183525f9283929190602083019080368337019050509050610708815f8151811061139d5761139d612012565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063883bdbfd9061140690859060040161203f565b5f60405180830381865afa158015611420573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261146591908101906120f5565b5090505f815f8151811061147b5761147b612012565b60200260200101518260018151811061149657611496612012565b60200260200101516114a891906121ba565b90505f6114b7610708836121ff565b90505f6114c382611737565b90506114ef73ffffffffffffffffffffffffffffffffffffffff821680680100000000000000006114fa565b979650505050505050565b828202811515841585830485141716611511575f5ffd5b0492915050565b6002546007546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018490525f92919091169063095ea7b3906044016020604051808303815f875af1158015611594573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b89190611ec3565b506040805160028082526060820183525f926020830190803683375050600254825192935073ffffffffffffffffffffffffffffffffffffffff16918391505f9061160557611605612012565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600180548351921691839190811061164257611642612012565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f38ed17390000000000000000000000000000000000000000000000000000000081525f9291909116906338ed1739906116b19087908590879030904290600401612272565b5f604051808303815f875af11580156116cc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261171191908101906122fc565b90508060018151811061172657611726612012565b602002602001015192505050919050565b5f5f5f8360020b1261174c578260020b611753565b8260020b5f035b9050620d89e8811115611792576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001165f036117b4577001000000000000000000000000000000006117c6565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156117fa576ffff97272373d413259a46990580e213a0260801c5b6004821615611819576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611838576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611857576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611876576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611895576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156118b4576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156118d4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156118f4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611914576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611934576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611954576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611974576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611994576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156119b4576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156119d5576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156119f5576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611a14576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611a31576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611a6f57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611a6b57611a6b611ef3565b0490505b640100000000810615611a83576001611a85565b5f5b60ff16602082901c0192505050919050565b5f60208284031215611aa7575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461071e575f5ffd5b5f60208284031215611adf575f5ffd5b8135611aea81611aae565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b6557611b65611af1565b604052919050565b5f60208284031215611b7d575f5ffd5b813567ffffffffffffffff811115611b93575f5ffd5b8201601f81018413611ba3575f5ffd5b803567ffffffffffffffff811115611bbd57611bbd611af1565b611bee60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611b1e565b818152856020838501011115611c02575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f5f5f60808587031215611c32575f5ffd5b8435611c3d81611aae565b93506020850135611c4d81611aae565b92506040850135611c5d81611aae565b9150606085013562ffffff81168114611c74575f5ffd5b939692955090935050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f60208284031215611ce2575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d4657611d46611ce9565b5060010190565b5f60208284031215611d5d575f5ffd5b8151611aea81611aae565b805161ffff81168114611d79575f5ffd5b919050565b80518015158114611d79575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611da3575f5ffd5b8751611dae81611aae565b8097505060208801518060020b8114611dc5575f5ffd5b9550611dd360408901611d68565b9450611de160608901611d68565b9350611def60808901611d68565b925060a088015160ff81168114611e04575f5ffd5b9150611e1260c08901611d7e565b905092959891949750929550565b8051600681900b8114611d79575f5ffd5b5f5f5f5f60808587031215611e44575f5ffd5b845163ffffffff81168114611e57575f5ffd5b9350611e6560208601611e20565b92506040850151611e7581611aae565b9150611e8360608601611d7e565b905092959194509250565b63ffffffff8181168382160190811115611eaa57611eaa611ce9565b92915050565b81810381811115611eaa57611eaa611ce9565b5f60208284031215611ed3575f5ffd5b611aea82611d7e565b8082028115828204841417611eaa57611eaa611ce9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611f2e57611f2e611ef3565b500490565b80820180821115611eaa57611eaa611ce9565b5f67ffffffffffffffff821115611f5f57611f5f611af1565b5060051b60200190565b5f5f60408385031215611f7a575f5ffd5b825167ffffffffffffffff811115611f90575f5ffd5b8301601f81018513611fa0575f5ffd5b8051611fb3611fae82611f46565b611b1e565b8082825260208201915060208360051b850101925087831115611fd4575f5ffd5b6020840193505b82841015611fff578351611fee81611aae565b825260209384019390910190611fdb565b6020969096015195979596505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b8181101561207c57835163ffffffff16835260209384019390920191600101612058565b509095945050505050565b5f82601f830112612096575f5ffd5b81516120a4611fae82611f46565b8082825260208201915060208360051b8601019250858311156120c5575f5ffd5b602085015b838110156120eb5780516120dd81611aae565b8352602092830192016120ca565b5095945050505050565b5f5f60408385031215612106575f5ffd5b825167ffffffffffffffff81111561211c575f5ffd5b8301601f8101851361212c575f5ffd5b805161213a611fae82611f46565b8082825260208201915060208360051b85010192508783111561215b575f5ffd5b6020840193505b828410156121845761217384611e20565b825260209384019390910190612162565b80955050505050602083015167ffffffffffffffff8111156121a4575f5ffd5b6121b085828601612087565b9150509250929050565b600682810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008112667fffffffffffff82131715611eaa57611eaa611ce9565b5f8160060b8360060b8061221557612215611ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008314161561226957612269611ce9565b90059392505050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156122cf57835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161229b565b505073ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b5f6020828403121561230c575f5ffd5b815167ffffffffffffffff811115612322575f5ffd5b8201601f81018413612332575f5ffd5b8051612340611fae82611f46565b8082825260208201915060208360051b850101925086831115612361575f5ffd5b6020840193505b82841015612383578351825260209384019390910190612368565b969550505050505056fea26469706673582212205b8d806a7cc144d9d6e3db4431a95745f448e530fe86e1a7f240ef3e1769343b64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80638b9ee610116100c7578063c0bbd8841161007d578063f887ea4011610063578063f887ea40146102ef578063f9cc3e9c1461030f578063ffa1ad7414610336575f5ffd5b8063c0bbd884146102c7578063e1758bd8146102cf575f5ffd5b80638da5cb5b116100ad5780638da5cb5b14610277578063a6f9dae114610296578063aeb2d711146102a9575f5ffd5b80638b9ee610146102535780638c04166f1461026e575f5ffd5b8063439fab911161011c57806347c421b51161010257806347c421b5146102115780637c9e639f146102245780637dc0d1d014610233575f5ffd5b8063439fab91146101eb57806343b23a1b146101fe575f5ffd5b806231d1151461014c578063053f90401461019657806317a68dd8146101ab57806340b67a9b146101be575b5f5ffd5b60015461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101a96101a4366004611a97565b61037f565b005b6101a96101b9366004611acf565b610573565b6101dd6101cc366004611acf565b60066020525f908152604090205481565b60405190815260200161018d565b6101a96101f9366004611b6d565b610698565b6101a961020c366004611c1f565b610721565b6101a961021f366004611acf565b610ae4565b6101dd67016345785d8a000081565b60035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b61016c7351eb65012ca5ceb07320c497f4151ac207fea4e081565b6101dd60045481565b5f5461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a96102a4366004611acf565b610c10565b6102b261070881565b60405163ffffffff909116815260200161018d565b6101a9610d3a565b60025461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b60075461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b6103726040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161018d9190611c7f565b6005546001146103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026005819055546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610461573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104859190611cd2565b905081158061049357508082115b1561049c578091505b5f8211610505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e73756666696369656e74206e617469766520746f6b656e20616d6f756e7460448201526064016103e7565b335f90815260066020526040812080549161051f83611d16565b91905055505f61052e83610e9b565b90507fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93508160405161056191815260200190565b60405180910390a15050600160055550565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105e4575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103e7565b73ffffffffffffffffffffffffffffffffffffffff8116610631576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff16156106e7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600160055561071e816111dd565b50565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078f9190611d4d565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015262ffffff851660448301529192505f91831690631698ee8290606401602060405180830381865afa158015610811573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108359190611d4d565b905073ffffffffffffffffffffffffffffffffffffffff81166108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f742065786973740000000000000000000000000060448201526064016103e7565b5f5f8273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156108ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109239190611d8d565b50506040517f252c09d700000000000000000000000000000000000000000000000000000000815261ffff841660048201529496509194505f9373ffffffffffffffffffffffffffffffffffffffff8816935063252c09d792506024019050608060405180830381865afa15801561099d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c19190611e31565b505050905042610708826109d59190611e8e565b63ffffffff1610156109eb575050505050610ade565b5f6109f585611364565b90505f610a2273ffffffffffffffffffffffffffffffffffffffff861680680100000000000000006114fa565b90505f8215610a6357828211610a5357610a4e610a3f8385611eb0565b670de0b6b3a7640000856114fa565b610a60565b610a60610a3f8484611eb0565b90505b67016345785d8a0000811115610ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f507269636520646576696174696f6e20746f6f2068696768000000000000000060448201526064016103e7565b50505050505050505b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b55575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103e7565b73ffffffffffffffffffffffffffffffffffffffff8116610ba2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b8180940394905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c81575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103e7565b73ffffffffffffffffffffffffffffffffffffffff8116610cce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b335f908152600660205260408120805491610d5483611d16565b9091555050600354604080517f673a7e2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163673a7e28916004808301926020929190829003018187875af1158015610dc7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610deb9190611ec3565b905080610e54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f7261636c6520707269636520757064617465206661696c656400000000000060448201526064016103e7565b600354604051339173ffffffffffffffffffffffffffffffffffffffff16907fccf049defd051e7117a233e0f6c01636afab6fb9b1824ae42b5bf7e034fdba37905f90a350565b600354600480546040517f136d6f21000000000000000000000000000000000000000000000000000000008152918201525f9173ffffffffffffffffffffffffffffffffffffffff169063136d6f2190602401602060405180830381865afa158015610f09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2d9190611ec3565b610fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4265666f7265207377617020736c697070616765206c696d697420697320627260448201527f656163686564000000000000000000000000000000000000000000000000000060648201526084016103e7565b600354604080517f98d5fdca00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff16916398d5fdca9160048083019260209291908290030181865afa158015611026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190611cd2565b905061105583611518565b91505f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e69190611cd2565b90505f606460045460646110fa9190611eb0565b6111049085611edc565b61110e9190611f20565b90505f606460045460646111229190611f33565b61112c9086611edc565b6111369190611f20565b90508183101580156111485750808311155b6111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4166746572207377617020736c697070616765206c696d69742069732062726560448201527f616368656400000000000000000000000000000000000000000000000000000060648201526084016103e7565b50505050919050565b6060818060200190518101906111f39190611f69565b600455805190915081905f9061120b5761120b612012565b602002602001015160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018151811061126557611265612012565b602002602001015160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002815181106112bf576112bf612012565b602002602001015160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038151811061131957611319612012565b602002602001015160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6040805160028082526060820183525f9283929190602083019080368337019050509050610708815f8151811061139d5761139d612012565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063883bdbfd9061140690859060040161203f565b5f60405180830381865afa158015611420573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261146591908101906120f5565b5090505f815f8151811061147b5761147b612012565b60200260200101518260018151811061149657611496612012565b60200260200101516114a891906121ba565b90505f6114b7610708836121ff565b90505f6114c382611737565b90506114ef73ffffffffffffffffffffffffffffffffffffffff821680680100000000000000006114fa565b979650505050505050565b828202811515841585830485141716611511575f5ffd5b0492915050565b6002546007546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018490525f92919091169063095ea7b3906044016020604051808303815f875af1158015611594573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b89190611ec3565b506040805160028082526060820183525f926020830190803683375050600254825192935073ffffffffffffffffffffffffffffffffffffffff16918391505f9061160557611605612012565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600180548351921691839190811061164257611642612012565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f38ed17390000000000000000000000000000000000000000000000000000000081525f9291909116906338ed1739906116b19087908590879030904290600401612272565b5f604051808303815f875af11580156116cc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261171191908101906122fc565b90508060018151811061172657611726612012565b602002602001015192505050919050565b5f5f5f8360020b1261174c578260020b611753565b8260020b5f035b9050620d89e8811115611792576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001165f036117b4577001000000000000000000000000000000006117c6565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156117fa576ffff97272373d413259a46990580e213a0260801c5b6004821615611819576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611838576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611857576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611876576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611895576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156118b4576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156118d4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156118f4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611914576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611934576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611954576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611974576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611994576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156119b4576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156119d5576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156119f5576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611a14576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611a31576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611a6f57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611a6b57611a6b611ef3565b0490505b640100000000810615611a83576001611a85565b5f5b60ff16602082901c0192505050919050565b5f60208284031215611aa7575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461071e575f5ffd5b5f60208284031215611adf575f5ffd5b8135611aea81611aae565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b6557611b65611af1565b604052919050565b5f60208284031215611b7d575f5ffd5b813567ffffffffffffffff811115611b93575f5ffd5b8201601f81018413611ba3575f5ffd5b803567ffffffffffffffff811115611bbd57611bbd611af1565b611bee60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611b1e565b818152856020838501011115611c02575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f5f5f60808587031215611c32575f5ffd5b8435611c3d81611aae565b93506020850135611c4d81611aae565b92506040850135611c5d81611aae565b9150606085013562ffffff81168114611c74575f5ffd5b939692955090935050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f60208284031215611ce2575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d4657611d46611ce9565b5060010190565b5f60208284031215611d5d575f5ffd5b8151611aea81611aae565b805161ffff81168114611d79575f5ffd5b919050565b80518015158114611d79575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611da3575f5ffd5b8751611dae81611aae565b8097505060208801518060020b8114611dc5575f5ffd5b9550611dd360408901611d68565b9450611de160608901611d68565b9350611def60808901611d68565b925060a088015160ff81168114611e04575f5ffd5b9150611e1260c08901611d7e565b905092959891949750929550565b8051600681900b8114611d79575f5ffd5b5f5f5f5f60808587031215611e44575f5ffd5b845163ffffffff81168114611e57575f5ffd5b9350611e6560208601611e20565b92506040850151611e7581611aae565b9150611e8360608601611d7e565b905092959194509250565b63ffffffff8181168382160190811115611eaa57611eaa611ce9565b92915050565b81810381811115611eaa57611eaa611ce9565b5f60208284031215611ed3575f5ffd5b611aea82611d7e565b8082028115828204841417611eaa57611eaa611ce9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611f2e57611f2e611ef3565b500490565b80820180821115611eaa57611eaa611ce9565b5f67ffffffffffffffff821115611f5f57611f5f611af1565b5060051b60200190565b5f5f60408385031215611f7a575f5ffd5b825167ffffffffffffffff811115611f90575f5ffd5b8301601f81018513611fa0575f5ffd5b8051611fb3611fae82611f46565b611b1e565b8082825260208201915060208360051b850101925087831115611fd4575f5ffd5b6020840193505b82841015611fff578351611fee81611aae565b825260209384019390910190611fdb565b6020969096015195979596505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b8181101561207c57835163ffffffff16835260209384019390920191600101612058565b509095945050505050565b5f82601f830112612096575f5ffd5b81516120a4611fae82611f46565b8082825260208201915060208360051b8601019250858311156120c5575f5ffd5b602085015b838110156120eb5780516120dd81611aae565b8352602092830192016120ca565b5095945050505050565b5f5f60408385031215612106575f5ffd5b825167ffffffffffffffff81111561211c575f5ffd5b8301601f8101851361212c575f5ffd5b805161213a611fae82611f46565b8082825260208201915060208360051b85010192508783111561215b575f5ffd5b6020840193505b828410156121845761217384611e20565b825260209384019390910190612162565b80955050505050602083015167ffffffffffffffff8111156121a4575f5ffd5b6121b085828601612087565b9150509250929050565b600682810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008112667fffffffffffff82131715611eaa57611eaa611ce9565b5f8160060b8360060b8061221557612215611ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008314161561226957612269611ce9565b90059392505050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156122cf57835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161229b565b505073ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b5f6020828403121561230c575f5ffd5b815167ffffffffffffffff811115612322575f5ffd5b8201601f81018413612332575f5ffd5b8051612340611fae82611f46565b8082825260208201915060208360051b850101925086831115612361575f5ffd5b6020840193505b82841015612383578351825260209384019390910190612368565b969550505050505056fea26469706673582212205b8d806a7cc144d9d6e3db4431a95745f448e530fe86e1a7f240ef3e1769343b64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/BuyBackBurnerUniswapCelo.json b/abis/0.8.28/BuyBackBurnerUniswapCelo.json new file mode 100644 index 0000000..f940ef8 --- /dev/null +++ b/abis/0.8.28/BuyBackBurnerUniswapCelo.json @@ -0,0 +1,375 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BuyBackBurnerUniswap", + "sourceName": "contracts/BuyBackBurnerUniswap.sol", + "abi": [ + { + "inputs": [], + "name": "AlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "T", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "olasAmount", + "type": "uint256" + } + ], + "name": "BuyBack", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "OraclePriceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "OracleUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "BUY_BACK_BURNER_PROXY", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ALLOWED_DEVIATION", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OLAS_BURNER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SECONDS_AGO", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nativeTokenAmount", + "type": "uint256" + } + ], + "name": "buyBack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "changeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "changeOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "address", + "name": "uniV3PositionManager", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "checkPoolPrices", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "payload", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAccountActivities", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "olas", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateOraclePrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040526001600555348015601457600080fd5b50612481806100246000396000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80638b9ee610116100cd578063c0bbd88411610081578063f887ea4011610066578063f887ea40146102fa578063f9cc3e9c1461031a578063ffa1ad741461034157600080fd5b8063c0bbd884146102d2578063e1758bd8146102da57600080fd5b80638da5cb5b116100b25780638da5cb5b14610281578063a6f9dae1146102a1578063aeb2d711146102b457600080fd5b80638b9ee6101461025d5780638c04166f1461027857600080fd5b8063439fab911161012457806347c421b51161010957806347c421b51461021b5780637c9e639f1461022e5780637dc0d1d01461023d57600080fd5b8063439fab91146101f557806343b23a1b1461020857600080fd5b806231d11514610155578063053f90401461019f57806317a68dd8146101b457806340b67a9b146101c7575b600080fd5b6001546101759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101b26101ad366004611af7565b61038a565b005b6101b26101c2366004611b32565b610584565b6101e76101d5366004611b32565b60066020526000908152604090205481565b604051908152602001610196565b6101b2610203366004611bd4565b6106ac565b6101b2610216366004611c8c565b610737565b6101b2610229366004611b32565b610b09565b6101e767016345785d8a000081565b6003546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6101757351eb65012ca5ceb07320c497f4151ac207fea4e081565b6101e760045481565b6000546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6101b26102af366004611b32565b610c38565b6102bd61070881565b60405163ffffffff9091168152602001610196565b6101b2610d65565b6002546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6101e77fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b61037d6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516101969190611cf0565b6005546001146103fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026005819055546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190611d5c565b90508115806104a157508082115b156104aa578091505b60008211610514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e73756666696369656e74206e617469766520746f6b656e20616d6f756e7460448201526064016103f2565b33600090815260066020526040812080549161052f83611da4565b9190505550600061053f83610ecb565b90507fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93508160405161057291815260200190565b60405180910390a15050600160055550565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105f7576000546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103f2565b73ffffffffffffffffffffffffffffffffffffffff8116610644576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0390600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff16156106fc576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600160055561073481611219565b50565b60008273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a89190611ddc565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015262ffffff85166044830152919250600091831690631698ee8290606401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108519190611ddc565b905073ffffffffffffffffffffffffffffffffffffffff81166108d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f742065786973740000000000000000000000000060448201526064016103f2565b6000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190611e20565b50506040517f252c09d700000000000000000000000000000000000000000000000000000000815261ffff8416600482015294965091945060009373ffffffffffffffffffffffffffffffffffffffff8816935063252c09d792506024019050608060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e39190611ecc565b505050905042610708826109f79190611f2d565b63ffffffff161015610a0d575050505050610b03565b6000610a18856113a5565b90506000610a4673ffffffffffffffffffffffffffffffffffffffff86168068010000000000000000611546565b905060008215610a8857828211610a7857610a73610a648385611f4f565b670de0b6b3a764000085611546565b610a85565b610a85610a648484611f4f565b90505b67016345785d8a0000811115610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f507269636520646576696174696f6e20746f6f2068696768000000000000000060448201526064016103f2565b50505050505050505b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b7c576000546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103f2565b73ffffffffffffffffffffffffffffffffffffffff8116610bc9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b818094039490600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cab576000546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103f2565b73ffffffffffffffffffffffffffffffffffffffff8116610cf8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b336000908152600660205260408120805491610d8083611da4565b9091555050600354604080517f673a7e28000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163673a7e28916004808301926020929190829003018187875af1158015610df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1a9190611f62565b905080610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f7261636c6520707269636520757064617465206661696c656400000000000060448201526064016103f2565b600354604051339173ffffffffffffffffffffffffffffffffffffffff16907fccf049defd051e7117a233e0f6c01636afab6fb9b1824ae42b5bf7e034fdba3790600090a350565b600354600480546040517f136d6f210000000000000000000000000000000000000000000000000000000081529182015260009173ffffffffffffffffffffffffffffffffffffffff169063136d6f2190602401602060405180830381865afa158015610f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190611f62565b610fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4265666f7265207377617020736c697070616765206c696d697420697320627260448201527f656163686564000000000000000000000000000000000000000000000000000060648201526084016103f2565b600354604080517f98d5fdca000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916398d5fdca9160048083019260209291908290030181865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190611d5c565b905061108b83611565565b91506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111209190611d5c565b90506000606460045460646111359190611f4f565b61113f9085611f7d565b6111499190611fc3565b905060006064600454606461115e9190611fd7565b6111689086611f7d565b6111729190611fc3565b90508183101580156111845750808311155b611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4166746572207377617020736c697070616765206c696d69742069732062726560448201527f616368656400000000000000000000000000000000000000000000000000000060648201526084016103f2565b50505050919050565b60608180602001905181019061122f919061200e565b60045580519091508190600090611248576112486120bc565b6020026020010151600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001815181106112a3576112a36120bc565b6020026020010151600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002815181106112fe576112fe6120bc565b6020026020010151600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600381518110611359576113596120bc565b6020026020010151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60408051600280825260608201835260009283929190602083019080368337019050509050610708816000815181106113e0576113e06120bc565b63ffffffff909216602092830291909101909101526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063883bdbfd9061144a9085906004016120eb565b600060405180830381865afa158015611467573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114ad91908101906121a5565b5090506000816000815181106114c5576114c56120bc565b6020026020010151826001815181106114e0576114e06120bc565b60200260200101516114f29190612270565b90506000611502610708836122b5565b9050600061150f82611790565b905061153b73ffffffffffffffffffffffffffffffffffffffff82168068010000000000000000611546565b979650505050505050565b82820281151584158583048514171661155e57600080fd5b0492915050565b6002546007546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101849052600092919091169063095ea7b3906044016020604051808303816000875af11580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116099190611f62565b506040805160028082526060820183526000926020830190803683375050600254825192935073ffffffffffffffffffffffffffffffffffffffff1691839150600090611658576116586120bc565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526001805483519216918391908110611695576116956120bc565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f38ed173900000000000000000000000000000000000000000000000000000000815260009291909116906338ed1739906117059087908590879030904290600401612329565b6000604051808303816000875af1158015611724573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261176a91908101906123b5565b90508060018151811061177f5761177f6120bc565b602002602001015192505050919050565b60008060008360020b126117a7578260020b6117af565b8260020b6000035b9050620d89e88111156117ee576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160011660000361181257700100000000000000000000000000000000611824565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611858576ffff97272373d413259a46990580e213a0260801c5b6004821615611877576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611896576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156118b5576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156118d4576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156118f3576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611912576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611932576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611952576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611972576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611992576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156119b2576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156119d2576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156119f2576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611a12576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611a33576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611a53576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611a72576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611a8f576b048a170391f7dc42444e8fa20260801c5b60008460020b1315611ace57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611aca57611aca611f94565b0490505b640100000000810615611ae2576001611ae5565b60005b60ff16602082901c0192505050919050565b600060208284031215611b0957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461073457600080fd5b600060208284031215611b4457600080fd5b8135611b4f81611b10565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611bcc57611bcc611b56565b604052919050565b600060208284031215611be657600080fd5b813567ffffffffffffffff811115611bfd57600080fd5b8201601f81018413611c0e57600080fd5b803567ffffffffffffffff811115611c2857611c28611b56565b611c5960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611b85565b818152856020838501011115611c6e57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008060008060808587031215611ca257600080fd5b8435611cad81611b10565b93506020850135611cbd81611b10565b92506040850135611ccd81611b10565b9150606085013562ffffff81168114611ce557600080fd5b939692955090935050565b602081526000825180602084015260005b81811015611d1e5760208186018101516040868401015201611d01565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b600060208284031215611d6e57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611dd557611dd5611d75565b5060010190565b600060208284031215611dee57600080fd5b8151611b4f81611b10565b805161ffff81168114611e0b57600080fd5b919050565b80518015158114611e0b57600080fd5b600080600080600080600060e0888a031215611e3b57600080fd5b8751611e4681611b10565b8097505060208801518060020b8114611e5e57600080fd5b9550611e6c60408901611df9565b9450611e7a60608901611df9565b9350611e8860808901611df9565b925060a088015160ff81168114611e9e57600080fd5b9150611eac60c08901611e10565b905092959891949750929550565b8051600681900b8114611e0b57600080fd5b60008060008060808587031215611ee257600080fd5b845163ffffffff81168114611ef657600080fd5b9350611f0460208601611eba565b92506040850151611f1481611b10565b9150611f2260608601611e10565b905092959194509250565b63ffffffff8181168382160190811115611f4957611f49611d75565b92915050565b81810381811115611f4957611f49611d75565b600060208284031215611f7457600080fd5b611b4f82611e10565b8082028115828204841417611f4957611f49611d75565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611fd257611fd2611f94565b500490565b80820180821115611f4957611f49611d75565b600067ffffffffffffffff82111561200457612004611b56565b5060051b60200190565b6000806040838503121561202157600080fd5b825167ffffffffffffffff81111561203857600080fd5b8301601f8101851361204957600080fd5b805161205c61205782611fea565b611b85565b8082825260208201915060208360051b85010192508783111561207e57600080fd5b6020840193505b828410156120a957835161209881611b10565b825260209384019390910190612085565b6020969096015195979596505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602080825282518282018190526000918401906040840190835b8181101561212957835163ffffffff16835260209384019390920191600101612105565b509095945050505050565b600082601f83011261214557600080fd5b815161215361205782611fea565b8082825260208201915060208360051b86010192508583111561217557600080fd5b602085015b8381101561219b57805161218d81611b10565b83526020928301920161217a565b5095945050505050565b600080604083850312156121b857600080fd5b825167ffffffffffffffff8111156121cf57600080fd5b8301601f810185136121e057600080fd5b80516121ee61205782611fea565b8082825260208201915060208360051b85010192508783111561221057600080fd5b6020840193505b828410156122395761222884611eba565b825260209384019390910190612217565b80955050505050602083015167ffffffffffffffff81111561225a57600080fd5b61226685828601612134565b9150509250929050565b600682810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008112667fffffffffffff82131715611f4957611f49611d75565b60008160060b8360060b806122cc576122cc611f94565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008314161561232057612320611d75565b90059392505050565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b8181101561238857835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612354565b505073ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b6000602082840312156123c757600080fd5b815167ffffffffffffffff8111156123de57600080fd5b8201601f810184136123ef57600080fd5b80516123fd61205782611fea565b8082825260208201915060208360051b85010192508683111561241f57600080fd5b6020840193505b82841015612441578351825260209384019390910190612426565b969550505050505056fea264697066735822122061e9bdf25329413bc8195ad412b18158f182dd641858661db5a6a2ca22f07a5164736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101505760003560e01c80638b9ee610116100cd578063c0bbd88411610081578063f887ea4011610066578063f887ea40146102fa578063f9cc3e9c1461031a578063ffa1ad741461034157600080fd5b8063c0bbd884146102d2578063e1758bd8146102da57600080fd5b80638da5cb5b116100b25780638da5cb5b14610281578063a6f9dae1146102a1578063aeb2d711146102b457600080fd5b80638b9ee6101461025d5780638c04166f1461027857600080fd5b8063439fab911161012457806347c421b51161010957806347c421b51461021b5780637c9e639f1461022e5780637dc0d1d01461023d57600080fd5b8063439fab91146101f557806343b23a1b1461020857600080fd5b806231d11514610155578063053f90401461019f57806317a68dd8146101b457806340b67a9b146101c7575b600080fd5b6001546101759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101b26101ad366004611af7565b61038a565b005b6101b26101c2366004611b32565b610584565b6101e76101d5366004611b32565b60066020526000908152604090205481565b604051908152602001610196565b6101b2610203366004611bd4565b6106ac565b6101b2610216366004611c8c565b610737565b6101b2610229366004611b32565b610b09565b6101e767016345785d8a000081565b6003546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6101757351eb65012ca5ceb07320c497f4151ac207fea4e081565b6101e760045481565b6000546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6101b26102af366004611b32565b610c38565b6102bd61070881565b60405163ffffffff9091168152602001610196565b6101b2610d65565b6002546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101759073ffffffffffffffffffffffffffffffffffffffff1681565b6101e77fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981565b61037d6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516101969190611cf0565b6005546001146103fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026005819055546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190611d5c565b90508115806104a157508082115b156104aa578091505b60008211610514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e73756666696369656e74206e617469766520746f6b656e20616d6f756e7460448201526064016103f2565b33600090815260066020526040812080549161052f83611da4565b9190505550600061053f83610ecb565b90507fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93508160405161057291815260200190565b60405180910390a15050600160055550565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105f7576000546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103f2565b73ffffffffffffffffffffffffffffffffffffffff8116610644576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc1981905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0390600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff16156106fc576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600160055561073481611219565b50565b60008273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a89190611ddc565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015262ffffff85166044830152919250600091831690631698ee8290606401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108519190611ddc565b905073ffffffffffffffffffffffffffffffffffffffff81166108d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f742065786973740000000000000000000000000060448201526064016103f2565b6000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190611e20565b50506040517f252c09d700000000000000000000000000000000000000000000000000000000815261ffff8416600482015294965091945060009373ffffffffffffffffffffffffffffffffffffffff8816935063252c09d792506024019050608060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e39190611ecc565b505050905042610708826109f79190611f2d565b63ffffffff161015610a0d575050505050610b03565b6000610a18856113a5565b90506000610a4673ffffffffffffffffffffffffffffffffffffffff86168068010000000000000000611546565b905060008215610a8857828211610a7857610a73610a648385611f4f565b670de0b6b3a764000085611546565b610a85565b610a85610a648484611f4f565b90505b67016345785d8a0000811115610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f507269636520646576696174696f6e20746f6f2068696768000000000000000060448201526064016103f2565b50505050505050505b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b7c576000546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103f2565b73ffffffffffffffffffffffffffffffffffffffff8116610bc9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b818094039490600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cab576000546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016103f2565b73ffffffffffffffffffffffffffffffffffffffff8116610cf8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b336000908152600660205260408120805491610d8083611da4565b9091555050600354604080517f673a7e28000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163673a7e28916004808301926020929190829003018187875af1158015610df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1a9190611f62565b905080610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f7261636c6520707269636520757064617465206661696c656400000000000060448201526064016103f2565b600354604051339173ffffffffffffffffffffffffffffffffffffffff16907fccf049defd051e7117a233e0f6c01636afab6fb9b1824ae42b5bf7e034fdba3790600090a350565b600354600480546040517f136d6f210000000000000000000000000000000000000000000000000000000081529182015260009173ffffffffffffffffffffffffffffffffffffffff169063136d6f2190602401602060405180830381865afa158015610f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190611f62565b610fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4265666f7265207377617020736c697070616765206c696d697420697320627260448201527f656163686564000000000000000000000000000000000000000000000000000060648201526084016103f2565b600354604080517f98d5fdca000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916398d5fdca9160048083019260209291908290030181865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190611d5c565b905061108b83611565565b91506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111209190611d5c565b90506000606460045460646111359190611f4f565b61113f9085611f7d565b6111499190611fc3565b905060006064600454606461115e9190611fd7565b6111689086611f7d565b6111729190611fc3565b90508183101580156111845750808311155b611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4166746572207377617020736c697070616765206c696d69742069732062726560448201527f616368656400000000000000000000000000000000000000000000000000000060648201526084016103f2565b50505050919050565b60608180602001905181019061122f919061200e565b60045580519091508190600090611248576112486120bc565b6020026020010151600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001815181106112a3576112a36120bc565b6020026020010151600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002815181106112fe576112fe6120bc565b6020026020010151600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600381518110611359576113596120bc565b6020026020010151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60408051600280825260608201835260009283929190602083019080368337019050509050610708816000815181106113e0576113e06120bc565b63ffffffff909216602092830291909101909101526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063883bdbfd9061144a9085906004016120eb565b600060405180830381865afa158015611467573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114ad91908101906121a5565b5090506000816000815181106114c5576114c56120bc565b6020026020010151826001815181106114e0576114e06120bc565b60200260200101516114f29190612270565b90506000611502610708836122b5565b9050600061150f82611790565b905061153b73ffffffffffffffffffffffffffffffffffffffff82168068010000000000000000611546565b979650505050505050565b82820281151584158583048514171661155e57600080fd5b0492915050565b6002546007546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101849052600092919091169063095ea7b3906044016020604051808303816000875af11580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116099190611f62565b506040805160028082526060820183526000926020830190803683375050600254825192935073ffffffffffffffffffffffffffffffffffffffff1691839150600090611658576116586120bc565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526001805483519216918391908110611695576116956120bc565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f38ed173900000000000000000000000000000000000000000000000000000000815260009291909116906338ed1739906117059087908590879030904290600401612329565b6000604051808303816000875af1158015611724573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261176a91908101906123b5565b90508060018151811061177f5761177f6120bc565b602002602001015192505050919050565b60008060008360020b126117a7578260020b6117af565b8260020b6000035b9050620d89e88111156117ee576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160011660000361181257700100000000000000000000000000000000611824565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611858576ffff97272373d413259a46990580e213a0260801c5b6004821615611877576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611896576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156118b5576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156118d4576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156118f3576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611912576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611932576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611952576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611972576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611992576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156119b2576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156119d2576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156119f2576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611a12576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611a33576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611a53576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611a72576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611a8f576b048a170391f7dc42444e8fa20260801c5b60008460020b1315611ace57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611aca57611aca611f94565b0490505b640100000000810615611ae2576001611ae5565b60005b60ff16602082901c0192505050919050565b600060208284031215611b0957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461073457600080fd5b600060208284031215611b4457600080fd5b8135611b4f81611b10565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611bcc57611bcc611b56565b604052919050565b600060208284031215611be657600080fd5b813567ffffffffffffffff811115611bfd57600080fd5b8201601f81018413611c0e57600080fd5b803567ffffffffffffffff811115611c2857611c28611b56565b611c5960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611b85565b818152856020838501011115611c6e57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008060008060808587031215611ca257600080fd5b8435611cad81611b10565b93506020850135611cbd81611b10565b92506040850135611ccd81611b10565b9150606085013562ffffff81168114611ce557600080fd5b939692955090935050565b602081526000825180602084015260005b81811015611d1e5760208186018101516040868401015201611d01565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b600060208284031215611d6e57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611dd557611dd5611d75565b5060010190565b600060208284031215611dee57600080fd5b8151611b4f81611b10565b805161ffff81168114611e0b57600080fd5b919050565b80518015158114611e0b57600080fd5b600080600080600080600060e0888a031215611e3b57600080fd5b8751611e4681611b10565b8097505060208801518060020b8114611e5e57600080fd5b9550611e6c60408901611df9565b9450611e7a60608901611df9565b9350611e8860808901611df9565b925060a088015160ff81168114611e9e57600080fd5b9150611eac60c08901611e10565b905092959891949750929550565b8051600681900b8114611e0b57600080fd5b60008060008060808587031215611ee257600080fd5b845163ffffffff81168114611ef657600080fd5b9350611f0460208601611eba565b92506040850151611f1481611b10565b9150611f2260608601611e10565b905092959194509250565b63ffffffff8181168382160190811115611f4957611f49611d75565b92915050565b81810381811115611f4957611f49611d75565b600060208284031215611f7457600080fd5b611b4f82611e10565b8082028115828204841417611f4957611f49611d75565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611fd257611fd2611f94565b500490565b80820180821115611f4957611f49611d75565b600067ffffffffffffffff82111561200457612004611b56565b5060051b60200190565b6000806040838503121561202157600080fd5b825167ffffffffffffffff81111561203857600080fd5b8301601f8101851361204957600080fd5b805161205c61205782611fea565b611b85565b8082825260208201915060208360051b85010192508783111561207e57600080fd5b6020840193505b828410156120a957835161209881611b10565b825260209384019390910190612085565b6020969096015195979596505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602080825282518282018190526000918401906040840190835b8181101561212957835163ffffffff16835260209384019390920191600101612105565b509095945050505050565b600082601f83011261214557600080fd5b815161215361205782611fea565b8082825260208201915060208360051b86010192508583111561217557600080fd5b602085015b8381101561219b57805161218d81611b10565b83526020928301920161217a565b5095945050505050565b600080604083850312156121b857600080fd5b825167ffffffffffffffff8111156121cf57600080fd5b8301601f810185136121e057600080fd5b80516121ee61205782611fea565b8082825260208201915060208360051b85010192508783111561221057600080fd5b6020840193505b828410156122395761222884611eba565b825260209384019390910190612217565b80955050505050602083015167ffffffffffffffff81111561225a57600080fd5b61226685828601612134565b9150509250929050565b600682810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008112667fffffffffffff82131715611f4957611f49611d75565b60008160060b8360060b806122cc576122cc611f94565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000008314161561232057612320611d75565b90059392505050565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b8181101561238857835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612354565b505073ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b6000602082840312156123c757600080fd5b815167ffffffffffffffff8111156123de57600080fd5b8201601f810184136123ef57600080fd5b80516123fd61205782611fea565b8082825260208201915060208360051b85010192508683111561241f57600080fd5b6020840193505b82841015612441578351825260209384019390910190612426565b969550505050505056fea264697066735822122061e9bdf25329413bc8195ad412b18158f182dd641858661db5a6a2ca22f07a5164736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/MemeArbitrum.json b/abis/0.8.28/MemeArbitrum.json new file mode 100644 index 0000000..a151d0e --- /dev/null +++ b/abis/0.8.28/MemeArbitrum.json @@ -0,0 +1,673 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MemeArbitrum", + "sourceName": "contracts/MemeArbitrum.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_olas", + "type": "address" + }, + { + "internalType": "address", + "name": "_nativeToken", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniV3PositionManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_buyBackBurner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_minNativeTokenValue", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "hearter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allocation", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "feeCollector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nativeTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "memeTokenAmount", + "type": "uint256" + } + ], + "name": "FeesCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "hearter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Hearted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "OLASJourneyToAscendance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Purged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "summoner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Summoned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "unleasher", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "name": "Unleashed", + "type": "event" + }, + { + "inputs": [], + "name": "COLLECT_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DECIMALS", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FEE_TIER", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LP_PERCENTAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TICK", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_TICK", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_TOTAL_SUPPLY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OLAS_BURN_PERCENTAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "UNLEASH_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "buyBackBurner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "collectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "memeToken", + "type": "address" + } + ], + "name": "collectThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + } + ], + "name": "heartThisMeme", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAccountActivities", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "memeHearters", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "memeSummons", + "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nativeTokenContributed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "summonTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unleashTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "heartersAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isNativeFirst", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "memeTokenNonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "memeTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minNativeTokenValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "olas", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "memeToken", + "type": "address" + } + ], + "name": "purgeThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduleForAscendance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduledForAscendance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "summonThisMeme", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "uniV3PositionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + } + ], + "name": "unleashThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61012060405260016002556001600355600160045534801561001f575f5ffd5b50604051614d1b380380614d1b83398101604081905261003e91610082565b6001600160a01b0394851660a05292841660c05290831660e052909116610100526080526100dc565b80516001600160a01b038116811461007d575f5ffd5b919050565b5f5f5f5f5f60a08688031215610096575f5ffd5b61009f86610067565b94506100ad60208701610067565b93506100bb60408701610067565b92506100c960608701610067565b9150608086015190509295509295909350565b60805160a05160c05160e05161010051614b8b6101905f395f8181610432015281816111f4015261234401525f81816104ac0152818161230e0152818161243301528181612a2401528181612c2f01528181612cd601528181612d910152612ef401525f81816105770152818161122301528181611f180152818161227a015281816122a00152818161292f0152818161297a01526129a201525f6101ce01525f81816104df015261155a0152614b8b5ff3fe6080604052600436106101b9575f3560e01c806372f2a36b116100f2578063b72124e311610092578063e0be161711610062578063e0be161714610553578063e1758bd814610566578063f74e481b14610599578063ffa1ad74146105b8575f5ffd5b8063b72124e314610514578063be399e2b1461052a578063d1b0c28814610514578063dab346ff1461053f575f5ffd5b8063a1634b14116100cd578063a1634b1414610468578063a2a7eb951461049b578063a5ae390c146104ce578063b1bd3c9514610501575f5ffd5b806372f2a36b146103ed578063803551a9146104215780638e499bcf14610454575f5ffd5b806340b67a9b1161015d5780635122c409116101385780635122c4091461037657806358c0f7291461039357806367608ad0146103b25780636882a888146103c6575f5ffd5b806340b67a9b14610303578063466ffbce1461032e5780634c69a6c91461034d575f5ffd5b80631ecfd535116101985780631ecfd5351461027f5780632e0f2625146102aa57806335f9f8d9146102d05780633d0cc375146102e4575f5ffd5b806231d115146101bd57806309ca5a111461021a5780630df400c61461023b575b5f5ffd5b3480156101c8575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610225575f5ffd5b50610239610234366004613137565b61060d565b005b348015610246575f5ffd5b50610271610255366004613172565b600660209081525f928352604080842090915290825290205481565b604051908152602001610211565b34801561028a575f5ffd5b506102716102993660046131a0565b60076020525f908152604090205481565b3480156102b5575f5ffd5b506102be601281565b60405160ff9091168152602001610211565b3480156102db575f5ffd5b50610271603281565b3480156102ef575f5ffd5b506102396102fe3660046131a0565b610865565b34801561030e575f5ffd5b5061027161031d3660046131a0565b60086020525f908152604090205481565b348015610339575f5ffd5b506101f0610348366004613137565b610da9565b348015610358575f5ffd5b5061036261271081565b60405162ffffff9091168152602001610211565b348015610381575f5ffd5b5061027169d3c21bcecceda100000081565b34801561039e575f5ffd5b506102396103ad36600461323e565b610dde565b3480156103bd575f5ffd5b506102396110a3565b3480156103d1575f5ffd5b506103da6112c9565b60405160029190910b8152602001610211565b3480156103f8575f5ffd5b5061040c610407366004613137565b6112f5565b6040516102119998979695949392919061333e565b34801561042c575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561045f575f5ffd5b506102715f5481565b348015610473575f5ffd5b506103da7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b3480156104a6575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d9575f5ffd5b506102717f000000000000000000000000000000000000000000000000000000000000000081565b61023961050f366004613429565b61144b565b34801561051f575f5ffd5b506102716201518081565b348015610535575f5ffd5b5061027160015481565b34801561054a575f5ffd5b50610271600a81565b610239610561366004613137565b61189f565b348015610571575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a4575f5ffd5b506102396105b33660046131a0565b611b29565b3480156105c3575f5ffd5b506106006040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102119190613497565b60035460011461067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546106fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b62015180816004015461077a91906134d6565b4210156107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610675565b60038101546107f181611f16565b5f60646107ff600a846134ef565b6108099190613506565b90505f610816828461353e565b90508160015f82825461082991906134d6565b9091555050335f90815260086020526040812080549161084883613551565b919050555061085985858386611f96565b50506001600355505050565b6003546001146108d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f9081526007602090815260408083205480845260059092528083208151610120810190925280549293928290829061092590613588565b80601f016020809104026020016040519081016040528092919081815260200182805461095190613588565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b505050505081526020016001820180546109b590613588565b80601f01602080910402602001604051908101604052809291908181526020018280546109e190613588565b8015610a2c5780601f10610a0357610100808354040283529160200191610a2c565b820191905f5260205f20905b815481529060010190602001808311610a0f57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151610b0491906134d6565b4211610b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610675565b335f908152600860205260408120805491610bac83613551565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610c1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4191906135d9565b90505f8111610cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610675565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610d37575f5ffd5b505af1158015610d49573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610d9591815260200190565b60405180910390a250506001600355505050565b60098181548110610db8575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b6002600355335f908152600860205260408120805491610e6983613551565b909155505f90505b815181101561109a575f60075f848481518110610e9057610e906135f0565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610f0190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2d90613588565b8015610f785780601f10610f4f57610100808354040283529160200191610f78565b820191905f5260205f20905b815481529060010190602001808311610f5b57829003601f168201915b50505050508152602001600182018054610f9190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd90613588565b80156110085780601f10610fdf57610100808354040283529160200191611008565b820191905f5260205f20905b815481529060010190602001808311610feb57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061109090859085908110611078576110786135f0565b60200260200101518260e00151836101000151612270565b5050600101610e71565b50506001600355565b60035460011461110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003556004545f9061112557600154611129565b6001545b90505f8111611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610675565b5f60018190553381526008602052604081208054916111b283613551565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128d919061361d565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6112f27ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061363c565b81565b60056020525f908152604090208054819061130f90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461133b90613588565b80156113865780601f1061135d57610100808354040283529160200191611386565b820191905f5260205f20905b81548152906001019060200180831161136957829003601f168201915b50505050509080600101805461139b90613588565b80601f01602080910402602001604051908101604052809291908181526020018280546113c790613588565b80156114125780601f106113e957610100808354040283529160200191611412565b820191905f5260205f20905b8154815290600101906020018083116113f557829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b6003546001146114b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003558251158015906114cc57505f8251115b611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b7f0000000000000000000000000000000000000000000000000000000000000000341015611608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610675565b69d3c21bcecceda100000081101561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610675565b6fffffffffffffffffffffffffffffffff81106116f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610675565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061175890826136c4565b506020820151600182019061176d90826136c4565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f848152602093845281812033825284528181203490559190925290812080549161181283613551565b9091555061182390508160016134d6565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b60035460011461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003553461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610675565b5f8181526005602052604090206004810154611a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b6003810154611a9034826134d6565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611ac49084906134d6565b9091555050335f908152600860205260408120805491611ae383613551565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611be990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1590613588565b8015611c605780601f10611c3757610100808354040283529160200191611c60565b820191905f5260205f20905b815481529060010190602001808311611c4357829003601f168201915b50505050508152602001600182018054611c7990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca590613588565b8015611cf05780601f10611cc757610100808354040283529160200191611cf0565b820191905f5260205f20905b815481529060010190602001808311611cd357829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151611dc891906134d6565b421115611e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610675565b5f82815260066020908152604080832033845290915290205480611ed7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610675565b335f908152600860205260408120805491611ef183613551565b9190505550611f0b84848460c0015184866060015161261b565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611f7c575f5ffd5b505af1158015611f8e573d5f5f3e3d5ffd5b505050505050565b5f606460328560020154611faa91906134ef565b611fb49190613506565b90505f818560020154611fc7919061353e565b90505f6120ed87875f018054611fdc90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613588565b80156120535780601f1061202a57610100808354040283529160200191612053565b820191905f5260205f20905b81548152906001019060200180831161203657829003601f168201915b505050505088600101805461206790613588565b80601f016020809104026020016040519081016040528092919081815260200182805461209390613588565b80156120de5780601f106120b5576101008083540402835291602001916120de565b820191905f5260205f20905b8154815290600101906020018083116120c157829003601f168201915b5050505050896002015461273f565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526007602052604081208990559091508080612124848988612913565b4260058d015560068c0188905560078c01839055919450925090508015612174576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a8152600660209081526040808320338452909152902054801561220e5761220e858c88848c61261b565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261229e57847f00000000000000000000000000000000000000000000000000000000000000006122c1565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612386575f5ffd5b505afa158015612398573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af1158015612478573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249c91906137db565b915091505f8211806124ad57505f81115b612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610675565b5f5f871561252557508290508161252b565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612590575f5ffd5b505af11580156125a2573d5f5f3e3d5ffd5b505050508160015f8282546125b791906134d6565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f8161262784866134ef565b6126319190613506565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af11580156126c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e8919061361d565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f604051806020016127ec9061312a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052612834908890889060129089906020016137fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612870929160200161384f565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610675565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16101561296e575060015b5f5f5f5f846129a057897f0000000000000000000000000000000000000000000000000000000000000000898b6129c5565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a76400006129e391906134ef565b6129ed9190613506565b90505f633b9aca006129fe83613078565b612a15906c010000000000000000000000006134ef565b612a1f9190613506565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aaf919061386b565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612b2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b52919061386b565b905073ffffffffffffffffffffffffffffffffffffffff811615612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610675565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612c75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c99919061386b565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612d2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d53919061361d565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612de6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0a919061361d565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660612eb09061363c565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b8152600401612f4b9190613886565b6080604051808303815f875af1158015612f67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f8b9190613971565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a612fbf57868f612fba919061353e565b612fcb565b878f612fcb919061353e565b90508015612fea578060015f828254612fe491906134d6565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b15801561304f575f5ffd5b505af1158015613061573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b60b58171010000000000000000000000000000000000811061309f5760409190911b9060801c5b690100000000000000000081106130bb5760209190911b9060401c5b6501000000000081106130d35760109190911b9060201c5b630100000081106130e95760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b611194806139c283390190565b5f60208284031215613147575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461316f575f5ffd5b50565b5f5f60408385031215613183575f5ffd5b8235915060208301356131958161314e565b809150509250929050565b5f602082840312156131b0575f5ffd5b81356131bb8161314e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613236576132366131c2565b604052919050565b5f6020828403121561324e575f5ffd5b813567ffffffffffffffff811115613264575f5ffd5b8201601f81018413613274575f5ffd5b803567ffffffffffffffff81111561328e5761328e6131c2565b8060051b61329e602082016131ef565b918252602081840181019290810190878411156132b9575f5ffd5b6020850194505b838510156132e757843592506132d58361314e565b828252602094850194909101906132c0565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61335261012083018c6132f2565b8281036020840152613364818c6132f2565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f8301126133ae575f5ffd5b813567ffffffffffffffff8111156133c8576133c86131c2565b6133f960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131ef565b81815284602083860101111561340d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561343b575f5ffd5b833567ffffffffffffffff811115613451575f5ffd5b61345d8682870161339f565b935050602084013567ffffffffffffffff811115613479575f5ffd5b6134858682870161339f565b93969395505050506040919091013590565b602081525f6131bb60208301846132f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156134e9576134e96134a9565b92915050565b80820281158282048414176134e9576134e96134a9565b5f82613539577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156134e9576134e96134a9565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613581576135816134a9565b5060010190565b600181811c9082168061359c57607f821691505b6020821081036135d3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156135e9575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561362d575f5ffd5b815180151581146131bb575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103613670576136706134a9565b5f0392915050565b601f8211156136bf57805f5260205f20601f840160051c8101602085101561369d5750805b601f840160051c820191505b818110156136bc575f81556001016136a9565b50505b505050565b815167ffffffffffffffff8111156136de576136de6131c2565b6136f2816136ec8454613588565b84613678565b6020601f821160018114613743575f831561370d5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556136bc565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156137905787850151825560209485019460019092019101613770565b50848210156137cc57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156137ec575f5ffd5b505080516020909101519092909150565b608081525f61380f60808301876132f2565b828103602084015261382181876132f2565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f61386361385d8386613838565b84613838565b949350505050565b5f6020828403121561387b575f5ffd5b81516131bb8161314e565b815173ffffffffffffffffffffffffffffffffffffffff168152610160810160208301516138cc602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516138e3604084018262ffffff169052565b5060608301516138f8606084018260020b9052565b50608083015161390d608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161396161012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613984575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff811681146139ab575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a2646970667358221220267c6f5d9527498d0a8bf5c168f29818a5aafa7ce214bcc30e9bfd0c6af554df64736f6c634300081c0033", + "deployedBytecode": "0x6080604052600436106101b9575f3560e01c806372f2a36b116100f2578063b72124e311610092578063e0be161711610062578063e0be161714610553578063e1758bd814610566578063f74e481b14610599578063ffa1ad74146105b8575f5ffd5b8063b72124e314610514578063be399e2b1461052a578063d1b0c28814610514578063dab346ff1461053f575f5ffd5b8063a1634b14116100cd578063a1634b1414610468578063a2a7eb951461049b578063a5ae390c146104ce578063b1bd3c9514610501575f5ffd5b806372f2a36b146103ed578063803551a9146104215780638e499bcf14610454575f5ffd5b806340b67a9b1161015d5780635122c409116101385780635122c4091461037657806358c0f7291461039357806367608ad0146103b25780636882a888146103c6575f5ffd5b806340b67a9b14610303578063466ffbce1461032e5780634c69a6c91461034d575f5ffd5b80631ecfd535116101985780631ecfd5351461027f5780632e0f2625146102aa57806335f9f8d9146102d05780633d0cc375146102e4575f5ffd5b806231d115146101bd57806309ca5a111461021a5780630df400c61461023b575b5f5ffd5b3480156101c8575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610225575f5ffd5b50610239610234366004613137565b61060d565b005b348015610246575f5ffd5b50610271610255366004613172565b600660209081525f928352604080842090915290825290205481565b604051908152602001610211565b34801561028a575f5ffd5b506102716102993660046131a0565b60076020525f908152604090205481565b3480156102b5575f5ffd5b506102be601281565b60405160ff9091168152602001610211565b3480156102db575f5ffd5b50610271603281565b3480156102ef575f5ffd5b506102396102fe3660046131a0565b610865565b34801561030e575f5ffd5b5061027161031d3660046131a0565b60086020525f908152604090205481565b348015610339575f5ffd5b506101f0610348366004613137565b610da9565b348015610358575f5ffd5b5061036261271081565b60405162ffffff9091168152602001610211565b348015610381575f5ffd5b5061027169d3c21bcecceda100000081565b34801561039e575f5ffd5b506102396103ad36600461323e565b610dde565b3480156103bd575f5ffd5b506102396110a3565b3480156103d1575f5ffd5b506103da6112c9565b60405160029190910b8152602001610211565b3480156103f8575f5ffd5b5061040c610407366004613137565b6112f5565b6040516102119998979695949392919061333e565b34801561042c575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561045f575f5ffd5b506102715f5481565b348015610473575f5ffd5b506103da7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b3480156104a6575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d9575f5ffd5b506102717f000000000000000000000000000000000000000000000000000000000000000081565b61023961050f366004613429565b61144b565b34801561051f575f5ffd5b506102716201518081565b348015610535575f5ffd5b5061027160015481565b34801561054a575f5ffd5b50610271600a81565b610239610561366004613137565b61189f565b348015610571575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a4575f5ffd5b506102396105b33660046131a0565b611b29565b3480156105c3575f5ffd5b506106006040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102119190613497565b60035460011461067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546106fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b62015180816004015461077a91906134d6565b4210156107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610675565b60038101546107f181611f16565b5f60646107ff600a846134ef565b6108099190613506565b90505f610816828461353e565b90508160015f82825461082991906134d6565b9091555050335f90815260086020526040812080549161084883613551565b919050555061085985858386611f96565b50506001600355505050565b6003546001146108d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f9081526007602090815260408083205480845260059092528083208151610120810190925280549293928290829061092590613588565b80601f016020809104026020016040519081016040528092919081815260200182805461095190613588565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b505050505081526020016001820180546109b590613588565b80601f01602080910402602001604051908101604052809291908181526020018280546109e190613588565b8015610a2c5780601f10610a0357610100808354040283529160200191610a2c565b820191905f5260205f20905b815481529060010190602001808311610a0f57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151610b0491906134d6565b4211610b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610675565b335f908152600860205260408120805491610bac83613551565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610c1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4191906135d9565b90505f8111610cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610675565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610d37575f5ffd5b505af1158015610d49573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610d9591815260200190565b60405180910390a250506001600355505050565b60098181548110610db8575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b6002600355335f908152600860205260408120805491610e6983613551565b909155505f90505b815181101561109a575f60075f848481518110610e9057610e906135f0565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610f0190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2d90613588565b8015610f785780601f10610f4f57610100808354040283529160200191610f78565b820191905f5260205f20905b815481529060010190602001808311610f5b57829003601f168201915b50505050508152602001600182018054610f9190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd90613588565b80156110085780601f10610fdf57610100808354040283529160200191611008565b820191905f5260205f20905b815481529060010190602001808311610feb57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061109090859085908110611078576110786135f0565b60200260200101518260e00151836101000151612270565b5050600101610e71565b50506001600355565b60035460011461110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003556004545f9061112557600154611129565b6001545b90505f8111611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610675565b5f60018190553381526008602052604081208054916111b283613551565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128d919061361d565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6112f27ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061363c565b81565b60056020525f908152604090208054819061130f90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461133b90613588565b80156113865780601f1061135d57610100808354040283529160200191611386565b820191905f5260205f20905b81548152906001019060200180831161136957829003601f168201915b50505050509080600101805461139b90613588565b80601f01602080910402602001604051908101604052809291908181526020018280546113c790613588565b80156114125780601f106113e957610100808354040283529160200191611412565b820191905f5260205f20905b8154815290600101906020018083116113f557829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b6003546001146114b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003558251158015906114cc57505f8251115b611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b7f0000000000000000000000000000000000000000000000000000000000000000341015611608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610675565b69d3c21bcecceda100000081101561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610675565b6fffffffffffffffffffffffffffffffff81106116f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610675565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061175890826136c4565b506020820151600182019061176d90826136c4565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f848152602093845281812033825284528181203490559190925290812080549161181283613551565b9091555061182390508160016134d6565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b60035460011461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003553461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610675565b5f8181526005602052604090206004810154611a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b6003810154611a9034826134d6565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611ac49084906134d6565b9091555050335f908152600860205260408120805491611ae383613551565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611be990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1590613588565b8015611c605780601f10611c3757610100808354040283529160200191611c60565b820191905f5260205f20905b815481529060010190602001808311611c4357829003601f168201915b50505050508152602001600182018054611c7990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca590613588565b8015611cf05780601f10611cc757610100808354040283529160200191611cf0565b820191905f5260205f20905b815481529060010190602001808311611cd357829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151611dc891906134d6565b421115611e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610675565b5f82815260066020908152604080832033845290915290205480611ed7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610675565b335f908152600860205260408120805491611ef183613551565b9190505550611f0b84848460c0015184866060015161261b565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611f7c575f5ffd5b505af1158015611f8e573d5f5f3e3d5ffd5b505050505050565b5f606460328560020154611faa91906134ef565b611fb49190613506565b90505f818560020154611fc7919061353e565b90505f6120ed87875f018054611fdc90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613588565b80156120535780601f1061202a57610100808354040283529160200191612053565b820191905f5260205f20905b81548152906001019060200180831161203657829003601f168201915b505050505088600101805461206790613588565b80601f016020809104026020016040519081016040528092919081815260200182805461209390613588565b80156120de5780601f106120b5576101008083540402835291602001916120de565b820191905f5260205f20905b8154815290600101906020018083116120c157829003601f168201915b5050505050896002015461273f565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526007602052604081208990559091508080612124848988612913565b4260058d015560068c0188905560078c01839055919450925090508015612174576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a8152600660209081526040808320338452909152902054801561220e5761220e858c88848c61261b565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261229e57847f00000000000000000000000000000000000000000000000000000000000000006122c1565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612386575f5ffd5b505afa158015612398573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af1158015612478573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249c91906137db565b915091505f8211806124ad57505f81115b612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610675565b5f5f871561252557508290508161252b565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612590575f5ffd5b505af11580156125a2573d5f5f3e3d5ffd5b505050508160015f8282546125b791906134d6565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f8161262784866134ef565b6126319190613506565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af11580156126c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e8919061361d565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f604051806020016127ec9061312a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052612834908890889060129089906020016137fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612870929160200161384f565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610675565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16101561296e575060015b5f5f5f5f846129a057897f0000000000000000000000000000000000000000000000000000000000000000898b6129c5565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a76400006129e391906134ef565b6129ed9190613506565b90505f633b9aca006129fe83613078565b612a15906c010000000000000000000000006134ef565b612a1f9190613506565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aaf919061386b565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612b2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b52919061386b565b905073ffffffffffffffffffffffffffffffffffffffff811615612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610675565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612c75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c99919061386b565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612d2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d53919061361d565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612de6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0a919061361d565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660612eb09061363c565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b8152600401612f4b9190613886565b6080604051808303815f875af1158015612f67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f8b9190613971565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a612fbf57868f612fba919061353e565b612fcb565b878f612fcb919061353e565b90508015612fea578060015f828254612fe491906134d6565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b15801561304f575f5ffd5b505af1158015613061573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b60b58171010000000000000000000000000000000000811061309f5760409190911b9060801c5b690100000000000000000081106130bb5760209190911b9060401c5b6501000000000081106130d35760109190911b9060201c5b630100000081106130e95760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b611194806139c283390190565b5f60208284031215613147575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461316f575f5ffd5b50565b5f5f60408385031215613183575f5ffd5b8235915060208301356131958161314e565b809150509250929050565b5f602082840312156131b0575f5ffd5b81356131bb8161314e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613236576132366131c2565b604052919050565b5f6020828403121561324e575f5ffd5b813567ffffffffffffffff811115613264575f5ffd5b8201601f81018413613274575f5ffd5b803567ffffffffffffffff81111561328e5761328e6131c2565b8060051b61329e602082016131ef565b918252602081840181019290810190878411156132b9575f5ffd5b6020850194505b838510156132e757843592506132d58361314e565b828252602094850194909101906132c0565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61335261012083018c6132f2565b8281036020840152613364818c6132f2565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f8301126133ae575f5ffd5b813567ffffffffffffffff8111156133c8576133c86131c2565b6133f960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131ef565b81815284602083860101111561340d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561343b575f5ffd5b833567ffffffffffffffff811115613451575f5ffd5b61345d8682870161339f565b935050602084013567ffffffffffffffff811115613479575f5ffd5b6134858682870161339f565b93969395505050506040919091013590565b602081525f6131bb60208301846132f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156134e9576134e96134a9565b92915050565b80820281158282048414176134e9576134e96134a9565b5f82613539577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156134e9576134e96134a9565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613581576135816134a9565b5060010190565b600181811c9082168061359c57607f821691505b6020821081036135d3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156135e9575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561362d575f5ffd5b815180151581146131bb575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103613670576136706134a9565b5f0392915050565b601f8211156136bf57805f5260205f20601f840160051c8101602085101561369d5750805b601f840160051c820191505b818110156136bc575f81556001016136a9565b50505b505050565b815167ffffffffffffffff8111156136de576136de6131c2565b6136f2816136ec8454613588565b84613678565b6020601f821160018114613743575f831561370d5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556136bc565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156137905787850151825560209485019460019092019101613770565b50848210156137cc57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156137ec575f5ffd5b505080516020909101519092909150565b608081525f61380f60808301876132f2565b828103602084015261382181876132f2565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f61386361385d8386613838565b84613838565b949350505050565b5f6020828403121561387b575f5ffd5b81516131bb8161314e565b815173ffffffffffffffffffffffffffffffffffffffff168152610160810160208301516138cc602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516138e3604084018262ffffff169052565b5060608301516138f8606084018260020b9052565b50608083015161390d608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161396161012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613984575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff811681146139ab575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a2646970667358221220267c6f5d9527498d0a8bf5c168f29818a5aafa7ce214bcc30e9bfd0c6af554df64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/MemeBase.json b/abis/0.8.28/MemeBase.json index e451092..2cf3855 100644 --- a/abis/0.8.28/MemeBase.json +++ b/abis/0.8.28/MemeBase.json @@ -12,17 +12,17 @@ }, { "internalType": "address", - "name": "_usdc", + "name": "_nativeToken", "type": "address" }, { "internalType": "address", - "name": "_router", + "name": "_uniV3PositionManager", "type": "address" }, { "internalType": "address", - "name": "_factory", + "name": "_buyBackBurner", "type": "address" }, { @@ -31,29 +31,14 @@ "type": "uint256" }, { - "internalType": "address", - "name": "_weth", - "type": "address" - }, - { - "internalType": "address", - "name": "_l2TokenRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_oracle", - "type": "address" - }, - { - "internalType": "address", - "name": "_balancerVault", - "type": "address" + "internalType": "address[]", + "name": "accounts", + "type": "address[]" }, { - "internalType": "bytes32", - "name": "_balancerPoolId", - "type": "bytes32" + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" } ], "stateMutability": "nonpayable", @@ -90,7 +75,7 @@ { "indexed": true, "internalType": "address", - "name": "hearter", + "name": "feeCollector", "type": "address" }, { @@ -102,11 +87,17 @@ { "indexed": false, "internalType": "uint256", - "name": "amount", + "name": "nativeTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "memeTokenAmount", "type": "uint256" } ], - "name": "Hearted", + "name": "FeesCollected", "type": "event" }, { @@ -115,9 +106,28 @@ { "indexed": true, "internalType": "address", - "name": "olas", + "name": "hearter", "type": "address" }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Hearted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": false, "internalType": "uint256", @@ -140,7 +150,7 @@ { "indexed": false, "internalType": "uint256", - "name": "remainingAmount", + "name": "amount", "type": "uint256" } ], @@ -158,14 +168,14 @@ }, { "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "nativeTokenContributed", + "name": "amount", "type": "uint256" } ], @@ -183,26 +193,26 @@ }, { "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "lpPairAddress", + "name": "memeToken", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "liquidity", + "name": "lpTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "burnPercentageOfStable", + "name": "liquidity", "type": "uint256" } ], @@ -211,7 +221,20 @@ }, { "inputs": [], - "name": "COLLECT_DEADLINE", + "name": "COLLECT_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CONTRIBUTION_AGNT", "outputs": [ { "internalType": "uint256", @@ -237,7 +260,20 @@ }, { "inputs": [], - "name": "LP_PERCENTAGE", + "name": "FEE_TIER", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_AGNT", "outputs": [ { "internalType": "uint256", @@ -250,7 +286,7 @@ }, { "inputs": [], - "name": "MIN_TOTAL_SUPPLY", + "name": "LP_PERCENTAGE", "outputs": [ { "internalType": "uint256", @@ -263,12 +299,12 @@ }, { "inputs": [], - "name": "OLAS_BURNER", + "name": "MAX_TICK", "outputs": [ { - "internalType": "address", + "internalType": "int24", "name": "", - "type": "address" + "type": "int24" } ], "stateMutability": "view", @@ -276,12 +312,12 @@ }, { "inputs": [], - "name": "OLAS_BURN_PERCENTAGE", + "name": "MIN_TICK", "outputs": [ { - "internalType": "uint256", + "internalType": "int24", "name": "", - "type": "uint256" + "type": "int24" } ], "stateMutability": "view", @@ -289,7 +325,7 @@ }, { "inputs": [], - "name": "SLIPPAGE", + "name": "MIN_TOTAL_SUPPLY", "outputs": [ { "internalType": "uint256", @@ -302,12 +338,12 @@ }, { "inputs": [], - "name": "TOKEN_GAS_LIMIT", + "name": "OLAS_BURN_PERCENTAGE", "outputs": [ { - "internalType": "uint32", + "internalType": "uint256", "name": "", - "type": "uint32" + "type": "uint256" } ], "stateMutability": "view", @@ -315,7 +351,7 @@ }, { "inputs": [], - "name": "UNLEASH_DELAY", + "name": "SUMMON_AGNT", "outputs": [ { "internalType": "uint256", @@ -328,12 +364,12 @@ }, { "inputs": [], - "name": "VERSION", + "name": "UNLEASH_DELAY", "outputs": [ { - "internalType": "string", + "internalType": "uint256", "name": "", - "type": "string" + "type": "uint256" } ], "stateMutability": "view", @@ -341,12 +377,12 @@ }, { "inputs": [], - "name": "balancerPoolId", + "name": "VERSION", "outputs": [ { - "internalType": "bytes32", + "internalType": "string", "name": "", - "type": "bytes32" + "type": "string" } ], "stateMutability": "view", @@ -354,7 +390,7 @@ }, { "inputs": [], - "name": "balancerVault", + "name": "buyBackBurner", "outputs": [ { "internalType": "address", @@ -368,35 +404,35 @@ { "inputs": [ { - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "address[]", + "name": "tokens", + "type": "address[]" } ], - "name": "collectThisMeme", + "name": "collectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [], - "name": "factory", - "outputs": [ + "inputs": [ { "internalType": "address", - "name": "", + "name": "memeToken", "type": "address" } ], - "stateMutability": "view", + "name": "collectThisMeme", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" } ], "name": "heartThisMeme", @@ -406,12 +442,12 @@ }, { "inputs": [], - "name": "l2TokenRelayer", + "name": "launchCampaignNonce", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "stateMutability": "view", @@ -439,9 +475,9 @@ { "inputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" }, { "internalType": "address", @@ -463,13 +499,28 @@ { "inputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "name": "memeSummons", "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, { "internalType": "uint256", "name": "nativeTokenContributed", @@ -489,6 +540,16 @@ "internalType": "uint256", "name": "heartersAmount", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isNativeFirst", + "type": "bool" } ], "stateMutability": "view", @@ -496,26 +557,13 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "memeTokens", - "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minNativeTokenValue", + "name": "memeTokenNonces", "outputs": [ { "internalType": "uint256", @@ -527,21 +575,14 @@ "type": "function" }, { - "inputs": [], - "name": "numTokens", - "outputs": [ + "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "olas", + "name": "memeTokens", "outputs": [ { "internalType": "address", @@ -554,38 +595,38 @@ }, { "inputs": [], - "name": "oracle", + "name": "minNativeTokenValue", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { - "inputs": [ + "inputs": [], + "name": "nativeToken", + "outputs": [ { "internalType": "address", - "name": "memeToken", + "name": "", "type": "address" } ], - "name": "purgeThisMeme", - "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { "inputs": [], - "name": "referenceToken", + "name": "numTokens", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "stateMutability": "view", @@ -593,7 +634,7 @@ }, { "inputs": [], - "name": "router", + "name": "olas", "outputs": [ { "internalType": "address", @@ -607,24 +648,21 @@ { "inputs": [ { - "internalType": "uint256", - "name": "limit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "bridgePayload", - "type": "bytes" + "internalType": "address", + "name": "memeToken", + "type": "address" } ], - "name": "scheduleOLASForAscendance", + "name": "purgeThisMeme", "outputs": [], - "stateMutability": "payable", + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduleForAscendance", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -663,27 +701,9 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "memeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "limit", - "type": "uint256" - } - ], - "name": "unleashThisMeme", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], - "name": "weth", + "name": "uniV3PositionManager", "outputs": [ { "internalType": "address", @@ -695,12 +715,21 @@ "type": "function" }, { - "stateMutability": "payable", - "type": "receive" + "inputs": [ + { + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + } + ], + "name": "unleashThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x6101c06040526001600255348015610015575f5ffd5b506040516140f53803806140f583398101604081905261003491610098565b6001600160a01b03998a1660a05297891660c05295881660e05293871661010052608092909252851661012052841661014052831661016052909116610180526101a05261013e565b80516001600160a01b0381168114610093575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f5f6101408b8d0312156100b2575f5ffd5b6100bb8b61007d565b99506100c960208c0161007d565b98506100d760408c0161007d565b97506100e560608c0161007d565b965060808b015195506100fa60a08c0161007d565b945061010860c08c0161007d565b935061011660e08c0161007d565b92506101256101008c0161007d565b91506101208b015190509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051613ea761024e5f395f818161061401526118d201525f818161030f0152818161182801526119e901525f81816104890152611e4001525f818161053d01528181611aae0152611c2601525f81816103b10152611d6401525f818161059801526120c501525f818161069c01528181611f6c0152818161216c01528181612248015261235601525f818161027a015281816118590152818161191301528181611dd1015281816120910152818161219e01526122ff01525f81816101f90152818161193a01528181611adf01528181611c530152611cc601525f818161050a0152610ee70152613ea75ff3fe6080604052600436106101dd575f3560e01c80638b9ee610116100fd578063cf4ffb7e11610092578063f74e481b11610062578063f74e481b14610636578063f76c603714610655578063f887ea401461068b578063ffa1ad74146106be575f5ffd5b8063cf4ffb7e146105ba578063d1b0c288146105d9578063dab346ff146105ef578063dbbb64b914610603575f5ffd5b8063a7be1b50116100cd578063a7be1b501461052c578063b1bd3c951461055f578063be399e2b14610572578063c45a015514610587575f5ffd5b80638b9ee610146104ab5780638e499bcf146104d25780639823bb13146104e6578063a5ae390c146104f9575f5ffd5b80633d0cc375116101735780634c1c6cbf116101435780634c1c6cbf1461041d5780635122c40914610448578063709a5c9c146104655780637dc0d1d014610478575f5ffd5b80633d0cc3751461037f5780633fc8cef3146103a057806340b67a9b146103d3578063466ffbce146103fe575f5ffd5b8063158274a5116101ae578063158274a5146102fe5780632e0f26251461033157806335f9f8d91461035757806336b4134a1461036b575f5ffd5b806231d115146101e85780630a42f8bd146102455780631265b6511461026957806314c7312b1461029c575f5ffd5b366101e457005b5f5ffd5b3480156101f3575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610250575f5ffd5b5061025b6202a30081565b60405190815260200161023c565b348015610274575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102a7575f5ffd5b506102de6102b6366004612524565b600360208190525f918252604090912080546001820154600283015492909301549092919084565b60408051948552602085019390935291830152606082015260800161023c565b348015610309575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033c575f5ffd5b50610345601281565b60405160ff909116815260200161023c565b348015610362575f5ffd5b5061025b603281565b348015610376575f5ffd5b5061025b606181565b34801561038a575f5ffd5b5061039e610399366004612524565b610713565b005b3480156103ab575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103de575f5ffd5b5061025b6103ed366004612524565b60056020525f908152604090205481565b348015610409575f5ffd5b5061021b610418366004612546565b610af5565b348015610428575f5ffd5b50610433620493e081565b60405163ffffffff909116815260200161023c565b348015610453575f5ffd5b5061025b69d3c21bcecceda100000081565b61039e610473366004612650565b610b2a565b348015610483575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b6575f5ffd5b5061021b7351eb65012ca5ceb07320c497f4151ac207fea4e081565b3480156104dd575f5ffd5b5061025b5f5481565b61039e6104f4366004612524565b610c96565b348015610504575f5ffd5b5061025b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610537575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b61039e61056d3660046126cd565b610ee5565b34801561057d575f5ffd5b5061025b60015481565b348015610592575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c5575f5ffd5b5061039e6105d436600461273b565b6111d6565b3480156105e4575f5ffd5b5061025b6201518081565b3480156105fa575f5ffd5b5061025b600a81565b34801561060e575f5ffd5b5061025b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610641575f5ffd5b5061039e610650366004612524565b61154f565b348015610660575f5ffd5b5061025b61066f366004612765565b600460209081525f928352604080842090915290825290205481565b348015610696575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c9575f5ffd5b506107066040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161023c91906127e8565b600254600114610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260036020818152604092839020835160808101855281548152600182015492810183905260028201549481019490945290910154606083015261083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161077b565b6202a30081602001516108519190612827565b42116108df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20343820686f75727360448201527f2061667465722073756d6d6f6e00000000000000000000000000000000000000606482015260840161077b565b335f9081526005602052604081208054916108f98361283a565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015282905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561096a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098e9190612871565b90505f8111610a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f7267650000000000000000000000000000000000000000000000000000000000606482015260840161077b565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610a84575f5ffd5b505af1158015610a96573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610ae291815260200190565b60405180910390a2505060016002555050565b60068181548110610b04575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600254600114610b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161077b565b5f60015411610c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f206275726e0000000000000000000000000000000000604482015260640161077b565b335f908152600560205260408120805491610c1b8361283a565b91905055505f610c2d600154856117eb565b5f6001819055909150610c41828585611a71565b90508015610c8f57604051329082905f81818185875af1925050503d805f8114610c86576040519150601f19603f3d011682016040523d82523d5f602084013e610c8b565b606091505b5050505b5050505050565b5f3411610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f00000000000000000000000000000000000000606482015260840161077b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600360205260409020805480610db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161077b565b600282015415610e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161077b565b610e283482612827565b80835573ffffffffffffffffffffffffffffffffffffffff84165f908152600460209081526040808320338452909152812080549293503492909190610e6f908490612827565b9091555050335f908152600560205260408120805491610e8e8361283a565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff84169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a3505050565b7f0000000000000000000000000000000000000000000000000000000000000000341015610f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e00000000000000000000000000000000606482015260840161077b565b69d3c21bcecceda1000000811015611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d657400604482015260640161077b565b5f838360128460405161101b906124f3565b6110289493929190612888565b604051809103905ff080158015611041573d5f5f3e3d5ffd5b5060408051608081018252348082524260208084019182525f8486018181526060860182815273ffffffffffffffffffffffffffffffffffffffff891680845260038086528985209851895595516001808a01919091559251600289015590519690940195909555600482528581203382528252858120939093556006805494850181557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90940180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690921790915591548155600590915290812080549293508392916111308361283a565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff82169033907f109fe5b1a043e1fc6e8b6f4905613c0a5b82de0d8798558c67f0243106b2d7ad9060200160405180910390a360405134815273ffffffffffffffffffffffffffffffffffffffff82169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a35050505050565b600254600114611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161077b565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260409020805460018201546112d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161077b565b6201518082600101546112e69190612827565b42101561134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c65617368207965740000000000000000000000000000604482015260640161077b565b5f61135a8285611d3e565b90505f606461136a600a846128c3565b61137491906128da565b90508060015f8282546113879190612827565b9091555061139790508183612912565b91505f8690505f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140b9190612871565b90505f606461141b6032846128c3565b61142591906128da565b90505f6114328284612912565b90505f5f6114418c8986612054565b4260028d015560038c01859055335f908152600560205260408120805493955091935061146d8361283a565b909155505073ffffffffffffffffffffffffffffffffffffffff8c165f90815260046020908152604080832033845290915290205480156114b4576114b48d82868d6123cf565b8273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcef3279530e487be6d2c4583c847d17d5a328a9b6ab1e27ad458690257ba7768858c604051611533929190918252602082015260400190565b60405180910390a4505060016002555050505050505050505050565b6002546001146115bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161077b565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820184905290910154606082015290611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161077b565b6202a30081602001516116899190612827565b421115611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20343820686f60448201527f7572732061667465722073756d6d6f6e00000000000000000000000000000000606482015260840161077b565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600460209081526040808320338452909152902054806117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e00000000000000000000000000604482015260640161077b565b335f9081526005602052604081208054916117c98361283a565b91905055506117e183828460600151855f01516123cf565b5050600160025550565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490525f917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af11580156118a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c59190612925565b506040805160c0810182527f000000000000000000000000000000000000000000000000000000000000000081525f602080830182905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116848601527f0000000000000000000000000000000000000000000000000000000000000000811660608086019190915260808086018a905286518088018852600281527f30780000000000000000000000000000000000000000000000000000000000008186015260a087015286519081018752308082529381018590528087019390935282019290925292517f52bbbe290000000000000000000000000000000000000000000000000000000081529192917f0000000000000000000000000000000000000000000000000000000000000000909116906352bbbe2990611a26908590859089904290600401612944565b6020604051808303815f875af1158015611a42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a669190612871565b925050505b92915050565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590525f917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af1158015611b27573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4b9190612925565b50620493e0831015611b5e57620493e092505b5f84604051602401611b7291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f42966c6800000000000000000000000000000000000000000000000000000000179052517fa3a7954800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a3a7954890611c97907f0000000000000000000000000000000000000000000000000000000000000000907351eb65012ca5ceb07320c497f4151ac207fea4e0908a908a908890600401612a73565b5f604051808303815f87803b158015611cae575f5ffd5b505af1158015611cc0573d5f5f3e3d5ffd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f40a3e75fd2efcf074c9c0520c5367ccb3093ded646970bdc8c3108748e5d3f0e86604051611d2c91815260200190565b60405180910390a25034949350505050565b6040805160028082526060820183525f92839291906020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611d9557611d95612ada565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611e0357611e03612ada565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a0604051808303815f875af1158015611ea8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecc9190612b25565b5050509150505f8113611f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f7261636c6520707269636520697320696e636f727265637400000000000000604482015260640161077b565b5f69021e19e0c9bab24000006061611f5388856128c3565b611f5d91906128c3565b611f6791906128da565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ff36ab588848730426040518663ffffffff1660e01b8152600401611fca9493929190612b73565b5f6040518083038185885af1158015611fe5573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261202b9190810190612bf6565b90508060018151811061204057612040612ada565b602002602001015194505050505092915050565b6040517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015284811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063c9c65396906044016020604051808303815f875af115801561210b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212f9190612c97565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529193507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af11580156121e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220a9190612925565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905286169063095ea7b3906044016020604051808303815f875af115801561229d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c19190612925565b506040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152868116602483015260448201869052606482018590525f6084830181905260a48301523060c48301524260e48301527f0000000000000000000000000000000000000000000000000000000000000000169063e8e3370090610104016060604051808303815f875af115801561239d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c19190612cb2565b939793965092945050505050565b835f826123dc85876128c3565b6123e691906128da565b73ffffffffffffffffffffffffffffffffffffffff8781165f9081526004602081815260408084203380865292528084209390935591517fa9059cbb000000000000000000000000000000000000000000000000000000008152908101919091526024810183905291925083169063a9059cbb906044016020604051808303815f875af1158015612479573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249d9190612925565b5060405181815273ffffffffffffffffffffffffffffffffffffffff87169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a3505050505050565b61119480612cde83390190565b73ffffffffffffffffffffffffffffffffffffffff81168114612521575f5ffd5b50565b5f60208284031215612534575f5ffd5b813561253f81612500565b9392505050565b5f60208284031215612556575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125d1576125d161255d565b604052919050565b5f5f67ffffffffffffffff8411156125f3576125f361255d565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020016126268161258a565b91505082815283838301111561263a575f5ffd5b828260208301375f602084830101529392505050565b5f5f5f60608486031215612662575f5ffd5b8335925060208401359150604084013567ffffffffffffffff811115612686575f5ffd5b8401601f81018613612696575f5ffd5b6126a5868235602084016125d9565b9150509250925092565b5f82601f8301126126be575f5ffd5b61253f838335602085016125d9565b5f5f5f606084860312156126df575f5ffd5b833567ffffffffffffffff8111156126f5575f5ffd5b612701868287016126af565b935050602084013567ffffffffffffffff81111561271d575f5ffd5b612729868287016126af565b93969395505050506040919091013590565b5f5f6040838503121561274c575f5ffd5b823561275781612500565b946020939093013593505050565b5f5f60408385031215612776575f5ffd5b823561278181612500565b9150602083013561279181612500565b809150509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61253f602083018461279c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611a6b57611a6b6127fa565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361286a5761286a6127fa565b5060010190565b5f60208284031215612881575f5ffd5b5051919050565b608081525f61289a608083018761279c565b82810360208401526128ac818761279c565b60ff95909516604084015250506060015292915050565b8082028115828204841417611a6b57611a6b6127fa565b5f8261290d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115611a6b57611a6b6127fa565b5f60208284031215612935575f5ffd5b8151801515811461253f575f5ffd5b60e08152845160e08201525f60208601516002811061298a577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b610100830152604086015173ffffffffffffffffffffffffffffffffffffffff1661012083015260608601516129d961014084018273ffffffffffffffffffffffffffffffffffffffff169052565b50608086015161016083015260a086015160c0610180840152612a006101a084018261279c565b915050612a61602083018673ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526060810151151560608301525050565b60a082019390935260c0015292915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015263ffffffff8316606082015260a060808201525f612acf60a083018461279c565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805169ffffffffffffffffffff81168114612b20575f5ffd5b919050565b5f5f5f5f5f60a08688031215612b39575f5ffd5b612b4286612b07565b60208701516040880151606089015192975090955093509150612b6760808701612b07565b90509295509295909350565b5f608082018683526080602084015280865180835260a0850191506020880192505f5b81811015612bca57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612b96565b505073ffffffffffffffffffffffffffffffffffffffff95909516604084015250506060015292915050565b5f60208284031215612c06575f5ffd5b815167ffffffffffffffff811115612c1c575f5ffd5b8201601f81018413612c2c575f5ffd5b805167ffffffffffffffff811115612c4657612c4661255d565b8060051b612c566020820161258a565b91825260208184018101929081019087841115612c71575f5ffd5b6020850194505b83851015612acf57845180835260209586019590935090910190612c78565b5f60208284031215612ca7575f5ffd5b815161253f81612500565b5f5f5f60608486031215612cc4575f5ffd5b505081516020830151604090930151909492935091905056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a264697066735822122062814146600021248e02abcea00d20fb3ed21d0c0d709ef83cf829152d0c436364736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106101dd575f3560e01c80638b9ee610116100fd578063cf4ffb7e11610092578063f74e481b11610062578063f74e481b14610636578063f76c603714610655578063f887ea401461068b578063ffa1ad74146106be575f5ffd5b8063cf4ffb7e146105ba578063d1b0c288146105d9578063dab346ff146105ef578063dbbb64b914610603575f5ffd5b8063a7be1b50116100cd578063a7be1b501461052c578063b1bd3c951461055f578063be399e2b14610572578063c45a015514610587575f5ffd5b80638b9ee610146104ab5780638e499bcf146104d25780639823bb13146104e6578063a5ae390c146104f9575f5ffd5b80633d0cc375116101735780634c1c6cbf116101435780634c1c6cbf1461041d5780635122c40914610448578063709a5c9c146104655780637dc0d1d014610478575f5ffd5b80633d0cc3751461037f5780633fc8cef3146103a057806340b67a9b146103d3578063466ffbce146103fe575f5ffd5b8063158274a5116101ae578063158274a5146102fe5780632e0f26251461033157806335f9f8d91461035757806336b4134a1461036b575f5ffd5b806231d115146101e85780630a42f8bd146102455780631265b6511461026957806314c7312b1461029c575f5ffd5b366101e457005b5f5ffd5b3480156101f3575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610250575f5ffd5b5061025b6202a30081565b60405190815260200161023c565b348015610274575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102a7575f5ffd5b506102de6102b6366004612524565b600360208190525f918252604090912080546001820154600283015492909301549092919084565b60408051948552602085019390935291830152606082015260800161023c565b348015610309575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033c575f5ffd5b50610345601281565b60405160ff909116815260200161023c565b348015610362575f5ffd5b5061025b603281565b348015610376575f5ffd5b5061025b606181565b34801561038a575f5ffd5b5061039e610399366004612524565b610713565b005b3480156103ab575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103de575f5ffd5b5061025b6103ed366004612524565b60056020525f908152604090205481565b348015610409575f5ffd5b5061021b610418366004612546565b610af5565b348015610428575f5ffd5b50610433620493e081565b60405163ffffffff909116815260200161023c565b348015610453575f5ffd5b5061025b69d3c21bcecceda100000081565b61039e610473366004612650565b610b2a565b348015610483575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b6575f5ffd5b5061021b7351eb65012ca5ceb07320c497f4151ac207fea4e081565b3480156104dd575f5ffd5b5061025b5f5481565b61039e6104f4366004612524565b610c96565b348015610504575f5ffd5b5061025b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610537575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b61039e61056d3660046126cd565b610ee5565b34801561057d575f5ffd5b5061025b60015481565b348015610592575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c5575f5ffd5b5061039e6105d436600461273b565b6111d6565b3480156105e4575f5ffd5b5061025b6201518081565b3480156105fa575f5ffd5b5061025b600a81565b34801561060e575f5ffd5b5061025b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610641575f5ffd5b5061039e610650366004612524565b61154f565b348015610660575f5ffd5b5061025b61066f366004612765565b600460209081525f928352604080842090915290825290205481565b348015610696575f5ffd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c9575f5ffd5b506107066040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161023c91906127e8565b600254600114610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260036020818152604092839020835160808101855281548152600182015492810183905260028201549481019490945290910154606083015261083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161077b565b6202a30081602001516108519190612827565b42116108df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20343820686f75727360448201527f2061667465722073756d6d6f6e00000000000000000000000000000000000000606482015260840161077b565b335f9081526005602052604081208054916108f98361283a565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015282905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561096a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098e9190612871565b90505f8111610a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f7267650000000000000000000000000000000000000000000000000000000000606482015260840161077b565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610a84575f5ffd5b505af1158015610a96573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610ae291815260200190565b60405180910390a2505060016002555050565b60068181548110610b04575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600254600114610b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161077b565b5f60015411610c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f206275726e0000000000000000000000000000000000604482015260640161077b565b335f908152600560205260408120805491610c1b8361283a565b91905055505f610c2d600154856117eb565b5f6001819055909150610c41828585611a71565b90508015610c8f57604051329082905f81818185875af1925050503d805f8114610c86576040519150601f19603f3d011682016040523d82523d5f602084013e610c8b565b606091505b5050505b5050505050565b5f3411610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f00000000000000000000000000000000000000606482015260840161077b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600360205260409020805480610db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161077b565b600282015415610e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161077b565b610e283482612827565b80835573ffffffffffffffffffffffffffffffffffffffff84165f908152600460209081526040808320338452909152812080549293503492909190610e6f908490612827565b9091555050335f908152600560205260408120805491610e8e8361283a565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff84169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a3505050565b7f0000000000000000000000000000000000000000000000000000000000000000341015610f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e00000000000000000000000000000000606482015260840161077b565b69d3c21bcecceda1000000811015611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d657400604482015260640161077b565b5f838360128460405161101b906124f3565b6110289493929190612888565b604051809103905ff080158015611041573d5f5f3e3d5ffd5b5060408051608081018252348082524260208084019182525f8486018181526060860182815273ffffffffffffffffffffffffffffffffffffffff891680845260038086528985209851895595516001808a01919091559251600289015590519690940195909555600482528581203382528252858120939093556006805494850181557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90940180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690921790915591548155600590915290812080549293508392916111308361283a565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff82169033907f109fe5b1a043e1fc6e8b6f4905613c0a5b82de0d8798558c67f0243106b2d7ad9060200160405180910390a360405134815273ffffffffffffffffffffffffffffffffffffffff82169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a35050505050565b600254600114611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161077b565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260409020805460018201546112d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161077b565b6201518082600101546112e69190612827565b42101561134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c65617368207965740000000000000000000000000000604482015260640161077b565b5f61135a8285611d3e565b90505f606461136a600a846128c3565b61137491906128da565b90508060015f8282546113879190612827565b9091555061139790508183612912565b91505f8690505f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140b9190612871565b90505f606461141b6032846128c3565b61142591906128da565b90505f6114328284612912565b90505f5f6114418c8986612054565b4260028d015560038c01859055335f908152600560205260408120805493955091935061146d8361283a565b909155505073ffffffffffffffffffffffffffffffffffffffff8c165f90815260046020908152604080832033845290915290205480156114b4576114b48d82868d6123cf565b8273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcef3279530e487be6d2c4583c847d17d5a328a9b6ab1e27ad458690257ba7768858c604051611533929190918252602082015260400190565b60405180910390a4505060016002555050505050505050505050565b6002546001146115bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161077b565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820184905290910154606082015290611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161077b565b6202a30081602001516116899190612827565b421115611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20343820686f60448201527f7572732061667465722073756d6d6f6e00000000000000000000000000000000606482015260840161077b565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600460209081526040808320338452909152902054806117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e00000000000000000000000000604482015260640161077b565b335f9081526005602052604081208054916117c98361283a565b91905055506117e183828460600151855f01516123cf565b5050600160025550565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490525f917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af11580156118a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c59190612925565b506040805160c0810182527f000000000000000000000000000000000000000000000000000000000000000081525f602080830182905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116848601527f0000000000000000000000000000000000000000000000000000000000000000811660608086019190915260808086018a905286518088018852600281527f30780000000000000000000000000000000000000000000000000000000000008186015260a087015286519081018752308082529381018590528087019390935282019290925292517f52bbbe290000000000000000000000000000000000000000000000000000000081529192917f0000000000000000000000000000000000000000000000000000000000000000909116906352bbbe2990611a26908590859089904290600401612944565b6020604051808303815f875af1158015611a42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a669190612871565b925050505b92915050565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590525f917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af1158015611b27573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4b9190612925565b50620493e0831015611b5e57620493e092505b5f84604051602401611b7291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f42966c6800000000000000000000000000000000000000000000000000000000179052517fa3a7954800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a3a7954890611c97907f0000000000000000000000000000000000000000000000000000000000000000907351eb65012ca5ceb07320c497f4151ac207fea4e0908a908a908890600401612a73565b5f604051808303815f87803b158015611cae575f5ffd5b505af1158015611cc0573d5f5f3e3d5ffd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f40a3e75fd2efcf074c9c0520c5367ccb3093ded646970bdc8c3108748e5d3f0e86604051611d2c91815260200190565b60405180910390a25034949350505050565b6040805160028082526060820183525f92839291906020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611d9557611d95612ada565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611e0357611e03612ada565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a0604051808303815f875af1158015611ea8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecc9190612b25565b5050509150505f8113611f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f7261636c6520707269636520697320696e636f727265637400000000000000604482015260640161077b565b5f69021e19e0c9bab24000006061611f5388856128c3565b611f5d91906128c3565b611f6791906128da565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ff36ab588848730426040518663ffffffff1660e01b8152600401611fca9493929190612b73565b5f6040518083038185885af1158015611fe5573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261202b9190810190612bf6565b90508060018151811061204057612040612ada565b602002602001015194505050505092915050565b6040517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015284811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063c9c65396906044016020604051808303815f875af115801561210b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212f9190612c97565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529193507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af11580156121e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220a9190612925565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905286169063095ea7b3906044016020604051808303815f875af115801561229d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c19190612925565b506040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152868116602483015260448201869052606482018590525f6084830181905260a48301523060c48301524260e48301527f0000000000000000000000000000000000000000000000000000000000000000169063e8e3370090610104016060604051808303815f875af115801561239d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c19190612cb2565b939793965092945050505050565b835f826123dc85876128c3565b6123e691906128da565b73ffffffffffffffffffffffffffffffffffffffff8781165f9081526004602081815260408084203380865292528084209390935591517fa9059cbb000000000000000000000000000000000000000000000000000000008152908101919091526024810183905291925083169063a9059cbb906044016020604051808303815f875af1158015612479573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249d9190612925565b5060405181815273ffffffffffffffffffffffffffffffffffffffff87169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a3505050505050565b61119480612cde83390190565b73ffffffffffffffffffffffffffffffffffffffff81168114612521575f5ffd5b50565b5f60208284031215612534575f5ffd5b813561253f81612500565b9392505050565b5f60208284031215612556575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125d1576125d161255d565b604052919050565b5f5f67ffffffffffffffff8411156125f3576125f361255d565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020016126268161258a565b91505082815283838301111561263a575f5ffd5b828260208301375f602084830101529392505050565b5f5f5f60608486031215612662575f5ffd5b8335925060208401359150604084013567ffffffffffffffff811115612686575f5ffd5b8401601f81018613612696575f5ffd5b6126a5868235602084016125d9565b9150509250925092565b5f82601f8301126126be575f5ffd5b61253f838335602085016125d9565b5f5f5f606084860312156126df575f5ffd5b833567ffffffffffffffff8111156126f5575f5ffd5b612701868287016126af565b935050602084013567ffffffffffffffff81111561271d575f5ffd5b612729868287016126af565b93969395505050506040919091013590565b5f5f6040838503121561274c575f5ffd5b823561275781612500565b946020939093013593505050565b5f5f60408385031215612776575f5ffd5b823561278181612500565b9150602083013561279181612500565b809150509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61253f602083018461279c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611a6b57611a6b6127fa565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361286a5761286a6127fa565b5060010190565b5f60208284031215612881575f5ffd5b5051919050565b608081525f61289a608083018761279c565b82810360208401526128ac818761279c565b60ff95909516604084015250506060015292915050565b8082028115828204841417611a6b57611a6b6127fa565b5f8261290d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115611a6b57611a6b6127fa565b5f60208284031215612935575f5ffd5b8151801515811461253f575f5ffd5b60e08152845160e08201525f60208601516002811061298a577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b610100830152604086015173ffffffffffffffffffffffffffffffffffffffff1661012083015260608601516129d961014084018273ffffffffffffffffffffffffffffffffffffffff169052565b50608086015161016083015260a086015160c0610180840152612a006101a084018261279c565b915050612a61602083018673ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526060810151151560608301525050565b60a082019390935260c0015292915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015263ffffffff8316606082015260a060808201525f612acf60a083018461279c565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805169ffffffffffffffffffff81168114612b20575f5ffd5b919050565b5f5f5f5f5f60a08688031215612b39575f5ffd5b612b4286612b07565b60208701516040880151606089015192975090955093509150612b6760808701612b07565b90509295509295909350565b5f608082018683526080602084015280865180835260a0850191506020880192505f5b81811015612bca57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612b96565b505073ffffffffffffffffffffffffffffffffffffffff95909516604084015250506060015292915050565b5f60208284031215612c06575f5ffd5b815167ffffffffffffffff811115612c1c575f5ffd5b8201601f81018413612c2c575f5ffd5b805167ffffffffffffffff811115612c4657612c4661255d565b8060051b612c566020820161258a565b91825260208184018101929081019087841115612c71575f5ffd5b6020850194505b83851015612acf57845180835260209586019590935090910190612c78565b5f60208284031215612ca7575f5ffd5b815161253f81612500565b5f5f5f60608486031215612cc4575f5ffd5b505081516020830151604090930151909492935091905056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a264697066735822122062814146600021248e02abcea00d20fb3ed21d0c0d709ef83cf829152d0c436364736f6c634300081c0033", + "bytecode": "0x61014060405260016002556001600355600160045534801561001f575f5ffd5b506040516156a93803806156a983398101604081905261003e916105c3565b6001600160a01b0380881660a05280871660c05280861660e0528416610100526080839052815115610092576002546101205261007b828261009e565b6101205161008a9060016106e4565b6002555f6004555b50505050505050610885565b80518251146100f45760405162461bcd60e51b815260206004820152601b60248201527f4172726179206c656e6774687320617265206e6f7420657175616c000000000060448201526064015b60405180910390fd5b6040805161016081018252600b6101208083019182526a20b3b2b73a102a37b5b2b760a91b610140840152908252825180840184526005808252641051ccd39560da1b602083810191909152808501929092526b033b2e3c9fd0803ce8000000848601526807acad1d521ea40800606085015263015d78d16080850152600160a08501525f60c0850181905260e08501819052610100850181905292518352905291909120815181906101a79082610781565b50602082015160018201906101bc9082610781565b5060408201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e08201516007820155610100909101516008909101805460ff191691151591909117905561012051825183905f9061022a5761022a61083b565b60200260200101516001600160a01b03167f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc835f8151811061026e5761026e61083b565b602002602001015160405161028591815260200190565b60405180910390a35f805b83518110156103ad578281815181106102ab576102ab61083b565b6020026020010151826102be91906106e4565b91508281815181106102d2576102d261083b565b602002602001015160065f6101205181526020019081526020015f205f8684815181106103015761030161083b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550610120518482815181106103425761034261083b565b60200260200101516001600160a01b03167fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda18584815181106103865761038661083b565b602002602001015160405161039d91815260200190565b60405180910390a3600101610290565b506807acad1d521ea40800811461042c5760405162461bcd60e51b815260206004820152603460248201527f546f74616c20616d6f756e74206d757374206d61746368206f726967696e616c60448201527f20636f6e747269627574696f6e20616d6f756e7400000000000000000000000060648201526084016100eb565b5f600a61043a83600961084f565b6104449190610866565b90506806e83567304ec6d40081146104d25760405162461bcd60e51b815260206004820152604560248201527f546f74616c20616d6f756e742061646a757374656420666f72206275726e206160448201527f6c6c6f636174696f6e206d757374206d61746368206c697175696469747920616064820152641b5bdd5b9d60da1b608482015260a4016100eb565b50505050565b80516001600160a01b03811681146104ee575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561052f5761052f6104f3565b604052919050565b5f6001600160401b0382111561054f5761054f6104f3565b5060051b60200190565b5f82601f830112610568575f5ffd5b815161057b61057682610537565b610507565b8082825260208201915060208360051b86010192508583111561059c575f5ffd5b602085015b838110156105b95780518352602092830192016105a1565b5095945050505050565b5f5f5f5f5f5f5f60e0888a0312156105d9575f5ffd5b6105e2886104d8565b96506105f0602089016104d8565b95506105fe604089016104d8565b945061060c606089016104d8565b608089015160a08a015191955093506001600160401b0381111561062e575f5ffd5b8801601f81018a1361063e575f5ffd5b805161064c61057682610537565b8082825260208201915060208360051b85010192508c83111561066d575f5ffd5b6020840193505b8284101561069657610685846104d8565b825260209384019390910190610674565b60c08c0151909550925050506001600160401b038111156106b5575f5ffd5b6106c18a828b01610559565b91505092959891949750929550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106f7576106f76106d0565b92915050565b600181811c9082168061071157607f821691505b60208210810361072f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561077c57805f5260205f20601f840160051c8101602085101561075a5750805b601f840160051c820191505b81811015610779575f8155600101610766565b50505b505050565b81516001600160401b0381111561079a5761079a6104f3565b6107ae816107a884546106fd565b84610735565b6020601f8211600181146107e0575f83156107c95750848201515b5f19600385901b1c1916600184901b178455610779565b5f84815260208120601f198516915b8281101561080f57878501518255602094850194600190920191016107ef565b508482101561082c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176106f7576106f76106d0565b5f8261088057634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e0516101005161012051614d5f61094a5f395f81816102cb015261320101525f81816104d3015281816112b6015261240601525f818161054d015281816123d0015281816124f501528181612bab01528181612db601528181612e5d01528181612f18015261307b01525f8181610618015281816112e501528181611fda0152818161233c0152818161236201528181612ab601528181612b010152612b2901525f61020901525f8181610580015261161c0152614d5f5ff3fe6080604052600436106101f4575f3560e01c80636882a88811610117578063b72124e3116100ac578063e0be16171161007c578063ea43cf5011610062578063ea43cf501461063a578063f74e481b14610656578063ffa1ad7414610675575f5ffd5b8063e0be1617146105f4578063e1758bd814610607575f5ffd5b8063b72124e3146105b5578063be399e2b146105cb578063d1b0c288146105b5578063dab346ff146105e0575f5ffd5b8063a1634b14116100e7578063a1634b1414610509578063a2a7eb951461053c578063a5ae390c1461056f578063b1bd3c95146105a2575f5ffd5b80636882a8881461046757806372f2a36b1461048e578063803551a9146104c25780638e499bcf146104f5575f5ffd5b806340b67a9b1161018d57806352d15d361161015d57806352d15d361461040157806358c0f7291461041d578063644c81141461043c57806367608ad014610453575f5ffd5b806340b67a9b14610371578063466ffbce1461039c5780634c69a6c9146103bb5780635122c409146103e4575f5ffd5b80631ecfd535116101c85780631ecfd535146102ed5780632e0f26251461031857806335f9f8d91461033e5780633d0cc37514610352575f5ffd5b806231d115146101f857806309ca5a11146102555780630df400c61461027657806317c6df2d146102ba575b5f5ffd5b348015610203575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610260575f5ffd5b5061027461026f36600461330e565b6106ca565b005b348015610281575f5ffd5b506102ac610290366004613346565b600660209081525f928352604080842090915290825290205481565b60405190815260200161024c565b3480156102c5575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f8575f5ffd5b506102ac610307366004613374565b60076020525f908152604090205481565b348015610323575f5ffd5b5061032c601281565b60405160ff909116815260200161024c565b348015610349575f5ffd5b506102ac603281565b34801561035d575f5ffd5b5061027461036c366004613374565b610922565b34801561037c575f5ffd5b506102ac61038b366004613374565b60086020525f908152604090205481565b3480156103a7575f5ffd5b5061022b6103b636600461330e565b610e66565b3480156103c6575f5ffd5b506103d061271081565b60405162ffffff909116815260200161024c565b3480156103ef575f5ffd5b506102ac69d3c21bcecceda100000081565b34801561040c575f5ffd5b506102ac6807acad1d521ea4080081565b348015610428575f5ffd5b50610274610437366004613412565b610e9b565b348015610447575f5ffd5b506102ac63015d78d181565b34801561045e575f5ffd5b50610274611160565b348015610472575f5ffd5b5061047b61138b565b60405160029190910b815260200161024c565b348015610499575f5ffd5b506104ad6104a836600461330e565b6113b7565b60405161024c99989796959493929190613512565b3480156104cd575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610500575f5ffd5b506102ac5f5481565b348015610514575f5ffd5b5061047b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b348015610547575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057a575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b6102746105b03660046135fd565b61150d565b3480156105c0575f5ffd5b506102ac6201518081565b3480156105d6575f5ffd5b506102ac60015481565b3480156105eb575f5ffd5b506102ac600a81565b61027461060236600461330e565b611961565b348015610612575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610645575f5ffd5b506102ac6806e83567304ec6d40081565b348015610661575f5ffd5b50610274610670366004613374565b611beb565b348015610680575f5ffd5b506106bd6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161024c919061366b565b60035460011461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b62015180816004015461083791906136aa565b4210156108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610732565b60038101546108ae81611fd8565b5f60646108bc600a846136c3565b6108c691906136da565b90505f6108d38284613712565b90508160015f8282546108e691906136aa565b9091555050335f90815260086020526040812080549161090583613725565b919050555061091685858386612058565b50506001600355505050565b60035460011461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f908152600760209081526040808320548084526005909252808320815161012081019092528054929392829082906109e29061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e9061375c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600182018054610a729061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e9061375c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610bae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151610bc191906136aa565b4211610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610732565b335f908152600860205260408120805491610c6983613725565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610cda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfe91906137ad565b90505f8111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610732565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610df4575f5ffd5b505af1158015610e06573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610e5291815260200190565b60405180910390a250506001600355505050565b60098181548110610e75575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b6002600355335f908152600860205260408120805491610f2683613725565b909155505f90505b8151811015611157575f60075f848481518110610f4d57610f4d6137c4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610fbe9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea9061375c565b80156110355780601f1061100c57610100808354040283529160200191611035565b820191905f5260205f20905b81548152906001019060200180831161101857829003601f168201915b5050505050815260200160018201805461104e9061375c565b80601f016020809104026020016040519081016040528092919081815260200182805461107a9061375c565b80156110c55780601f1061109c576101008083540402835291602001916110c5565b820191905f5260205f20905b8154815290600101906020018083116110a857829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061114d90859085908110611135576111356137c4565b60200260200101518260e00151836101000151612332565b5050600101610f2e565b50506001600355565b6003546001146111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b60026003556004545f906111e7576111e26126dd565b6111eb565b6001545b90505f8111611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610732565b5f600181905533815260086020526040812080549161127483613725565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af115801561132b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134f91906137f1565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6113b47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660613810565b81565b60056020525f90815260409020805481906113d19061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd9061375c565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b50505050509080600101805461145d9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546114899061375c565b80156114d45780601f106114ab576101008083540402835291602001916114d4565b820191905f5260205f20905b8154815290600101906020018083116114b757829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b600354600114611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035582511580159061158e57505f8251115b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610732565b7f00000000000000000000000000000000000000000000000000000000000000003410156116ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610732565b69d3c21bcecceda100000081101561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610732565b6fffffffffffffffffffffffffffffffff81106117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610732565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061181a9082613898565b506020820151600182019061182f9082613898565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f84815260209384528181203382528452818120349055919092529081208054916118d483613725565b909155506118e590508160016136aa565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b6003546001146119cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035534611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610732565b5f8181526005602052604090206004810154611ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415611b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b6003810154611b5234826136aa565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611b869084906136aa565b9091555050335f908152600860205260408120805491611ba583613725565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611cab9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd79061375c565b8015611d225780601f10611cf957610100808354040283529160200191611d22565b820191905f5260205f20905b815481529060010190602001808311611d0557829003601f168201915b50505050508152602001600182018054611d3b9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d679061375c565b8015611db25780601f10611d8957610100808354040283529160200191611db2565b820191905f5260205f20905b815481529060010190602001808311611d9557829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151611e8a91906136aa565b421115611f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610732565b5f82815260066020908152604080832033845290915290205480611f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610732565b335f908152600860205260408120805491611fb383613725565b9190505550611fcd84848460c001518486606001516127a2565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b15801561203e575f5ffd5b505af1158015612050573d5f5f3e3d5ffd5b505050505050565b5f60646032856002015461206c91906136c3565b61207691906136da565b90505f8185600201546120899190613712565b90505f6121af87875f01805461209e9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546120ca9061375c565b80156121155780601f106120ec57610100808354040283529160200191612115565b820191905f5260205f20905b8154815290600101906020018083116120f857829003601f168201915b50505050508860010180546121299061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546121559061375c565b80156121a05780601f10612177576101008083540402835291602001916121a0565b820191905f5260205f20905b81548152906001019060200180831161218357829003601f168201915b505050505089600201546128c6565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260076020526040812089905590915080806121e6848988612a9a565b4260058d015560068c0188905560078c01839055919450925090508015612236576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a815260066020908152604080832033845290915290205480156122d0576122d0858c88848c6127a2565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261236057847f0000000000000000000000000000000000000000000000000000000000000000612383565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612448575f5ffd5b505afa15801561245a573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af115801561253a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e91906139af565b915091505f82118061256f57505f81115b6125d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610732565b5f5f87156125e75750829050816125ed565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612652575f5ffd5b505af1158015612664573d5f5f3e3d5ffd5b505050508160015f82825461267991906136aa565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f6806e83567304ec6d4006001541015612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f7420656e6f75676820746f20636f766572206c61756e63682063616d706160448201527f69676e00000000000000000000000000000000000000000000000000000000006064820152608401610732565b6127816131ff565b6806e83567304ec6d4006001546127989190613712565b6001600455919050565b5f816127ae84866136c3565b6127b891906136da565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af115801561284b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286f91906137f1565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f6040518060200161297390613301565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526129bb908890889060129089906020016139d1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526129f79291602001613a23565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610732565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161015612af5575060015b5f5f5f5f84612b2757897f0000000000000000000000000000000000000000000000000000000000000000898b612b4c565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a7640000612b6a91906136c3565b612b7491906136da565b90505f633b9aca00612b858361324f565b612b9c906c010000000000000000000000006136c3565b612ba691906136da565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c369190613a3f565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612cb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd99190613a3f565b905073ffffffffffffffffffffffffffffffffffffffff811615612d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610732565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612dfc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190613a3f565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612eb6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eda91906137f1565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612f6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906137f1565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061303790613810565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b81526004016130d29190613a5a565b6080604051808303815f875af11580156130ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131129190613b45565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a61314657868f6131419190613712565b613152565b878f6131529190613712565b90508015613171578060015f82825461316b91906136aa565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b1580156131d6575f5ffd5b505af11580156131e8573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b7f00000000000000000000000000000000000000000000000000000000000000005f8181526005602052604090209061324c90826806e83567304ec6d4006807acad1d521ea40800612058565b50565b60b5817101000000000000000000000000000000000081106132765760409190911b9060801c5b690100000000000000000081106132925760209190911b9060401c5b6501000000000081106132aa5760109190911b9060201c5b630100000081106132c05760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b61119480613b9683390190565b5f6020828403121561331e575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461324c575f5ffd5b5f5f60408385031215613357575f5ffd5b82359150602083013561336981613325565b809150509250929050565b5f60208284031215613384575f5ffd5b813561338f81613325565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561340a5761340a613396565b604052919050565b5f60208284031215613422575f5ffd5b813567ffffffffffffffff811115613438575f5ffd5b8201601f81018413613448575f5ffd5b803567ffffffffffffffff81111561346257613462613396565b8060051b613472602082016133c3565b9182526020818401810192908101908784111561348d575f5ffd5b6020850194505b838510156134bb57843592506134a983613325565b82825260209485019490910190613494565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61352661012083018c6134c6565b8281036020840152613538818c6134c6565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f830112613582575f5ffd5b813567ffffffffffffffff81111561359c5761359c613396565b6135cd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016133c3565b8181528460208386010111156135e1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561360f575f5ffd5b833567ffffffffffffffff811115613625575f5ffd5b61363186828701613573565b935050602084013567ffffffffffffffff81111561364d575f5ffd5b61365986828701613573565b93969395505050506040919091013590565b602081525f61338f60208301846134c6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156136bd576136bd61367d565b92915050565b80820281158282048414176136bd576136bd61367d565b5f8261370d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156136bd576136bd61367d565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137555761375561367d565b5060010190565b600181811c9082168061377057607f821691505b6020821081036137a7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156137bd575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613801575f5ffd5b8151801515811461338f575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000081036138445761384461367d565b5f0392915050565b601f82111561389357805f5260205f20601f840160051c810160208510156138715750805b601f840160051c820191505b81811015613890575f815560010161387d565b50505b505050565b815167ffffffffffffffff8111156138b2576138b2613396565b6138c6816138c0845461375c565b8461384c565b6020601f821160018114613917575f83156138e15750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613890565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139645787850151825560209485019460019092019101613944565b50848210156139a057868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156139c0575f5ffd5b505080516020909101519092909150565b608081525f6139e360808301876134c6565b82810360208401526139f581876134c6565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f613a37613a318386613a0c565b84613a0c565b949350505050565b5f60208284031215613a4f575f5ffd5b815161338f81613325565b815173ffffffffffffffffffffffffffffffffffffffff16815261016081016020830151613aa0602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151613ab7604084018262ffffff169052565b506060830151613acc606084018260020b9052565b506080830151613ae1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151613b3561012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613b58575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114613b7f575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a2646970667358221220ab92cf3b0ead9062d9643cd5d39919065482921907c578016f0b6253dcf39d7a64736f6c634300081c0033", + "deployedBytecode": "0x6080604052600436106101f4575f3560e01c80636882a88811610117578063b72124e3116100ac578063e0be16171161007c578063ea43cf5011610062578063ea43cf501461063a578063f74e481b14610656578063ffa1ad7414610675575f5ffd5b8063e0be1617146105f4578063e1758bd814610607575f5ffd5b8063b72124e3146105b5578063be399e2b146105cb578063d1b0c288146105b5578063dab346ff146105e0575f5ffd5b8063a1634b14116100e7578063a1634b1414610509578063a2a7eb951461053c578063a5ae390c1461056f578063b1bd3c95146105a2575f5ffd5b80636882a8881461046757806372f2a36b1461048e578063803551a9146104c25780638e499bcf146104f5575f5ffd5b806340b67a9b1161018d57806352d15d361161015d57806352d15d361461040157806358c0f7291461041d578063644c81141461043c57806367608ad014610453575f5ffd5b806340b67a9b14610371578063466ffbce1461039c5780634c69a6c9146103bb5780635122c409146103e4575f5ffd5b80631ecfd535116101c85780631ecfd535146102ed5780632e0f26251461031857806335f9f8d91461033e5780633d0cc37514610352575f5ffd5b806231d115146101f857806309ca5a11146102555780630df400c61461027657806317c6df2d146102ba575b5f5ffd5b348015610203575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610260575f5ffd5b5061027461026f36600461330e565b6106ca565b005b348015610281575f5ffd5b506102ac610290366004613346565b600660209081525f928352604080842090915290825290205481565b60405190815260200161024c565b3480156102c5575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f8575f5ffd5b506102ac610307366004613374565b60076020525f908152604090205481565b348015610323575f5ffd5b5061032c601281565b60405160ff909116815260200161024c565b348015610349575f5ffd5b506102ac603281565b34801561035d575f5ffd5b5061027461036c366004613374565b610922565b34801561037c575f5ffd5b506102ac61038b366004613374565b60086020525f908152604090205481565b3480156103a7575f5ffd5b5061022b6103b636600461330e565b610e66565b3480156103c6575f5ffd5b506103d061271081565b60405162ffffff909116815260200161024c565b3480156103ef575f5ffd5b506102ac69d3c21bcecceda100000081565b34801561040c575f5ffd5b506102ac6807acad1d521ea4080081565b348015610428575f5ffd5b50610274610437366004613412565b610e9b565b348015610447575f5ffd5b506102ac63015d78d181565b34801561045e575f5ffd5b50610274611160565b348015610472575f5ffd5b5061047b61138b565b60405160029190910b815260200161024c565b348015610499575f5ffd5b506104ad6104a836600461330e565b6113b7565b60405161024c99989796959493929190613512565b3480156104cd575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610500575f5ffd5b506102ac5f5481565b348015610514575f5ffd5b5061047b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b348015610547575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057a575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b6102746105b03660046135fd565b61150d565b3480156105c0575f5ffd5b506102ac6201518081565b3480156105d6575f5ffd5b506102ac60015481565b3480156105eb575f5ffd5b506102ac600a81565b61027461060236600461330e565b611961565b348015610612575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610645575f5ffd5b506102ac6806e83567304ec6d40081565b348015610661575f5ffd5b50610274610670366004613374565b611beb565b348015610680575f5ffd5b506106bd6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161024c919061366b565b60035460011461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b62015180816004015461083791906136aa565b4210156108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610732565b60038101546108ae81611fd8565b5f60646108bc600a846136c3565b6108c691906136da565b90505f6108d38284613712565b90508160015f8282546108e691906136aa565b9091555050335f90815260086020526040812080549161090583613725565b919050555061091685858386612058565b50506001600355505050565b60035460011461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f908152600760209081526040808320548084526005909252808320815161012081019092528054929392829082906109e29061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e9061375c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600182018054610a729061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e9061375c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610bae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151610bc191906136aa565b4211610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610732565b335f908152600860205260408120805491610c6983613725565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610cda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfe91906137ad565b90505f8111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610732565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610df4575f5ffd5b505af1158015610e06573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610e5291815260200190565b60405180910390a250506001600355505050565b60098181548110610e75575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b6002600355335f908152600860205260408120805491610f2683613725565b909155505f90505b8151811015611157575f60075f848481518110610f4d57610f4d6137c4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610fbe9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea9061375c565b80156110355780601f1061100c57610100808354040283529160200191611035565b820191905f5260205f20905b81548152906001019060200180831161101857829003601f168201915b5050505050815260200160018201805461104e9061375c565b80601f016020809104026020016040519081016040528092919081815260200182805461107a9061375c565b80156110c55780601f1061109c576101008083540402835291602001916110c5565b820191905f5260205f20905b8154815290600101906020018083116110a857829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061114d90859085908110611135576111356137c4565b60200260200101518260e00151836101000151612332565b5050600101610f2e565b50506001600355565b6003546001146111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b60026003556004545f906111e7576111e26126dd565b6111eb565b6001545b90505f8111611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610732565b5f600181905533815260086020526040812080549161127483613725565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af115801561132b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134f91906137f1565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6113b47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660613810565b81565b60056020525f90815260409020805481906113d19061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd9061375c565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b50505050509080600101805461145d9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546114899061375c565b80156114d45780601f106114ab576101008083540402835291602001916114d4565b820191905f5260205f20905b8154815290600101906020018083116114b757829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b600354600114611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035582511580159061158e57505f8251115b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610732565b7f00000000000000000000000000000000000000000000000000000000000000003410156116ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610732565b69d3c21bcecceda100000081101561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610732565b6fffffffffffffffffffffffffffffffff81106117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610732565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061181a9082613898565b506020820151600182019061182f9082613898565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f84815260209384528181203382528452818120349055919092529081208054916118d483613725565b909155506118e590508160016136aa565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b6003546001146119cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035534611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610732565b5f8181526005602052604090206004810154611ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415611b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b6003810154611b5234826136aa565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611b869084906136aa565b9091555050335f908152600860205260408120805491611ba583613725565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611cab9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd79061375c565b8015611d225780601f10611cf957610100808354040283529160200191611d22565b820191905f5260205f20905b815481529060010190602001808311611d0557829003601f168201915b50505050508152602001600182018054611d3b9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d679061375c565b8015611db25780601f10611d8957610100808354040283529160200191611db2565b820191905f5260205f20905b815481529060010190602001808311611d9557829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151611e8a91906136aa565b421115611f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610732565b5f82815260066020908152604080832033845290915290205480611f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610732565b335f908152600860205260408120805491611fb383613725565b9190505550611fcd84848460c001518486606001516127a2565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b15801561203e575f5ffd5b505af1158015612050573d5f5f3e3d5ffd5b505050505050565b5f60646032856002015461206c91906136c3565b61207691906136da565b90505f8185600201546120899190613712565b90505f6121af87875f01805461209e9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546120ca9061375c565b80156121155780601f106120ec57610100808354040283529160200191612115565b820191905f5260205f20905b8154815290600101906020018083116120f857829003601f168201915b50505050508860010180546121299061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546121559061375c565b80156121a05780601f10612177576101008083540402835291602001916121a0565b820191905f5260205f20905b81548152906001019060200180831161218357829003601f168201915b505050505089600201546128c6565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260076020526040812089905590915080806121e6848988612a9a565b4260058d015560068c0188905560078c01839055919450925090508015612236576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a815260066020908152604080832033845290915290205480156122d0576122d0858c88848c6127a2565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261236057847f0000000000000000000000000000000000000000000000000000000000000000612383565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612448575f5ffd5b505afa15801561245a573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af115801561253a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e91906139af565b915091505f82118061256f57505f81115b6125d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610732565b5f5f87156125e75750829050816125ed565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612652575f5ffd5b505af1158015612664573d5f5f3e3d5ffd5b505050508160015f82825461267991906136aa565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f6806e83567304ec6d4006001541015612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f7420656e6f75676820746f20636f766572206c61756e63682063616d706160448201527f69676e00000000000000000000000000000000000000000000000000000000006064820152608401610732565b6127816131ff565b6806e83567304ec6d4006001546127989190613712565b6001600455919050565b5f816127ae84866136c3565b6127b891906136da565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af115801561284b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286f91906137f1565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f6040518060200161297390613301565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526129bb908890889060129089906020016139d1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526129f79291602001613a23565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610732565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161015612af5575060015b5f5f5f5f84612b2757897f0000000000000000000000000000000000000000000000000000000000000000898b612b4c565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a7640000612b6a91906136c3565b612b7491906136da565b90505f633b9aca00612b858361324f565b612b9c906c010000000000000000000000006136c3565b612ba691906136da565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c369190613a3f565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612cb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd99190613a3f565b905073ffffffffffffffffffffffffffffffffffffffff811615612d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610732565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612dfc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190613a3f565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612eb6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eda91906137f1565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612f6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906137f1565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061303790613810565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b81526004016130d29190613a5a565b6080604051808303815f875af11580156130ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131129190613b45565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a61314657868f6131419190613712565b613152565b878f6131529190613712565b90508015613171578060015f82825461316b91906136aa565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b1580156131d6575f5ffd5b505af11580156131e8573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b7f00000000000000000000000000000000000000000000000000000000000000005f8181526005602052604090209061324c90826806e83567304ec6d4006807acad1d521ea40800612058565b50565b60b5817101000000000000000000000000000000000081106132765760409190911b9060801c5b690100000000000000000081106132925760209190911b9060401c5b6501000000000081106132aa5760109190911b9060201c5b630100000081106132c05760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b61119480613b9683390190565b5f6020828403121561331e575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461324c575f5ffd5b5f5f60408385031215613357575f5ffd5b82359150602083013561336981613325565b809150509250929050565b5f60208284031215613384575f5ffd5b813561338f81613325565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561340a5761340a613396565b604052919050565b5f60208284031215613422575f5ffd5b813567ffffffffffffffff811115613438575f5ffd5b8201601f81018413613448575f5ffd5b803567ffffffffffffffff81111561346257613462613396565b8060051b613472602082016133c3565b9182526020818401810192908101908784111561348d575f5ffd5b6020850194505b838510156134bb57843592506134a983613325565b82825260209485019490910190613494565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61352661012083018c6134c6565b8281036020840152613538818c6134c6565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f830112613582575f5ffd5b813567ffffffffffffffff81111561359c5761359c613396565b6135cd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016133c3565b8181528460208386010111156135e1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561360f575f5ffd5b833567ffffffffffffffff811115613625575f5ffd5b61363186828701613573565b935050602084013567ffffffffffffffff81111561364d575f5ffd5b61365986828701613573565b93969395505050506040919091013590565b602081525f61338f60208301846134c6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156136bd576136bd61367d565b92915050565b80820281158282048414176136bd576136bd61367d565b5f8261370d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156136bd576136bd61367d565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137555761375561367d565b5060010190565b600181811c9082168061377057607f821691505b6020821081036137a7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156137bd575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613801575f5ffd5b8151801515811461338f575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000081036138445761384461367d565b5f0392915050565b601f82111561389357805f5260205f20601f840160051c810160208510156138715750805b601f840160051c820191505b81811015613890575f815560010161387d565b50505b505050565b815167ffffffffffffffff8111156138b2576138b2613396565b6138c6816138c0845461375c565b8461384c565b6020601f821160018114613917575f83156138e15750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613890565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139645787850151825560209485019460019092019101613944565b50848210156139a057868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156139c0575f5ffd5b505080516020909101519092909150565b608081525f6139e360808301876134c6565b82810360208401526139f581876134c6565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f613a37613a318386613a0c565b84613a0c565b949350505050565b5f60208284031215613a4f575f5ffd5b815161338f81613325565b815173ffffffffffffffffffffffffffffffffffffffff16815261016081016020830151613aa0602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151613ab7604084018262ffffff169052565b506060830151613acc606084018260020b9052565b506080830151613ae1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151613b3561012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613b58575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114613b7f575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a2646970667358221220ab92cf3b0ead9062d9643cd5d39919065482921907c578016f0b6253dcf39d7a64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.28/MemeCelo.json b/abis/0.8.28/MemeCelo.json index 92ee692..79ee8be 100644 --- a/abis/0.8.28/MemeCelo.json +++ b/abis/0.8.28/MemeCelo.json @@ -12,38 +12,23 @@ }, { "internalType": "address", - "name": "_referenceToken", + "name": "_nativeToken", "type": "address" }, { "internalType": "address", - "name": "_router", + "name": "_uniV3PositionManager", "type": "address" }, { "internalType": "address", - "name": "_factory", + "name": "_buyBackBurner", "type": "address" }, { "internalType": "uint256", "name": "_minNativeTokenValue", "type": "uint256" - }, - { - "internalType": "address", - "name": "_celo", - "type": "address" - }, - { - "internalType": "address", - "name": "_l2TokenRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_oracle", - "type": "address" } ], "stateMutability": "nonpayable", @@ -80,7 +65,7 @@ { "indexed": true, "internalType": "address", - "name": "hearter", + "name": "feeCollector", "type": "address" }, { @@ -92,11 +77,17 @@ { "indexed": false, "internalType": "uint256", - "name": "amount", + "name": "nativeTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "memeTokenAmount", "type": "uint256" } ], - "name": "Hearted", + "name": "FeesCollected", "type": "event" }, { @@ -105,9 +96,28 @@ { "indexed": true, "internalType": "address", - "name": "olas", + "name": "hearter", "type": "address" }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Hearted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": false, "internalType": "uint256", @@ -130,7 +140,7 @@ { "indexed": false, "internalType": "uint256", - "name": "remainingAmount", + "name": "amount", "type": "uint256" } ], @@ -148,14 +158,14 @@ }, { "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "nativeTokenContributed", + "name": "amount", "type": "uint256" } ], @@ -173,26 +183,26 @@ }, { "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "lpPairAddress", + "name": "memeToken", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "liquidity", + "name": "lpTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "burnPercentageOfStable", + "name": "liquidity", "type": "uint256" } ], @@ -201,7 +211,7 @@ }, { "inputs": [], - "name": "COLLECT_DEADLINE", + "name": "COLLECT_DELAY", "outputs": [ { "internalType": "uint256", @@ -227,12 +237,12 @@ }, { "inputs": [], - "name": "LP_PERCENTAGE", + "name": "FEE_TIER", "outputs": [ { - "internalType": "uint256", + "internalType": "uint24", "name": "", - "type": "uint256" + "type": "uint24" } ], "stateMutability": "view", @@ -240,7 +250,7 @@ }, { "inputs": [], - "name": "MIN_TOTAL_SUPPLY", + "name": "LP_PERCENTAGE", "outputs": [ { "internalType": "uint256", @@ -253,12 +263,12 @@ }, { "inputs": [], - "name": "OLAS_BURNER", + "name": "MAX_TICK", "outputs": [ { - "internalType": "address", + "internalType": "int24", "name": "", - "type": "address" + "type": "int24" } ], "stateMutability": "view", @@ -266,12 +276,12 @@ }, { "inputs": [], - "name": "OLAS_BURN_PERCENTAGE", + "name": "MIN_TICK", "outputs": [ { - "internalType": "uint256", + "internalType": "int24", "name": "", - "type": "uint256" + "type": "int24" } ], "stateMutability": "view", @@ -279,7 +289,7 @@ }, { "inputs": [], - "name": "SLIPPAGE", + "name": "MIN_TOTAL_SUPPLY", "outputs": [ { "internalType": "uint256", @@ -292,7 +302,7 @@ }, { "inputs": [], - "name": "UNLEASH_DELAY", + "name": "OLAS_BURN_PERCENTAGE", "outputs": [ { "internalType": "uint256", @@ -305,20 +315,7 @@ }, { "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WORMHOLE_BRIDGING_CUTOFF", + "name": "UNLEASH_DELAY", "outputs": [ { "internalType": "uint256", @@ -331,12 +328,12 @@ }, { "inputs": [], - "name": "WORMHOLE_ETH_CHAIN_ID", + "name": "VERSION", "outputs": [ { - "internalType": "uint16", + "internalType": "string", "name": "", - "type": "uint16" + "type": "string" } ], "stateMutability": "view", @@ -344,7 +341,7 @@ }, { "inputs": [], - "name": "celo", + "name": "buyBackBurner", "outputs": [ { "internalType": "address", @@ -358,35 +355,35 @@ { "inputs": [ { - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "address[]", + "name": "tokens", + "type": "address[]" } ], - "name": "collectThisMeme", + "name": "collectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [], - "name": "factory", - "outputs": [ + "inputs": [ { "internalType": "address", - "name": "", + "name": "memeToken", "type": "address" } ], - "stateMutability": "view", + "name": "collectThisMeme", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { - "internalType": "address", - "name": "memeToken", - "type": "address" + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" } ], "name": "heartThisMeme", @@ -394,19 +391,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [], - "name": "l2TokenRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -429,9 +413,9 @@ { "inputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" }, { "internalType": "address", @@ -453,13 +437,28 @@ { "inputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "name": "memeSummons", "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, { "internalType": "uint256", "name": "nativeTokenContributed", @@ -479,6 +478,16 @@ "internalType": "uint256", "name": "heartersAmount", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isNativeFirst", + "type": "bool" } ], "stateMutability": "view", @@ -487,43 +496,36 @@ { "inputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], - "name": "memeTokens", + "name": "memeTokenNonces", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "minNativeTokenValue", - "outputs": [ + "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", + "name": "memeTokens", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "stateMutability": "view", @@ -531,7 +533,7 @@ }, { "inputs": [], - "name": "numTokens", + "name": "minNativeTokenValue", "outputs": [ { "internalType": "uint256", @@ -544,7 +546,7 @@ }, { "inputs": [], - "name": "olas", + "name": "nativeToken", "outputs": [ { "internalType": "address", @@ -557,7 +559,7 @@ }, { "inputs": [], - "name": "olasLeftovers", + "name": "numTokens", "outputs": [ { "internalType": "uint256", @@ -570,7 +572,7 @@ }, { "inputs": [], - "name": "oracle", + "name": "olas", "outputs": [ { "internalType": "address", @@ -596,51 +598,9 @@ }, { "inputs": [], - "name": "referenceToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "router", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "limit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "bridgePayload", - "type": "bytes" - } - ], - "name": "scheduleOLASForAscendance", + "name": "scheduleForAscendance", "outputs": [], - "stateMutability": "payable", + "stateMutability": "nonpayable", "type": "function" }, { @@ -680,15 +640,23 @@ "type": "function" }, { - "inputs": [ + "inputs": [], + "name": "uniV3PositionManager", + "outputs": [ { "internalType": "address", - "name": "memeToken", + "name": "", "type": "address" - }, + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint256", - "name": "limit", + "name": "memeNonce", "type": "uint256" } ], @@ -696,14 +664,10 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" } ], - "bytecode": "0x610180604052600160025534801561001657600080fd5b506040516142b43803806142b48339810160408190526100359161008b565b6001600160a01b0397881660a05295871660c05293861660e05291851661010052608052831661012052821661014052166101605261011b565b80516001600160a01b038116811461008657600080fd5b919050565b600080600080600080600080610100898b0312156100a857600080fd5b6100b18961006f565b97506100bf60208a0161006f565b96506100cd60408a0161006f565b95506100db60608a0161006f565b9450608089015193506100f060a08a0161006f565b92506100fe60c08a0161006f565b915061010c60e08a0161006f565b90509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161408561022f600039600081816104b60152611f8a01526000818161056f01528181611c4c0152611d9001526000818161027d015281816118ce01528181611eac01526121200152600081816105e2015261230d0152600081816106ba015281816119b901528181611a98015281816120ee015281816121d0015281816123b70152818161249601526125a80152600081816102d601528181611860015281816119e801528181611f1a015281816122d8015281816123e9015261255001526000818161021f0152818161193c01528181611c7b01528181611d290152611e1601526000818161053b0152610f1e01526140856000f3fe6080604052600436106102015760003560e01c80637dc0d1d01161011d578063be399e2b116100b0578063dab346ff1161007f578063f76c603711610064578063f76c603714610670578063f887ea40146106a8578063ffa1ad74146106dc57600080fd5b8063dab346ff1461063b578063f74e481b1461065057600080fd5b8063be399e2b146105ba578063c45a0155146105d0578063cf4ffb7e14610604578063d1b0c2881461062457600080fd5b8063a5ae390c116100ec578063a5ae390c14610529578063a7be1b501461055d578063affed0e014610591578063b1bd3c95146105a757600080fd5b80637dc0d1d0146104a45780638b9ee610146104d85780638e499bcf146105005780639823bb131461051657600080fd5b806336b4134a116101955780635122c409116101645780635122c409146104325780635eb76db2146104505780636be6af9814610478578063709a5c9c1461049157600080fd5b806336b4134a146103ae5780633d0cc375146103c357806340b67a9b146103e5578063466ffbce1461041257600080fd5b806314c7312b116101d157806314c7312b146102f85780632e0f26251461035c578063323ebe581461038357806335f9f8d91461039957600080fd5b806231d1151461020d578063051ed8ef1461026b5780630a42f8bd1461029f5780631265b651146102c457600080fd5b3661020857005b600080fd5b34801561021957600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b3480156102ab57600080fd5b506102b66202a30081565b604051908152602001610262565b3480156102d057600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b34801561030457600080fd5b5061033c61031336600461277f565b600360208190526000918252604090912080546001820154600283015492909301549092919084565b604080519485526020850193909352918301526060820152608001610262565b34801561036857600080fd5b50610371601281565b60405160ff9091168152602001610262565b34801561038f57600080fd5b506102b660085481565b3480156103a557600080fd5b506102b6603281565b3480156103ba57600080fd5b506102b6606181565b3480156103cf57600080fd5b506103e36103de36600461277f565b610732565b005b3480156103f157600080fd5b506102b661040036600461277f565b60056020526000908152604090205481565b34801561041e57600080fd5b5061024161042d3660046127a3565b610b1f565b34801561043e57600080fd5b506102b669d3c21bcecceda100000081565b34801561045c57600080fd5b50610465600281565b60405161ffff9091168152602001610262565b34801561048457600080fd5b506102b66402540be40081565b6103e361049f3660046128b4565b610b56565b3480156104b057600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e457600080fd5b506102417351eb65012ca5ceb07320c497f4151ac207fea4e081565b34801561050c57600080fd5b506102b660005481565b6103e361052436600461277f565b610cc9565b34801561053557600080fd5b506102b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561056957600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b34801561059d57600080fd5b506102b660075481565b6103e36105b5366004612938565b610f1c565b3480156105c657600080fd5b506102b660015481565b3480156105dc57600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b34801561061057600080fd5b506103e361061f3660046129ab565b611212565b34801561063057600080fd5b506102b66201518081565b34801561064757600080fd5b506102b6600a81565b34801561065c57600080fd5b506103e361066b36600461277f565b611598565b34801561067c57600080fd5b506102b661068b3660046129d7565b600460209081526000928352604080842090915290825290205481565b3480156106b457600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b3480156106e857600080fd5b506107256040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102629190612a74565b6002546001146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020818152604092839020835160808101855281548152600182015492810183905260028201549481019490945290910154606083015261085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161079a565b6202a30081602001516108719190612ab6565b42116108ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20343820686f75727360448201527f2061667465722073756d6d6f6e00000000000000000000000000000000000000606482015260840161079a565b33600090815260056020526040812080549161091a83612ac9565b90915550506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561098e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b29190612b01565b905060008111610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f7267650000000000000000000000000000000000000000000000000000000000606482015260840161079a565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c6890602401600060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610b0c91815260200190565b60405180910390a2505060016002555050565b60068181548110610b2f57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600254600114610bc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161079a565b600060015411610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f206275726e0000000000000000000000000000000000604482015260640161079a565b336000908152600560205260408120805491610c4983612ac9565b91905055506000610c5c60015485611838565b60006001819055909150610c71828585611b62565b90508015610cc25760405132908290600081818185875af1925050503d8060008114610cb9576040519150601f19603f3d011682016040523d82523d6000602084013e610cbe565b606091505b5050505b5050505050565b60003411610d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f00000000000000000000000000000000000000606482015260840161079a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020805480610de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161079a565b600282015415610e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161079a565b610e5d3482612ab6565b80835573ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080549293503492909190610ea5908490612ab6565b9091555050336000908152600560205260408120805491610ec583612ac9565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff84169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a3505050565b7f0000000000000000000000000000000000000000000000000000000000000000341015610fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e00000000000000000000000000000000606482015260840161079a565b69d3c21bcecceda1000000811015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d657400604482015260640161079a565b600083836012846040516110539061274d565b6110609493929190612b1a565b604051809103906000f08015801561107c573d6000803e3d6000fd5b50604080516080810182523480825242602080840191825260008486018181526060860182815273ffffffffffffffffffffffffffffffffffffffff891680845260038086528985209851895595516001808a01919091559251600289015590519690940195909555600482528581203382528252858120939093556006805494850181557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90940180547fffffffffffffffffffffffff000000000000000000000000000000000000000016909217909155915481556005909152908120805492935083929161116c83612ac9565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff82169033907f109fe5b1a043e1fc6e8b6f4905613c0a5b82de0d8798558c67f0243106b2d7ad9060200160405180910390a360405134815273ffffffffffffffffffffffffffffffffffffffff82169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a35050505050565b60025460011461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161079a565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902080546001820154611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161079a565b6201518082600101546113239190612ab6565b42101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c65617368207965740000000000000000000000000000604482015260640161079a565b60006113988285611e85565b9050600060646113a9600a84612b56565b6113b39190612b6d565b905080600160008282546113c79190612ab6565b909155506113d790508183612ba8565b9150600086905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190612b01565b905060006064611460603284612b56565b61146a9190612b6d565b905060006114788284612ba8565b90506000806114888c898661229b565b4260028d015560038c0185905533600090815260056020526040812080549395509193506114b583612ac9565b909155505073ffffffffffffffffffffffffffffffffffffffff8c16600090815260046020908152604080832033845290915290205480156114fd576114fd8d82868d612624565b8273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcef3279530e487be6d2c4583c847d17d5a328a9b6ab1e27ad458690257ba7768858c60405161157c929190918252602082015260400190565b60405180910390a4505060016002555050505050505050505050565b600254600114611604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161079a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360208181526040928390208351608081018552815481526001820154928101929092526002810154938201849052909101546060820152906116c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161079a565b6202a30081602001516116d39190612ab6565b421115611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20343820686f60448201527f7572732061667465722073756d6d6f6e00000000000000000000000000000000606482015260840161079a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460209081526040808320338452909152902054806117fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e00000000000000000000000000604482015260640161079a565b33600090815260056020526040812080549161181583612ac9565b919050555061182e838284606001518560000151612624565b5050600160025550565b60408051600380825260808201909252600091829190602082016060803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061189257611892612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061190057611900612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061196e5761196e612bbb565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000082166004820152602481018690527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a579190612bea565b506040517f38ed173900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906338ed173990611ad59088908890879030904290600401612c0c565b6000604051808303816000875af1158015611af4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b3a9190810190612c98565b905080600181518110611b4f57611b4f612bbb565b6020026020010151925050505b92915050565b600060085484611b729190612ab6565b93506000611b856402540be40086612b6d565b9050611b966402540be40082612b56565b905060008111611c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e7420697320746f6f20736d616c6c20666f72206272696467696e67604482015260640161079a565b611c0c8186612ba8565b6008556040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015611cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce89190612bea565b506007546040517f0f5287b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201849052600260448301527351eb65012ca5ceb07320c497f4151ac207fea4e0606483018190526000608484015263ffffffff841660a484015292917f000000000000000000000000000000000000000000000000000000000000000090911690630f5287b09060c4016020604051808303816000875af1158015611ddb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dff9190612d49565b50611e0b816001612ab6565b6007556040518381527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16907f40a3e75fd2efcf074c9c0520c5367ccb3093ded646970bdc8c3108748e5d3f0e9060200160405180910390a250349695505050505050565b604080516002808252606082018352600092839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611ede57611ede612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611f4c57611f4c612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a0604051808303816000875af1158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120199190612d92565b50505091505060008113612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f7261636c6520707269636520697320696e636f727265637400000000000000604482015260640161079a565b60006402540be400606161209d8885612b56565b6120a79190612b56565b6120b19190612b6d565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af115801561216b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218f9190612bea565b506040517f38ed173900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906338ed17399061220d908a908690899030904290600401612c0c565b6000604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526122729190810190612c98565b90508060018151811061228757612287612bbb565b602002602001015194505050505092915050565b6040517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152848116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c9c65396906044016020604051808303816000875af1158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a9190612de4565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529193507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015612434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124589190612bea565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905286169063095ea7b3906044016020604051808303816000875af11580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125129190612bea565b506040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528681166024830152604482018690526064820185905260006084830181905260a48301523060c48301524260e48301527f0000000000000000000000000000000000000000000000000000000000000000169063e8e3370090610104016060604051808303816000875af11580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190612e01565b939793965092945050505050565b836000826126328587612b56565b61263c9190612b6d565b73ffffffffffffffffffffffffffffffffffffffff87811660009081526004602081815260408084203380865292528084209390935591517fa9059cbb000000000000000000000000000000000000000000000000000000008152908101919091526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156126d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f79190612bea565b5060405181815273ffffffffffffffffffffffffffffffffffffffff87169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a3505050505050565b61122080612e3083390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461277c57600080fd5b50565b60006020828403121561279157600080fd5b813561279c8161275a565b9392505050565b6000602082840312156127b557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612832576128326127bc565b604052919050565b60008067ffffffffffffffff841115612855576128556127bc565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001612888816127eb565b91505082815283838301111561289d57600080fd5b828260208301376000602084830101529392505050565b6000806000606084860312156128c957600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156128ee57600080fd5b8401601f810186136128ff57600080fd5b61290e8682356020840161283a565b9150509250925092565b600082601f83011261292957600080fd5b61279c8383356020850161283a565b60008060006060848603121561294d57600080fd5b833567ffffffffffffffff81111561296457600080fd5b61297086828701612918565b935050602084013567ffffffffffffffff81111561298d57600080fd5b61299986828701612918565b93969395505050506040919091013590565b600080604083850312156129be57600080fd5b82356129c98161275a565b946020939093013593505050565b600080604083850312156129ea57600080fd5b82356129f58161275a565b91506020830135612a058161275a565b809150509250929050565b6000815180845260005b81811015612a3657602081850181015186830182015201612a1a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061279c6020830184612a10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611b5c57611b5c612a87565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612afa57612afa612a87565b5060010190565b600060208284031215612b1357600080fd5b5051919050565b608081526000612b2d6080830187612a10565b8281036020840152612b3f8187612a10565b60ff95909516604084015250506060015292915050565b8082028115828204841417611b5c57611b5c612a87565b600082612ba3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115611b5c57611b5c612a87565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612bfc57600080fd5b8151801515811461279c57600080fd5b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b81811015612c6b57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612c37565b505073ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b600060208284031215612caa57600080fd5b815167ffffffffffffffff811115612cc157600080fd5b8201601f81018413612cd257600080fd5b805167ffffffffffffffff811115612cec57612cec6127bc565b8060051b612cfc602082016127eb565b91825260208184018101929081019087841115612d1857600080fd5b6020850194505b83851015612d3e57845180835260209586019590935090910190612d1f565b979650505050505050565b600060208284031215612d5b57600080fd5b815167ffffffffffffffff8116811461279c57600080fd5b805169ffffffffffffffffffff81168114612d8d57600080fd5b919050565b600080600080600060a08688031215612daa57600080fd5b612db386612d73565b60208701516040880151606089015192975090955093509150612dd860808701612d73565b90509295509295909350565b600060208284031215612df657600080fd5b815161279c8161275a565b600080600060608486031215612e1657600080fd5b505081516020830151604090930151909492935091905056fe60e060405234801561001057600080fd5b5060405161122038038061122083398101604081905261002f91610238565b838383600061003e848261034a565b50600161004b838261034a565b5060ff81166080524660a05261005f61007a565b60c05250610071915033905082610114565b505050506104a4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516100ac9190610408565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254610126919061047d565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101a657600080fd5b81516001600160401b038111156101bf576101bf61017f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ed576101ed61017f565b60405281815283820160200185101561020557600080fd5b60005b8281101561022457602081860181015183830182015201610208565b506000918101602001919091529392505050565b6000806000806080858703121561024e57600080fd5b84516001600160401b0381111561026457600080fd5b61027087828801610195565b602087015190955090506001600160401b0381111561028e57600080fd5b61029a87828801610195565b935050604085015160ff811681146102b157600080fd5b6060959095015193969295505050565b600181811c908216806102d557607f821691505b6020821081036102f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561034557806000526020600020601f840160051c810160208510156103225750805b601f840160051c820191505b81811015610342576000815560010161032e565b50505b505050565b81516001600160401b038111156103635761036361017f565b6103778161037184546102c1565b846102fb565b6020601f8211600181146103ab57600083156103935750848201515b600019600385901b1c1916600184901b178455610342565b600084815260208120601f198516915b828110156103db57878501518255602094850194600190920191016103bb565b50848210156103f95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000808354610416816102c1565b60018216801561042d576001811461044257610472565b60ff1983168652811515820286019350610472565b86600052602060002060005b8381101561046a5781548882015260019091019060200161044e565b505081860193505b509195945050505050565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051610d4d6104d360003960006104c30152600061048e015260006101540152610d4d6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b41146101e5578063a9059cbb146101ed578063d505accf14610200578063dd62ed3e1461021357600080fd5b806342966c681461019057806370a08231146101a55780637ecebe00146101c557600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109d7565b60405180910390f35b610115610110366004610a6c565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610a96565b610346565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61048a565b6101a361019e366004610ad3565b6104e5565b005b61012e6101b3366004610aec565b60036020526000908152604090205481565b61012e6101d3366004610aec565b60056020526000908152604090205481565b6100ec6104f2565b6101156101fb366004610a6c565b6104ff565b6101a361020e366004610b0e565b610584565b61012e610221366004610b81565b600460209081526000928352604080842090915290825290205481565b6000805461024b90610bb4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610bb4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103da576103a88382610c07565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040f908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104779087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104c0576104bb6108a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104ef3382610942565b50565b6001805461024b90610bb4565b33600090815260036020526040812080548391908390610520908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105ff61048a565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610751573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107cc57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105ea565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108da9190610c41565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290610977908490610c07565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081526000825180602084015260005b81811015610a0557602081860181015160408684010152016109e8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6757600080fd5b919050565b60008060408385031215610a7f57600080fd5b610a8883610a43565b946020939093013593505050565b600080600060608486031215610aab57600080fd5b610ab484610a43565b9250610ac260208501610a43565b929592945050506040919091013590565b600060208284031215610ae557600080fd5b5035919050565b600060208284031215610afe57600080fd5b610b0782610a43565b9392505050565b600080600080600080600060e0888a031215610b2957600080fd5b610b3288610a43565b9650610b4060208901610a43565b95506040880135945060608801359350608088013560ff81168114610b6457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610b9457600080fd5b610b9d83610a43565b9150610bab60208401610a43565b90509250929050565b600181811c90821680610bc857607f821691505b602082108103610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b81810381811115610340577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000808354818160011c90506001821680610c5d57607f821691505b602082108103610c94577f4e487b710000000000000000000000000000000000000000000000000000000084526022600452602484fd5b808015610ca85760018114610cdb57610d0b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610d0b565b60008881526020902060005b84811015610d0357815489820152600190910190602001610ce7565b505082870194505b5092969550505050505056fea26469706673582212203b134facc9dcc6995fc2e3d1fc78c6d13107692c1f18cfe3450a552767346f3e64736f6c634300081c0033a26469706673582212206d8c7cb8388268b6220e5dd3f3062b2de470fb1b40c0e4836a8f536423cc679364736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102015760003560e01c80637dc0d1d01161011d578063be399e2b116100b0578063dab346ff1161007f578063f76c603711610064578063f76c603714610670578063f887ea40146106a8578063ffa1ad74146106dc57600080fd5b8063dab346ff1461063b578063f74e481b1461065057600080fd5b8063be399e2b146105ba578063c45a0155146105d0578063cf4ffb7e14610604578063d1b0c2881461062457600080fd5b8063a5ae390c116100ec578063a5ae390c14610529578063a7be1b501461055d578063affed0e014610591578063b1bd3c95146105a757600080fd5b80637dc0d1d0146104a45780638b9ee610146104d85780638e499bcf146105005780639823bb131461051657600080fd5b806336b4134a116101955780635122c409116101645780635122c409146104325780635eb76db2146104505780636be6af9814610478578063709a5c9c1461049157600080fd5b806336b4134a146103ae5780633d0cc375146103c357806340b67a9b146103e5578063466ffbce1461041257600080fd5b806314c7312b116101d157806314c7312b146102f85780632e0f26251461035c578063323ebe581461038357806335f9f8d91461039957600080fd5b806231d1151461020d578063051ed8ef1461026b5780630a42f8bd1461029f5780631265b651146102c457600080fd5b3661020857005b600080fd5b34801561021957600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b3480156102ab57600080fd5b506102b66202a30081565b604051908152602001610262565b3480156102d057600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b34801561030457600080fd5b5061033c61031336600461277f565b600360208190526000918252604090912080546001820154600283015492909301549092919084565b604080519485526020850193909352918301526060820152608001610262565b34801561036857600080fd5b50610371601281565b60405160ff9091168152602001610262565b34801561038f57600080fd5b506102b660085481565b3480156103a557600080fd5b506102b6603281565b3480156103ba57600080fd5b506102b6606181565b3480156103cf57600080fd5b506103e36103de36600461277f565b610732565b005b3480156103f157600080fd5b506102b661040036600461277f565b60056020526000908152604090205481565b34801561041e57600080fd5b5061024161042d3660046127a3565b610b1f565b34801561043e57600080fd5b506102b669d3c21bcecceda100000081565b34801561045c57600080fd5b50610465600281565b60405161ffff9091168152602001610262565b34801561048457600080fd5b506102b66402540be40081565b6103e361049f3660046128b4565b610b56565b3480156104b057600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e457600080fd5b506102417351eb65012ca5ceb07320c497f4151ac207fea4e081565b34801561050c57600080fd5b506102b660005481565b6103e361052436600461277f565b610cc9565b34801561053557600080fd5b506102b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561056957600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b34801561059d57600080fd5b506102b660075481565b6103e36105b5366004612938565b610f1c565b3480156105c657600080fd5b506102b660015481565b3480156105dc57600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b34801561061057600080fd5b506103e361061f3660046129ab565b611212565b34801561063057600080fd5b506102b66201518081565b34801561064757600080fd5b506102b6600a81565b34801561065c57600080fd5b506103e361066b36600461277f565b611598565b34801561067c57600080fd5b506102b661068b3660046129d7565b600460209081526000928352604080842090915290825290205481565b3480156106b457600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b3480156106e857600080fd5b506107256040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102629190612a74565b6002546001146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020818152604092839020835160808101855281548152600182015492810183905260028201549481019490945290910154606083015261085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161079a565b6202a30081602001516108719190612ab6565b42116108ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20343820686f75727360448201527f2061667465722073756d6d6f6e00000000000000000000000000000000000000606482015260840161079a565b33600090815260056020526040812080549161091a83612ac9565b90915550506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561098e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b29190612b01565b905060008111610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f7267650000000000000000000000000000000000000000000000000000000000606482015260840161079a565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c6890602401600060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610b0c91815260200190565b60405180910390a2505060016002555050565b60068181548110610b2f57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600254600114610bc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161079a565b600060015411610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f206275726e0000000000000000000000000000000000604482015260640161079a565b336000908152600560205260408120805491610c4983612ac9565b91905055506000610c5c60015485611838565b60006001819055909150610c71828585611b62565b90508015610cc25760405132908290600081818185875af1925050503d8060008114610cb9576040519150601f19603f3d011682016040523d82523d6000602084013e610cbe565b606091505b5050505b5050505050565b60003411610d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f00000000000000000000000000000000000000606482015260840161079a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020805480610de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161079a565b600282015415610e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161079a565b610e5d3482612ab6565b80835573ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080549293503492909190610ea5908490612ab6565b9091555050336000908152600560205260408120805491610ec583612ac9565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff84169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a3505050565b7f0000000000000000000000000000000000000000000000000000000000000000341015610fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e00000000000000000000000000000000606482015260840161079a565b69d3c21bcecceda1000000811015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d657400604482015260640161079a565b600083836012846040516110539061274d565b6110609493929190612b1a565b604051809103906000f08015801561107c573d6000803e3d6000fd5b50604080516080810182523480825242602080840191825260008486018181526060860182815273ffffffffffffffffffffffffffffffffffffffff891680845260038086528985209851895595516001808a01919091559251600289015590519690940195909555600482528581203382528252858120939093556006805494850181557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90940180547fffffffffffffffffffffffff000000000000000000000000000000000000000016909217909155915481556005909152908120805492935083929161116c83612ac9565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff82169033907f109fe5b1a043e1fc6e8b6f4905613c0a5b82de0d8798558c67f0243106b2d7ad9060200160405180910390a360405134815273ffffffffffffffffffffffffffffffffffffffff82169033907fb4dec46ff7703ee80325aa5ed4df0691d6d8791df96b50240552403cec1c9eda9060200160405180910390a35050505050565b60025460011461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161079a565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902080546001820154611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d656d65206e6f742073756d6d6f6e6564000000000000000000000000000000604482015260640161079a565b6201518082600101546113239190612ab6565b42101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c65617368207965740000000000000000000000000000604482015260640161079a565b60006113988285611e85565b9050600060646113a9600a84612b56565b6113b39190612b6d565b905080600160008282546113c79190612ab6565b909155506113d790508183612ba8565b9150600086905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190612b01565b905060006064611460603284612b56565b61146a9190612b6d565b905060006114788284612ba8565b90506000806114888c898661229b565b4260028d015560038c0185905533600090815260056020526040812080549395509193506114b583612ac9565b909155505073ffffffffffffffffffffffffffffffffffffffff8c16600090815260046020908152604080832033845290915290205480156114fd576114fd8d82868d612624565b8273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcef3279530e487be6d2c4583c847d17d5a328a9b6ab1e27ad458690257ba7768858c60405161157c929190918252602082015260400190565b60405180910390a4505060016002555050505050505050505050565b600254600114611604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161079a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360208181526040928390208351608081018552815481526001820154928101929092526002810154938201849052909101546060820152906116c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161079a565b6202a30081602001516116d39190612ab6565b421115611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20343820686f60448201527f7572732061667465722073756d6d6f6e00000000000000000000000000000000606482015260840161079a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460209081526040808320338452909152902054806117fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e00000000000000000000000000604482015260640161079a565b33600090815260056020526040812080549161181583612ac9565b919050555061182e838284606001518560000151612624565b5050600160025550565b60408051600380825260808201909252600091829190602082016060803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061189257611892612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061190057611900612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061196e5761196e612bbb565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000082166004820152602481018690527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a579190612bea565b506040517f38ed173900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906338ed173990611ad59088908890879030904290600401612c0c565b6000604051808303816000875af1158015611af4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b3a9190810190612c98565b905080600181518110611b4f57611b4f612bbb565b6020026020010151925050505b92915050565b600060085484611b729190612ab6565b93506000611b856402540be40086612b6d565b9050611b966402540be40082612b56565b905060008111611c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e7420697320746f6f20736d616c6c20666f72206272696467696e67604482015260640161079a565b611c0c8186612ba8565b6008556040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015611cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce89190612bea565b506007546040517f0f5287b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201849052600260448301527351eb65012ca5ceb07320c497f4151ac207fea4e0606483018190526000608484015263ffffffff841660a484015292917f000000000000000000000000000000000000000000000000000000000000000090911690630f5287b09060c4016020604051808303816000875af1158015611ddb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dff9190612d49565b50611e0b816001612ab6565b6007556040518381527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16907f40a3e75fd2efcf074c9c0520c5367ccb3093ded646970bdc8c3108748e5d3f0e9060200160405180910390a250349695505050505050565b604080516002808252606082018352600092839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611ede57611ede612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611f4c57611f4c612bbb565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a0604051808303816000875af1158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120199190612d92565b50505091505060008113612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f7261636c6520707269636520697320696e636f727265637400000000000000604482015260640161079a565b60006402540be400606161209d8885612b56565b6120a79190612b56565b6120b19190612b6d565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af115801561216b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218f9190612bea565b506040517f38ed173900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906338ed17399061220d908a908690899030904290600401612c0c565b6000604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526122729190810190612c98565b90508060018151811061228757612287612bbb565b602002602001015194505050505092915050565b6040517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152848116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c9c65396906044016020604051808303816000875af1158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a9190612de4565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529193507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015612434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124589190612bea565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905286169063095ea7b3906044016020604051808303816000875af11580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125129190612bea565b506040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528681166024830152604482018690526064820185905260006084830181905260a48301523060c48301524260e48301527f0000000000000000000000000000000000000000000000000000000000000000169063e8e3370090610104016060604051808303816000875af11580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190612e01565b939793965092945050505050565b836000826126328587612b56565b61263c9190612b6d565b73ffffffffffffffffffffffffffffffffffffffff87811660009081526004602081815260408084203380865292528084209390935591517fa9059cbb000000000000000000000000000000000000000000000000000000008152908101919091526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156126d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f79190612bea565b5060405181815273ffffffffffffffffffffffffffffffffffffffff87169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a3505050505050565b61122080612e3083390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461277c57600080fd5b50565b60006020828403121561279157600080fd5b813561279c8161275a565b9392505050565b6000602082840312156127b557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612832576128326127bc565b604052919050565b60008067ffffffffffffffff841115612855576128556127bc565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001612888816127eb565b91505082815283838301111561289d57600080fd5b828260208301376000602084830101529392505050565b6000806000606084860312156128c957600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156128ee57600080fd5b8401601f810186136128ff57600080fd5b61290e8682356020840161283a565b9150509250925092565b600082601f83011261292957600080fd5b61279c8383356020850161283a565b60008060006060848603121561294d57600080fd5b833567ffffffffffffffff81111561296457600080fd5b61297086828701612918565b935050602084013567ffffffffffffffff81111561298d57600080fd5b61299986828701612918565b93969395505050506040919091013590565b600080604083850312156129be57600080fd5b82356129c98161275a565b946020939093013593505050565b600080604083850312156129ea57600080fd5b82356129f58161275a565b91506020830135612a058161275a565b809150509250929050565b6000815180845260005b81811015612a3657602081850181015186830182015201612a1a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061279c6020830184612a10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611b5c57611b5c612a87565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612afa57612afa612a87565b5060010190565b600060208284031215612b1357600080fd5b5051919050565b608081526000612b2d6080830187612a10565b8281036020840152612b3f8187612a10565b60ff95909516604084015250506060015292915050565b8082028115828204841417611b5c57611b5c612a87565b600082612ba3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115611b5c57611b5c612a87565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612bfc57600080fd5b8151801515811461279c57600080fd5b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b81811015612c6b57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612c37565b505073ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b600060208284031215612caa57600080fd5b815167ffffffffffffffff811115612cc157600080fd5b8201601f81018413612cd257600080fd5b805167ffffffffffffffff811115612cec57612cec6127bc565b8060051b612cfc602082016127eb565b91825260208184018101929081019087841115612d1857600080fd5b6020850194505b83851015612d3e57845180835260209586019590935090910190612d1f565b979650505050505050565b600060208284031215612d5b57600080fd5b815167ffffffffffffffff8116811461279c57600080fd5b805169ffffffffffffffffffff81168114612d8d57600080fd5b919050565b600080600080600060a08688031215612daa57600080fd5b612db386612d73565b60208701516040880151606089015192975090955093509150612dd860808701612d73565b90509295509295909350565b600060208284031215612df657600080fd5b815161279c8161275a565b600080600060608486031215612e1657600080fd5b505081516020830151604090930151909492935091905056fe60e060405234801561001057600080fd5b5060405161122038038061122083398101604081905261002f91610238565b838383600061003e848261034a565b50600161004b838261034a565b5060ff81166080524660a05261005f61007a565b60c05250610071915033905082610114565b505050506104a4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516100ac9190610408565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254610126919061047d565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101a657600080fd5b81516001600160401b038111156101bf576101bf61017f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ed576101ed61017f565b60405281815283820160200185101561020557600080fd5b60005b8281101561022457602081860181015183830182015201610208565b506000918101602001919091529392505050565b6000806000806080858703121561024e57600080fd5b84516001600160401b0381111561026457600080fd5b61027087828801610195565b602087015190955090506001600160401b0381111561028e57600080fd5b61029a87828801610195565b935050604085015160ff811681146102b157600080fd5b6060959095015193969295505050565b600181811c908216806102d557607f821691505b6020821081036102f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561034557806000526020600020601f840160051c810160208510156103225750805b601f840160051c820191505b81811015610342576000815560010161032e565b50505b505050565b81516001600160401b038111156103635761036361017f565b6103778161037184546102c1565b846102fb565b6020601f8211600181146103ab57600083156103935750848201515b600019600385901b1c1916600184901b178455610342565b600084815260208120601f198516915b828110156103db57878501518255602094850194600190920191016103bb565b50848210156103f95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000808354610416816102c1565b60018216801561042d576001811461044257610472565b60ff1983168652811515820286019350610472565b86600052602060002060005b8381101561046a5781548882015260019091019060200161044e565b505081860193505b509195945050505050565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051610d4d6104d360003960006104c30152600061048e015260006101540152610d4d6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b41146101e5578063a9059cbb146101ed578063d505accf14610200578063dd62ed3e1461021357600080fd5b806342966c681461019057806370a08231146101a55780637ecebe00146101c557600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109d7565b60405180910390f35b610115610110366004610a6c565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610a96565b610346565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61048a565b6101a361019e366004610ad3565b6104e5565b005b61012e6101b3366004610aec565b60036020526000908152604090205481565b61012e6101d3366004610aec565b60056020526000908152604090205481565b6100ec6104f2565b6101156101fb366004610a6c565b6104ff565b6101a361020e366004610b0e565b610584565b61012e610221366004610b81565b600460209081526000928352604080842090915290825290205481565b6000805461024b90610bb4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610bb4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103da576103a88382610c07565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040f908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104779087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104c0576104bb6108a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104ef3382610942565b50565b6001805461024b90610bb4565b33600090815260036020526040812080548391908390610520908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105ff61048a565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610751573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107cc57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105ea565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108da9190610c41565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290610977908490610c07565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081526000825180602084015260005b81811015610a0557602081860181015160408684010152016109e8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6757600080fd5b919050565b60008060408385031215610a7f57600080fd5b610a8883610a43565b946020939093013593505050565b600080600060608486031215610aab57600080fd5b610ab484610a43565b9250610ac260208501610a43565b929592945050506040919091013590565b600060208284031215610ae557600080fd5b5035919050565b600060208284031215610afe57600080fd5b610b0782610a43565b9392505050565b600080600080600080600060e0888a031215610b2957600080fd5b610b3288610a43565b9650610b4060208901610a43565b95506040880135945060608801359350608088013560ff81168114610b6457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610b9457600080fd5b610b9d83610a43565b9150610bab60208401610a43565b90509250929050565b600181811c90821680610bc857607f821691505b602082108103610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b81810381811115610340577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000808354818160011c90506001821680610c5d57607f821691505b602082108103610c94577f4e487b710000000000000000000000000000000000000000000000000000000084526022600452602484fd5b808015610ca85760018114610cdb57610d0b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610d0b565b60008881526020902060005b84811015610d0357815489820152600190910190602001610ce7565b505082870194505b5092969550505050505056fea26469706673582212203b134facc9dcc6995fc2e3d1fc78c6d13107692c1f18cfe3450a552767346f3e64736f6c634300081c0033a26469706673582212206d8c7cb8388268b6220e5dd3f3062b2de470fb1b40c0e4836a8f536423cc679364736f6c634300081c0033", + "bytecode": "0x61012060405260016002556001600355600160045534801561002057600080fd5b50604051614e21380380614e2183398101604081905261003f91610084565b6001600160a01b0394851660a05292841660c05290831660e052909116610100526080526100e2565b80516001600160a01b038116811461007f57600080fd5b919050565b600080600080600060a0868803121561009c57600080fd5b6100a586610068565b94506100b360208701610068565b93506100c160408701610068565b92506100cf60608701610068565b9150608086015190509295509295909350565b60805160a05160c05160e05161010051614c8b6101966000396000818161044e01528181611237015261232a0152600081816104cc015281816122f40152818161241e01528181612a2a01528181612c3a01528181612ce401528181612da20152612f0b01526000818161059c015281816112660152818161226001528181612286015281816129300152818161297d01526129a5015260006101d801526000818161050001526115a60152614c8b6000f3fe6080604052600436106101c15760003560e01c806372f2a36b116100f7578063b72124e311610095578063e0be161711610064578063e0be161714610577578063e1758bd81461058a578063f74e481b146105be578063ffa1ad74146105de57600080fd5b8063b72124e314610535578063be399e2b1461054c578063d1b0c28814610535578063dab346ff1461056257600080fd5b8063a1634b14116100d1578063a1634b1414610486578063a2a7eb95146104ba578063a5ae390c146104ee578063b1bd3c951461052257600080fd5b806372f2a36b14610407578063803551a91461043c5780638e499bcf1461047057600080fd5b806340b67a9b116101645780635122c4091161013e5780635122c4091461038c57806358c0f729146103aa57806367608ad0146103ca5780636882a888146103df57600080fd5b806340b67a9b14610315578063466ffbce146103425780634c69a6c91461036257600080fd5b80631ecfd535116101a05780631ecfd5351461028c5780632e0f2625146102b957806335f9f8d9146102e05780633d0cc375146102f557600080fd5b806231d115146101c657806309ca5a11146102245780630df400c614610246575b600080fd5b3480156101d257600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023057600080fd5b5061024461023f366004613158565b610634565b005b34801561025257600080fd5b5061027e610261366004613193565b600660209081526000928352604080842090915290825290205481565b60405190815260200161021b565b34801561029857600080fd5b5061027e6102a73660046131c3565b60076020526000908152604090205481565b3480156102c557600080fd5b506102ce601281565b60405160ff909116815260200161021b565b3480156102ec57600080fd5b5061027e603281565b34801561030157600080fd5b506102446103103660046131c3565b610888565b34801561032157600080fd5b5061027e6103303660046131c3565b60086020526000908152604090205481565b34801561034e57600080fd5b506101fa61035d366004613158565b610ddb565b34801561036e57600080fd5b5061037861271081565b60405162ffffff909116815260200161021b565b34801561039857600080fd5b5061027e69d3c21bcecceda100000081565b3480156103b657600080fd5b506102446103c5366004613265565b610e12565b3480156103d657600080fd5b506102446110e3565b3480156103eb57600080fd5b506103f461130f565b60405160029190910b815260200161021b565b34801561041357600080fd5b50610427610422366004613158565b61133b565b60405161021b9998979695949392919061338c565b34801561044857600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047c57600080fd5b5061027e60005481565b34801561049257600080fd5b506103f47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b3480156104c657600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fa57600080fd5b5061027e7f000000000000000000000000000000000000000000000000000000000000000081565b61024461053036600461347c565b611496565b34801561054157600080fd5b5061027e6201518081565b34801561055857600080fd5b5061027e60015481565b34801561056e57600080fd5b5061027e600a81565b610244610585366004613158565b6118ed565b34801561059657600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ca57600080fd5b506102446105d93660046131c3565b611b7a565b3480156105ea57600080fd5b506106276040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161021b91906134ef565b6003546001146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b600260035560008181526005602052604090206004810154610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161069c565b60058101541561078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161069c565b6201518081600401546107a29190613531565b42101561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c65617368207965740000000000000000000000000000604482015260640161069c565b60038101546000606461081f600a8461354a565b6108299190613561565b90506000610837828461359c565b9050816001600082825461084b9190613531565b909155505033600090815260086020526040812080549161086b836135af565b919050555061087c85858386611f71565b50506001600355505050565b6003546001146108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b600260035573ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290610949906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610975906135e7565b80156109c25780601f10610997576101008083540402835291602001916109c2565b820191906000526020600020905b8154815290600101906020018083116109a557829003601f168201915b505050505081526020016001820180546109db906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a07906135e7565b8015610a545780601f10610a2957610100808354040283529160200191610a54565b820191906000526020600020905b815481529060010190602001808311610a3757829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161069c565b620151808160a00151610b2c9190613531565b4211610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c65617368000000000000000000000000000000000000606482015260840161069c565b336000908152600860205260408120805491610bd5836135af565b90915550506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152839060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d919061363a565b905060008111610cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f7267650000000000000000000000000000000000000000000000000000000000606482015260840161069c565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c6890602401600060405180830381600087803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610dc791815260200190565b60405180910390a250506001600355505050565b60098181548110610deb57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b6002600355336000908152600860205260408120805491610e9e836135af565b919050555060005b81518110156110da57600060076000848481518110610ec757610ec7613653565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006005600083815260200190815260200160002060405180610120016040529081600082018054610f3d906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f69906135e7565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b50505050508152602001600182018054610fcf906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffb906135e7565b80156110485780601f1061101d57610100808354040283529160200191611048565b820191906000526020600020905b81548152906001019060200180831161102b57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e09091015284519091506110d0908590859081106110b8576110b8613653565b60200260200101518260e00151836101000151612255565b5050600101610ea6565b50506001600355565b60035460011461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b60026003556004546000906111665760015461116a565b6001545b9050600081116111d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e640000000000000000000000000000000000604482015260640161069c565b600060018190553381526008602052604081208054916111f5836135af565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d39190613682565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6113387ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276606136a4565b81565b600560205260009081526040902080548190611356906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611382906135e7565b80156113cf5780601f106113a4576101008083540402835291602001916113cf565b820191906000526020600020905b8154815290600101906020018083116113b257829003601f168201915b5050505050908060010180546113e4906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611410906135e7565b801561145d5780601f106114325761010080835404028352916020019161145d565b820191906000526020600020905b81548152906001019060200180831161144057829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b600354600114611502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b6002600355825115801590611518575060008251115b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015260840161069c565b7f0000000000000000000000000000000000000000000000000000000000000000341015611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e00000000000000000000000000000000606482015260840161069c565b69d3c21bcecceda10000008110156116c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d657400604482015260640161069c565b6fffffffffffffffffffffffffffffffff8110611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f77000000604482015260640161069c565b60025460408051610120810182528581526020808201869052818301859052346060830152426080830152600060a0830181905260c0830181905260e083018190526101008301819052848152600590915291909120815181906117a59082613731565b50602082015160018201906117ba9082613731565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560008481526020938452818120338252845281812034905591909252908120805491611860836135af565b909155506118719050816001613531565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b600354600114611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b6002600355346119eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f00000000000000000000000000000000000000606482015260840161069c565b60008181526005602052604090206004810154611a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161069c565b600581015415611ad0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161069c565b6003810154611adf3482613531565b600383018190556000848152600660209081526040808320338452909152812080549293503492909190611b14908490613531565b9091555050336000908152600860205260408120805491611b34836135af565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b600260035573ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611c3b906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c67906135e7565b8015611cb45780601f10611c8957610100808354040283529160200191611cb4565b820191906000526020600020905b815481529060010190602001808311611c9757829003601f168201915b50505050508152602001600182018054611ccd906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf9906135e7565b8015611d465780601f10611d1b57610100808354040283529160200191611d46565b820191906000526020600020905b815481529060010190602001808311611d2957829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161069c565b620151808160a00151611e1e9190613531565b421115611ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c65617368000000000000000000000000000000606482015260840161069c565b600082815260066020908152604080832033845290915290205480611f2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e00000000000000000000000000604482015260640161069c565b336000908152600860205260408120805491611f49836135af565b9190505550611f6384848460c00151848660600151612612565b505060016003555050565b50565b6000606460328560020154611f86919061354a565b611f909190613561565b90506000818560020154611fa4919061359c565b905060006120d087876000018054611fbb906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe7906135e7565b80156120345780601f1061200957610100808354040283529160200191612034565b820191906000526020600020905b81548152906001019060200180831161201757829003601f168201915b5050505050886001018054612048906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054612074906135e7565b80156120c15780601f10612096576101008083540402835291602001916120c1565b820191906000526020600020905b8154815290600101906020018083116120a457829003601f168201915b5050505050896002015461273b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604081208990559091508080612108848988612912565b4260058d015560068c0188905560078c01839055919450925090508015612158576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87161790555460009081558a815260066020908152604080832033845290915290205480156121f3576121f3858c88848c612612565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b6000808261228457847f00000000000000000000000000000000000000000000000000000000000000006122a7565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b9060840160006040518083038186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093506000925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303816000875af1158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061384a565b91509150600082118061249d5750600081115b612503576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c6500000000000000000000000000604482015260640161069c565b600080871561251657508290508161251c565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c6890602401600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b5050505081600160008282546125ae9190613531565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b60008161261f848661354a565b6126299190613561565b60008681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303816000875af11580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190613682565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590526000908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090506000604051806020016127ea9061314b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526128329088908890601290899060200161386e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261286e92916020016138aa565b6040516020818303038152906040529050818151826020016000f5925073ffffffffffffffffffffffffffffffffffffffff8316612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c65640000000000000000000000604482015260640161069c565b5050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16101561296f575060015b600080600080846129a357897f0000000000000000000000000000000000000000000000000000000000000000898b6129c8565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b935093509350935060008282670de0b6b3a76400006129e7919061354a565b6129f19190613561565b90506000633b9aca00612a0383613099565b612a1a906c0100000000000000000000000061354a565b612a249190613561565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab791906138d9565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015288811660248301526127106044830152919250600091831690631698ee8290606401602060405180830381865afa158015612b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5d91906138d9565b905073ffffffffffffffffffffffffffffffffffffffff811615612bdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f00000000000000604482015260640161069c565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303816000875af1158015612c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca791906138d9565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303816000875af1158015612d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d649190613682565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303816000875af1158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e9190613682565b5060006040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660612ec5906136a4565b60020b815260200188815260200187815260200160008152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b8152600401612f6291906138f6565b6080604051808303816000875af1158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa591906139e1565b929e506fffffffffffffffffffffffffffffffff9091169c509750955060008a612fda57868f612fd5919061359c565b612fe6565b878f612fe6919061359c565b905080156130065780600160008282546130009190613531565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f6790602401600060405180830381600087803b15801561306e57600080fd5b505af1158015613082573d6000803e3d6000fd5b505050505050505050505050505093509350939050565b60b5817101000000000000000000000000000000000081106130c05760409190911b9060801c5b690100000000000000000081106130dc5760209190911b9060401c5b6501000000000081106130f45760109190911b9060201c5b6301000000811061310a5760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b61122080613a3683390190565b60006020828403121561316a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611f6e57600080fd5b600080604083850312156131a657600080fd5b8235915060208301356131b881613171565b809150509250929050565b6000602082840312156131d557600080fd5b81356131e081613171565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561325d5761325d6131e7565b604052919050565b60006020828403121561327757600080fd5b813567ffffffffffffffff81111561328e57600080fd5b8201601f8101841361329f57600080fd5b803567ffffffffffffffff8111156132b9576132b96131e7565b8060051b6132c960208201613216565b918252602081840181019290810190878411156132e557600080fd5b6020850194505b83851015613313578435925061330183613171565b828252602094850194909101906132ec565b979650505050505050565b60005b83811015613339578181015183820152602001613321565b50506000910152565b6000815180845261335a81602086016020860161331e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b610120815260006133a161012083018c613342565b82810360208401526133b3818c613342565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b600082601f8301126133ff57600080fd5b813567ffffffffffffffff811115613419576134196131e7565b61344a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613216565b81815284602083860101111561345f57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561349157600080fd5b833567ffffffffffffffff8111156134a857600080fd5b6134b4868287016133ee565b935050602084013567ffffffffffffffff8111156134d157600080fd5b6134dd868287016133ee565b93969395505050506040919091013590565b6020815260006131e06020830184613342565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561354457613544613502565b92915050565b808202811582820484141761354457613544613502565b600082613597577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8181038181111561354457613544613502565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135e0576135e0613502565b5060010190565b600181811c908216806135fb57607f821691505b602082108103613634577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60006020828403121561364c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561369457600080fd5b815180151581146131e057600080fd5b60008160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000081036136d9576136d9613502565b60000392915050565b601f82111561372c57806000526020600020601f840160051c810160208510156137095750805b601f840160051c820191505b818110156137295760008155600101613715565b50505b505050565b815167ffffffffffffffff81111561374b5761374b6131e7565b61375f8161375984546135e7565b846136e2565b6020601f8211600181146137b1576000831561377b5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613729565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156137ff57878501518255602094850194600190920191016137df565b508482101561383b57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b6000806040838503121561385d57600080fd5b505080516020909101519092909150565b6080815260006138816080830187613342565b82810360208401526138938187613342565b60ff95909516604084015250506060015292915050565b600083516138bc81846020880161331e565b8351908301906138d081836020880161331e565b01949350505050565b6000602082840312156138eb57600080fd5b81516131e081613171565b815173ffffffffffffffffffffffffffffffffffffffff1681526101608101602083015161393c602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151613953604084018262ffffff169052565b506060830151613968606084018260020b9052565b50608083015161397d608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516139d161012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b600080600080608085870312156139f757600080fd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114613a1f57600080fd5b604086015160609096015194979096509250505056fe60e060405234801561001057600080fd5b5060405161122038038061122083398101604081905261002f91610238565b838383600061003e848261034a565b50600161004b838261034a565b5060ff81166080524660a05261005f61007a565b60c05250610071915033905082610114565b505050506104a4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516100ac9190610408565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254610126919061047d565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101a657600080fd5b81516001600160401b038111156101bf576101bf61017f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ed576101ed61017f565b60405281815283820160200185101561020557600080fd5b60005b8281101561022457602081860181015183830182015201610208565b506000918101602001919091529392505050565b6000806000806080858703121561024e57600080fd5b84516001600160401b0381111561026457600080fd5b61027087828801610195565b602087015190955090506001600160401b0381111561028e57600080fd5b61029a87828801610195565b935050604085015160ff811681146102b157600080fd5b6060959095015193969295505050565b600181811c908216806102d557607f821691505b6020821081036102f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561034557806000526020600020601f840160051c810160208510156103225750805b601f840160051c820191505b81811015610342576000815560010161032e565b50505b505050565b81516001600160401b038111156103635761036361017f565b6103778161037184546102c1565b846102fb565b6020601f8211600181146103ab57600083156103935750848201515b600019600385901b1c1916600184901b178455610342565b600084815260208120601f198516915b828110156103db57878501518255602094850194600190920191016103bb565b50848210156103f95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000808354610416816102c1565b60018216801561042d576001811461044257610472565b60ff1983168652811515820286019350610472565b86600052602060002060005b8381101561046a5781548882015260019091019060200161044e565b505081860193505b509195945050505050565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051610d4d6104d360003960006104c30152600061048e015260006101540152610d4d6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b41146101e5578063a9059cbb146101ed578063d505accf14610200578063dd62ed3e1461021357600080fd5b806342966c681461019057806370a08231146101a55780637ecebe00146101c557600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109d7565b60405180910390f35b610115610110366004610a6c565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610a96565b610346565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61048a565b6101a361019e366004610ad3565b6104e5565b005b61012e6101b3366004610aec565b60036020526000908152604090205481565b61012e6101d3366004610aec565b60056020526000908152604090205481565b6100ec6104f2565b6101156101fb366004610a6c565b6104ff565b6101a361020e366004610b0e565b610584565b61012e610221366004610b81565b600460209081526000928352604080842090915290825290205481565b6000805461024b90610bb4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610bb4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103da576103a88382610c07565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040f908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104779087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104c0576104bb6108a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104ef3382610942565b50565b6001805461024b90610bb4565b33600090815260036020526040812080548391908390610520908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105ff61048a565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610751573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107cc57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105ea565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108da9190610c41565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290610977908490610c07565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081526000825180602084015260005b81811015610a0557602081860181015160408684010152016109e8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6757600080fd5b919050565b60008060408385031215610a7f57600080fd5b610a8883610a43565b946020939093013593505050565b600080600060608486031215610aab57600080fd5b610ab484610a43565b9250610ac260208501610a43565b929592945050506040919091013590565b600060208284031215610ae557600080fd5b5035919050565b600060208284031215610afe57600080fd5b610b0782610a43565b9392505050565b600080600080600080600060e0888a031215610b2957600080fd5b610b3288610a43565b9650610b4060208901610a43565b95506040880135945060608801359350608088013560ff81168114610b6457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610b9457600080fd5b610b9d83610a43565b9150610bab60208401610a43565b90509250929050565b600181811c90821680610bc857607f821691505b602082108103610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b81810381811115610340577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000808354818160011c90506001821680610c5d57607f821691505b602082108103610c94577f4e487b710000000000000000000000000000000000000000000000000000000084526022600452602484fd5b808015610ca85760018114610cdb57610d0b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610d0b565b60008881526020902060005b84811015610d0357815489820152600190910190602001610ce7565b505082870194505b5092969550505050505056fea26469706673582212203b134facc9dcc6995fc2e3d1fc78c6d13107692c1f18cfe3450a552767346f3e64736f6c634300081c0033a26469706673582212207530c377070b1b8345ae0f8659c2afb607f620bd1f3ad3b6c77417a659737dec64736f6c634300081c0033", + "deployedBytecode": "0x6080604052600436106101c15760003560e01c806372f2a36b116100f7578063b72124e311610095578063e0be161711610064578063e0be161714610577578063e1758bd81461058a578063f74e481b146105be578063ffa1ad74146105de57600080fd5b8063b72124e314610535578063be399e2b1461054c578063d1b0c28814610535578063dab346ff1461056257600080fd5b8063a1634b14116100d1578063a1634b1414610486578063a2a7eb95146104ba578063a5ae390c146104ee578063b1bd3c951461052257600080fd5b806372f2a36b14610407578063803551a91461043c5780638e499bcf1461047057600080fd5b806340b67a9b116101645780635122c4091161013e5780635122c4091461038c57806358c0f729146103aa57806367608ad0146103ca5780636882a888146103df57600080fd5b806340b67a9b14610315578063466ffbce146103425780634c69a6c91461036257600080fd5b80631ecfd535116101a05780631ecfd5351461028c5780632e0f2625146102b957806335f9f8d9146102e05780633d0cc375146102f557600080fd5b806231d115146101c657806309ca5a11146102245780630df400c614610246575b600080fd5b3480156101d257600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023057600080fd5b5061024461023f366004613158565b610634565b005b34801561025257600080fd5b5061027e610261366004613193565b600660209081526000928352604080842090915290825290205481565b60405190815260200161021b565b34801561029857600080fd5b5061027e6102a73660046131c3565b60076020526000908152604090205481565b3480156102c557600080fd5b506102ce601281565b60405160ff909116815260200161021b565b3480156102ec57600080fd5b5061027e603281565b34801561030157600080fd5b506102446103103660046131c3565b610888565b34801561032157600080fd5b5061027e6103303660046131c3565b60086020526000908152604090205481565b34801561034e57600080fd5b506101fa61035d366004613158565b610ddb565b34801561036e57600080fd5b5061037861271081565b60405162ffffff909116815260200161021b565b34801561039857600080fd5b5061027e69d3c21bcecceda100000081565b3480156103b657600080fd5b506102446103c5366004613265565b610e12565b3480156103d657600080fd5b506102446110e3565b3480156103eb57600080fd5b506103f461130f565b60405160029190910b815260200161021b565b34801561041357600080fd5b50610427610422366004613158565b61133b565b60405161021b9998979695949392919061338c565b34801561044857600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047c57600080fd5b5061027e60005481565b34801561049257600080fd5b506103f47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b3480156104c657600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fa57600080fd5b5061027e7f000000000000000000000000000000000000000000000000000000000000000081565b61024461053036600461347c565b611496565b34801561054157600080fd5b5061027e6201518081565b34801561055857600080fd5b5061027e60015481565b34801561056e57600080fd5b5061027e600a81565b610244610585366004613158565b6118ed565b34801561059657600080fd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ca57600080fd5b506102446105d93660046131c3565b611b7a565b3480156105ea57600080fd5b506106276040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161021b91906134ef565b6003546001146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b600260035560008181526005602052604090206004810154610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161069c565b60058101541561078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161069c565b6201518081600401546107a29190613531565b42101561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c65617368207965740000000000000000000000000000604482015260640161069c565b60038101546000606461081f600a8461354a565b6108299190613561565b90506000610837828461359c565b9050816001600082825461084b9190613531565b909155505033600090815260086020526040812080549161086b836135af565b919050555061087c85858386611f71565b50506001600355505050565b6003546001146108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b600260035573ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290610949906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610975906135e7565b80156109c25780601f10610997576101008083540402835291602001916109c2565b820191906000526020600020905b8154815290600101906020018083116109a557829003601f168201915b505050505081526020016001820180546109db906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a07906135e7565b8015610a545780601f10610a2957610100808354040283529160200191610a54565b820191906000526020600020905b815481529060010190602001808311610a3757829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161069c565b620151808160a00151610b2c9190613531565b4211610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c65617368000000000000000000000000000000000000606482015260840161069c565b336000908152600860205260408120805491610bd5836135af565b90915550506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152839060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d919061363a565b905060008111610cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f7267650000000000000000000000000000000000000000000000000000000000606482015260840161069c565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c6890602401600060405180830381600087803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610dc791815260200190565b60405180910390a250506001600355505050565b60098181548110610deb57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b6002600355336000908152600860205260408120805491610e9e836135af565b919050555060005b81518110156110da57600060076000848481518110610ec757610ec7613653565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006005600083815260200190815260200160002060405180610120016040529081600082018054610f3d906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f69906135e7565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b50505050508152602001600182018054610fcf906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffb906135e7565b80156110485780601f1061101d57610100808354040283529160200191611048565b820191906000526020600020905b81548152906001019060200180831161102b57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e09091015284519091506110d0908590859081106110b8576110b8613653565b60200260200101518260e00151836101000151612255565b5050600101610ea6565b50506001600355565b60035460011461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b60026003556004546000906111665760015461116a565b6001545b9050600081116111d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e640000000000000000000000000000000000604482015260640161069c565b600060018190553381526008602052604081208054916111f5836135af565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d39190613682565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6113387ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276606136a4565b81565b600560205260009081526040902080548190611356906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611382906135e7565b80156113cf5780601f106113a4576101008083540402835291602001916113cf565b820191906000526020600020905b8154815290600101906020018083116113b257829003601f168201915b5050505050908060010180546113e4906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611410906135e7565b801561145d5780601f106114325761010080835404028352916020019161145d565b820191906000526020600020905b81548152906001019060200180831161144057829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b600354600114611502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b6002600355825115801590611518575060008251115b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015260840161069c565b7f0000000000000000000000000000000000000000000000000000000000000000341015611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e00000000000000000000000000000000606482015260840161069c565b69d3c21bcecceda10000008110156116c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d657400604482015260640161069c565b6fffffffffffffffffffffffffffffffff8110611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f77000000604482015260640161069c565b60025460408051610120810182528581526020808201869052818301859052346060830152426080830152600060a0830181905260c0830181905260e083018190526101008301819052848152600590915291909120815181906117a59082613731565b50602082015160018201906117ba9082613731565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560008481526020938452818120338252845281812034905591909252908120805491611860836135af565b909155506118719050816001613531565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b600354600114611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b6002600355346119eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f00000000000000000000000000000000000000606482015260840161069c565b60008181526005602052604090206004810154611a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e65640000000000000000000000604482015260640161069c565b600581015415611ad0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c65617368656400000000000000000000604482015260640161069c565b6003810154611adf3482613531565b600383018190556000848152600660209081526040808320338452909152812080549293503492909190611b14908490613531565b9091555050336000908152600860205260408120805491611b34836135af565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e637920677561726400000000000000000000000000000000604482015260640161069c565b600260035573ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611c3b906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c67906135e7565b8015611cb45780601f10611c8957610100808354040283529160200191611cb4565b820191906000526020600020905b815481529060010190602001808311611c9757829003601f168201915b50505050508152602001600182018054611ccd906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf9906135e7565b8015611d465780601f10611d1b57610100808354040283529160200191611d46565b820191906000526020600020905b815481529060010190602001808311611d2957829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c6561736865640000000000000000000000000000604482015260640161069c565b620151808160a00151611e1e9190613531565b421115611ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c65617368000000000000000000000000000000606482015260840161069c565b600082815260066020908152604080832033845290915290205480611f2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e00000000000000000000000000604482015260640161069c565b336000908152600860205260408120805491611f49836135af565b9190505550611f6384848460c00151848660600151612612565b505060016003555050565b50565b6000606460328560020154611f86919061354a565b611f909190613561565b90506000818560020154611fa4919061359c565b905060006120d087876000018054611fbb906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe7906135e7565b80156120345780601f1061200957610100808354040283529160200191612034565b820191906000526020600020905b81548152906001019060200180831161201757829003601f168201915b5050505050886001018054612048906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054612074906135e7565b80156120c15780601f10612096576101008083540402835291602001916120c1565b820191906000526020600020905b8154815290600101906020018083116120a457829003601f168201915b5050505050896002015461273b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604081208990559091508080612108848988612912565b4260058d015560068c0188905560078c01839055919450925090508015612158576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87161790555460009081558a815260066020908152604080832033845290915290205480156121f3576121f3858c88848c612612565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b6000808261228457847f00000000000000000000000000000000000000000000000000000000000000006122a7565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b9060840160006040518083038186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093506000925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303816000875af1158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061384a565b91509150600082118061249d5750600081115b612503576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c6500000000000000000000000000604482015260640161069c565b600080871561251657508290508161251c565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c6890602401600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b5050505081600160008282546125ae9190613531565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b60008161261f848661354a565b6126299190613561565b60008681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303816000875af11580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190613682565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590526000908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090506000604051806020016127ea9061314b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526128329088908890601290899060200161386e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261286e92916020016138aa565b6040516020818303038152906040529050818151826020016000f5925073ffffffffffffffffffffffffffffffffffffffff8316612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c65640000000000000000000000604482015260640161069c565b5050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16101561296f575060015b600080600080846129a357897f0000000000000000000000000000000000000000000000000000000000000000898b6129c8565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b935093509350935060008282670de0b6b3a76400006129e7919061354a565b6129f19190613561565b90506000633b9aca00612a0383613099565b612a1a906c0100000000000000000000000061354a565b612a249190613561565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab791906138d9565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015288811660248301526127106044830152919250600091831690631698ee8290606401602060405180830381865afa158015612b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5d91906138d9565b905073ffffffffffffffffffffffffffffffffffffffff811615612bdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f00000000000000604482015260640161069c565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303816000875af1158015612c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca791906138d9565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303816000875af1158015612d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d649190613682565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303816000875af1158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e9190613682565b5060006040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660612ec5906136a4565b60020b815260200188815260200187815260200160008152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b8152600401612f6291906138f6565b6080604051808303816000875af1158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa591906139e1565b929e506fffffffffffffffffffffffffffffffff9091169c509750955060008a612fda57868f612fd5919061359c565b612fe6565b878f612fe6919061359c565b905080156130065780600160008282546130009190613531565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f6790602401600060405180830381600087803b15801561306e57600080fd5b505af1158015613082573d6000803e3d6000fd5b505050505050505050505050505093509350939050565b60b5817101000000000000000000000000000000000081106130c05760409190911b9060801c5b690100000000000000000081106130dc5760209190911b9060401c5b6501000000000081106130f45760109190911b9060201c5b6301000000811061310a5760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b61122080613a3683390190565b60006020828403121561316a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611f6e57600080fd5b600080604083850312156131a657600080fd5b8235915060208301356131b881613171565b809150509250929050565b6000602082840312156131d557600080fd5b81356131e081613171565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561325d5761325d6131e7565b604052919050565b60006020828403121561327757600080fd5b813567ffffffffffffffff81111561328e57600080fd5b8201601f8101841361329f57600080fd5b803567ffffffffffffffff8111156132b9576132b96131e7565b8060051b6132c960208201613216565b918252602081840181019290810190878411156132e557600080fd5b6020850194505b83851015613313578435925061330183613171565b828252602094850194909101906132ec565b979650505050505050565b60005b83811015613339578181015183820152602001613321565b50506000910152565b6000815180845261335a81602086016020860161331e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b610120815260006133a161012083018c613342565b82810360208401526133b3818c613342565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b600082601f8301126133ff57600080fd5b813567ffffffffffffffff811115613419576134196131e7565b61344a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613216565b81815284602083860101111561345f57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561349157600080fd5b833567ffffffffffffffff8111156134a857600080fd5b6134b4868287016133ee565b935050602084013567ffffffffffffffff8111156134d157600080fd5b6134dd868287016133ee565b93969395505050506040919091013590565b6020815260006131e06020830184613342565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561354457613544613502565b92915050565b808202811582820484141761354457613544613502565b600082613597577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8181038181111561354457613544613502565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135e0576135e0613502565b5060010190565b600181811c908216806135fb57607f821691505b602082108103613634577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60006020828403121561364c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561369457600080fd5b815180151581146131e057600080fd5b60008160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000081036136d9576136d9613502565b60000392915050565b601f82111561372c57806000526020600020601f840160051c810160208510156137095750805b601f840160051c820191505b818110156137295760008155600101613715565b50505b505050565b815167ffffffffffffffff81111561374b5761374b6131e7565b61375f8161375984546135e7565b846136e2565b6020601f8211600181146137b1576000831561377b5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613729565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156137ff57878501518255602094850194600190920191016137df565b508482101561383b57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b6000806040838503121561385d57600080fd5b505080516020909101519092909150565b6080815260006138816080830187613342565b82810360208401526138938187613342565b60ff95909516604084015250506060015292915050565b600083516138bc81846020880161331e565b8351908301906138d081836020880161331e565b01949350505050565b6000602082840312156138eb57600080fd5b81516131e081613171565b815173ffffffffffffffffffffffffffffffffffffffff1681526101608101602083015161393c602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151613953604084018262ffffff169052565b506060830151613968606084018260020b9052565b50608083015161397d608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516139d161012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b600080600080608085870312156139f757600080fd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114613a1f57600080fd5b604086015160609096015194979096509250505056fe60e060405234801561001057600080fd5b5060405161122038038061122083398101604081905261002f91610238565b838383600061003e848261034a565b50600161004b838261034a565b5060ff81166080524660a05261005f61007a565b60c05250610071915033905082610114565b505050506104a4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516100ac9190610408565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254610126919061047d565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101a657600080fd5b81516001600160401b038111156101bf576101bf61017f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ed576101ed61017f565b60405281815283820160200185101561020557600080fd5b60005b8281101561022457602081860181015183830182015201610208565b506000918101602001919091529392505050565b6000806000806080858703121561024e57600080fd5b84516001600160401b0381111561026457600080fd5b61027087828801610195565b602087015190955090506001600160401b0381111561028e57600080fd5b61029a87828801610195565b935050604085015160ff811681146102b157600080fd5b6060959095015193969295505050565b600181811c908216806102d557607f821691505b6020821081036102f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561034557806000526020600020601f840160051c810160208510156103225750805b601f840160051c820191505b81811015610342576000815560010161032e565b50505b505050565b81516001600160401b038111156103635761036361017f565b6103778161037184546102c1565b846102fb565b6020601f8211600181146103ab57600083156103935750848201515b600019600385901b1c1916600184901b178455610342565b600084815260208120601f198516915b828110156103db57878501518255602094850194600190920191016103bb565b50848210156103f95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000808354610416816102c1565b60018216801561042d576001811461044257610472565b60ff1983168652811515820286019350610472565b86600052602060002060005b8381101561046a5781548882015260019091019060200161044e565b505081860193505b509195945050505050565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051610d4d6104d360003960006104c30152600061048e015260006101540152610d4d6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b41146101e5578063a9059cbb146101ed578063d505accf14610200578063dd62ed3e1461021357600080fd5b806342966c681461019057806370a08231146101a55780637ecebe00146101c557600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109d7565b60405180910390f35b610115610110366004610a6c565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610a96565b610346565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61048a565b6101a361019e366004610ad3565b6104e5565b005b61012e6101b3366004610aec565b60036020526000908152604090205481565b61012e6101d3366004610aec565b60056020526000908152604090205481565b6100ec6104f2565b6101156101fb366004610a6c565b6104ff565b6101a361020e366004610b0e565b610584565b61012e610221366004610b81565b600460209081526000928352604080842090915290825290205481565b6000805461024b90610bb4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610bb4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103da576103a88382610c07565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040f908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104779087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104c0576104bb6108a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104ef3382610942565b50565b6001805461024b90610bb4565b33600090815260036020526040812080548391908390610520908490610c07565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105ff61048a565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610751573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107cc57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105ea565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108da9190610c41565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290610977908490610c07565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081526000825180602084015260005b81811015610a0557602081860181015160408684010152016109e8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6757600080fd5b919050565b60008060408385031215610a7f57600080fd5b610a8883610a43565b946020939093013593505050565b600080600060608486031215610aab57600080fd5b610ab484610a43565b9250610ac260208501610a43565b929592945050506040919091013590565b600060208284031215610ae557600080fd5b5035919050565b600060208284031215610afe57600080fd5b610b0782610a43565b9392505050565b600080600080600080600060e0888a031215610b2957600080fd5b610b3288610a43565b9650610b4060208901610a43565b95506040880135945060608801359350608088013560ff81168114610b6457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610b9457600080fd5b610b9d83610a43565b9150610bab60208401610a43565b90509250929050565b600181811c90821680610bc857607f821691505b602082108103610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b81810381811115610340577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000808354818160011c90506001821680610c5d57607f821691505b602082108103610c94577f4e487b710000000000000000000000000000000000000000000000000000000084526022600452602484fd5b808015610ca85760018114610cdb57610d0b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610d0b565b60008881526020902060005b84811015610d0357815489820152600190910190602001610ce7565b505082870194505b5092969550505050505056fea26469706673582212203b134facc9dcc6995fc2e3d1fc78c6d13107692c1f18cfe3450a552767346f3e64736f6c634300081c0033a26469706673582212207530c377070b1b8345ae0f8659c2afb607f620bd1f3ad3b6c77417a659737dec64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.28/MemeEthereum.json b/abis/0.8.28/MemeEthereum.json new file mode 100644 index 0000000..8e35e8b --- /dev/null +++ b/abis/0.8.28/MemeEthereum.json @@ -0,0 +1,673 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MemeEthereum", + "sourceName": "contracts/MemeEthereum.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_olas", + "type": "address" + }, + { + "internalType": "address", + "name": "_nativeToken", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniV3PositionManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_buyBackBurner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_minNativeTokenValue", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "hearter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allocation", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "feeCollector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nativeTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "memeTokenAmount", + "type": "uint256" + } + ], + "name": "FeesCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "hearter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Hearted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "OLASJourneyToAscendance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Purged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "summoner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Summoned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "unleasher", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "memeToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "name": "Unleashed", + "type": "event" + }, + { + "inputs": [], + "name": "COLLECT_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DECIMALS", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FEE_TIER", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LP_PERCENTAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TICK", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_TICK", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_TOTAL_SUPPLY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OLAS_BURN_PERCENTAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "UNLEASH_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "buyBackBurner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "collectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "memeToken", + "type": "address" + } + ], + "name": "collectThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + } + ], + "name": "heartThisMeme", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAccountActivities", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "memeHearters", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "memeSummons", + "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nativeTokenContributed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "summonTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unleashTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "heartersAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isNativeFirst", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "memeTokenNonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "memeTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minNativeTokenValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "olas", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "memeToken", + "type": "address" + } + ], + "name": "purgeThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduleForAscendance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduledForAscendance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "summonThisMeme", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "uniV3PositionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "memeNonce", + "type": "uint256" + } + ], + "name": "unleashThisMeme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61012060405260016002556001600355600160045534801561001f575f5ffd5b50604051614d1b380380614d1b83398101604081905261003e91610082565b6001600160a01b0394851660a05292841660c05290831660e052909116610100526080526100dc565b80516001600160a01b038116811461007d575f5ffd5b919050565b5f5f5f5f5f60a08688031215610096575f5ffd5b61009f86610067565b94506100ad60208701610067565b93506100bb60408701610067565b92506100c960608701610067565b9150608086015190509295509295909350565b60805160a05160c05160e05161010051614b8b6101905f395f8181610432015281816111f4015261234401525f81816104ac0152818161230e0152818161243301528181612a2401528181612c2f01528181612cd601528181612d910152612ef401525f81816105770152818161122301528181611f180152818161227a015281816122a00152818161292f0152818161297a01526129a201525f6101ce01525f81816104df015261155a0152614b8b5ff3fe6080604052600436106101b9575f3560e01c806372f2a36b116100f2578063b72124e311610092578063e0be161711610062578063e0be161714610553578063e1758bd814610566578063f74e481b14610599578063ffa1ad74146105b8575f5ffd5b8063b72124e314610514578063be399e2b1461052a578063d1b0c28814610514578063dab346ff1461053f575f5ffd5b8063a1634b14116100cd578063a1634b1414610468578063a2a7eb951461049b578063a5ae390c146104ce578063b1bd3c9514610501575f5ffd5b806372f2a36b146103ed578063803551a9146104215780638e499bcf14610454575f5ffd5b806340b67a9b1161015d5780635122c409116101385780635122c4091461037657806358c0f7291461039357806367608ad0146103b25780636882a888146103c6575f5ffd5b806340b67a9b14610303578063466ffbce1461032e5780634c69a6c91461034d575f5ffd5b80631ecfd535116101985780631ecfd5351461027f5780632e0f2625146102aa57806335f9f8d9146102d05780633d0cc375146102e4575f5ffd5b806231d115146101bd57806309ca5a111461021a5780630df400c61461023b575b5f5ffd5b3480156101c8575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610225575f5ffd5b50610239610234366004613137565b61060d565b005b348015610246575f5ffd5b50610271610255366004613172565b600660209081525f928352604080842090915290825290205481565b604051908152602001610211565b34801561028a575f5ffd5b506102716102993660046131a0565b60076020525f908152604090205481565b3480156102b5575f5ffd5b506102be601281565b60405160ff9091168152602001610211565b3480156102db575f5ffd5b50610271603281565b3480156102ef575f5ffd5b506102396102fe3660046131a0565b610865565b34801561030e575f5ffd5b5061027161031d3660046131a0565b60086020525f908152604090205481565b348015610339575f5ffd5b506101f0610348366004613137565b610da9565b348015610358575f5ffd5b5061036261271081565b60405162ffffff9091168152602001610211565b348015610381575f5ffd5b5061027169d3c21bcecceda100000081565b34801561039e575f5ffd5b506102396103ad36600461323e565b610dde565b3480156103bd575f5ffd5b506102396110a3565b3480156103d1575f5ffd5b506103da6112c9565b60405160029190910b8152602001610211565b3480156103f8575f5ffd5b5061040c610407366004613137565b6112f5565b6040516102119998979695949392919061333e565b34801561042c575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561045f575f5ffd5b506102715f5481565b348015610473575f5ffd5b506103da7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b3480156104a6575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d9575f5ffd5b506102717f000000000000000000000000000000000000000000000000000000000000000081565b61023961050f366004613429565b61144b565b34801561051f575f5ffd5b506102716201518081565b348015610535575f5ffd5b5061027160015481565b34801561054a575f5ffd5b50610271600a81565b610239610561366004613137565b61189f565b348015610571575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a4575f5ffd5b506102396105b33660046131a0565b611b29565b3480156105c3575f5ffd5b506106006040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102119190613497565b60035460011461067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546106fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b62015180816004015461077a91906134d6565b4210156107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610675565b60038101546107f181611f16565b5f60646107ff600a846134ef565b6108099190613506565b90505f610816828461353e565b90508160015f82825461082991906134d6565b9091555050335f90815260086020526040812080549161084883613551565b919050555061085985858386611f96565b50506001600355505050565b6003546001146108d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f9081526007602090815260408083205480845260059092528083208151610120810190925280549293928290829061092590613588565b80601f016020809104026020016040519081016040528092919081815260200182805461095190613588565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b505050505081526020016001820180546109b590613588565b80601f01602080910402602001604051908101604052809291908181526020018280546109e190613588565b8015610a2c5780601f10610a0357610100808354040283529160200191610a2c565b820191905f5260205f20905b815481529060010190602001808311610a0f57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151610b0491906134d6565b4211610b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610675565b335f908152600860205260408120805491610bac83613551565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610c1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4191906135d9565b90505f8111610cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610675565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610d37575f5ffd5b505af1158015610d49573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610d9591815260200190565b60405180910390a250506001600355505050565b60098181548110610db8575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b6002600355335f908152600860205260408120805491610e6983613551565b909155505f90505b815181101561109a575f60075f848481518110610e9057610e906135f0565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610f0190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2d90613588565b8015610f785780601f10610f4f57610100808354040283529160200191610f78565b820191905f5260205f20905b815481529060010190602001808311610f5b57829003601f168201915b50505050508152602001600182018054610f9190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd90613588565b80156110085780601f10610fdf57610100808354040283529160200191611008565b820191905f5260205f20905b815481529060010190602001808311610feb57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061109090859085908110611078576110786135f0565b60200260200101518260e00151836101000151612270565b5050600101610e71565b50506001600355565b60035460011461110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003556004545f9061112557600154611129565b6001545b90505f8111611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610675565b5f60018190553381526008602052604081208054916111b283613551565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128d919061361d565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6112f27ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061363c565b81565b60056020525f908152604090208054819061130f90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461133b90613588565b80156113865780601f1061135d57610100808354040283529160200191611386565b820191905f5260205f20905b81548152906001019060200180831161136957829003601f168201915b50505050509080600101805461139b90613588565b80601f01602080910402602001604051908101604052809291908181526020018280546113c790613588565b80156114125780601f106113e957610100808354040283529160200191611412565b820191905f5260205f20905b8154815290600101906020018083116113f557829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b6003546001146114b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003558251158015906114cc57505f8251115b611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b7f0000000000000000000000000000000000000000000000000000000000000000341015611608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610675565b69d3c21bcecceda100000081101561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610675565b6fffffffffffffffffffffffffffffffff81106116f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610675565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061175890826136c4565b506020820151600182019061176d90826136c4565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f848152602093845281812033825284528181203490559190925290812080549161181283613551565b9091555061182390508160016134d6565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b60035460011461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003553461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610675565b5f8181526005602052604090206004810154611a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b6003810154611a9034826134d6565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611ac49084906134d6565b9091555050335f908152600860205260408120805491611ae383613551565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611be990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1590613588565b8015611c605780601f10611c3757610100808354040283529160200191611c60565b820191905f5260205f20905b815481529060010190602001808311611c4357829003601f168201915b50505050508152602001600182018054611c7990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca590613588565b8015611cf05780601f10611cc757610100808354040283529160200191611cf0565b820191905f5260205f20905b815481529060010190602001808311611cd357829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151611dc891906134d6565b421115611e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610675565b5f82815260066020908152604080832033845290915290205480611ed7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610675565b335f908152600860205260408120805491611ef183613551565b9190505550611f0b84848460c0015184866060015161261b565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611f7c575f5ffd5b505af1158015611f8e573d5f5f3e3d5ffd5b505050505050565b5f606460328560020154611faa91906134ef565b611fb49190613506565b90505f818560020154611fc7919061353e565b90505f6120ed87875f018054611fdc90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613588565b80156120535780601f1061202a57610100808354040283529160200191612053565b820191905f5260205f20905b81548152906001019060200180831161203657829003601f168201915b505050505088600101805461206790613588565b80601f016020809104026020016040519081016040528092919081815260200182805461209390613588565b80156120de5780601f106120b5576101008083540402835291602001916120de565b820191905f5260205f20905b8154815290600101906020018083116120c157829003601f168201915b5050505050896002015461273f565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526007602052604081208990559091508080612124848988612913565b4260058d015560068c0188905560078c01839055919450925090508015612174576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a8152600660209081526040808320338452909152902054801561220e5761220e858c88848c61261b565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261229e57847f00000000000000000000000000000000000000000000000000000000000000006122c1565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612386575f5ffd5b505afa158015612398573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af1158015612478573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249c91906137db565b915091505f8211806124ad57505f81115b612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610675565b5f5f871561252557508290508161252b565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612590575f5ffd5b505af11580156125a2573d5f5f3e3d5ffd5b505050508160015f8282546125b791906134d6565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f8161262784866134ef565b6126319190613506565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af11580156126c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e8919061361d565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f604051806020016127ec9061312a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052612834908890889060129089906020016137fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612870929160200161384f565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610675565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16101561296e575060015b5f5f5f5f846129a057897f0000000000000000000000000000000000000000000000000000000000000000898b6129c5565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a76400006129e391906134ef565b6129ed9190613506565b90505f633b9aca006129fe83613078565b612a15906c010000000000000000000000006134ef565b612a1f9190613506565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aaf919061386b565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612b2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b52919061386b565b905073ffffffffffffffffffffffffffffffffffffffff811615612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610675565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612c75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c99919061386b565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612d2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d53919061361d565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612de6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0a919061361d565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660612eb09061363c565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b8152600401612f4b9190613886565b6080604051808303815f875af1158015612f67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f8b9190613971565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a612fbf57868f612fba919061353e565b612fcb565b878f612fcb919061353e565b90508015612fea578060015f828254612fe491906134d6565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b15801561304f575f5ffd5b505af1158015613061573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b60b58171010000000000000000000000000000000000811061309f5760409190911b9060801c5b690100000000000000000081106130bb5760209190911b9060401c5b6501000000000081106130d35760109190911b9060201c5b630100000081106130e95760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b611194806139c283390190565b5f60208284031215613147575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461316f575f5ffd5b50565b5f5f60408385031215613183575f5ffd5b8235915060208301356131958161314e565b809150509250929050565b5f602082840312156131b0575f5ffd5b81356131bb8161314e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613236576132366131c2565b604052919050565b5f6020828403121561324e575f5ffd5b813567ffffffffffffffff811115613264575f5ffd5b8201601f81018413613274575f5ffd5b803567ffffffffffffffff81111561328e5761328e6131c2565b8060051b61329e602082016131ef565b918252602081840181019290810190878411156132b9575f5ffd5b6020850194505b838510156132e757843592506132d58361314e565b828252602094850194909101906132c0565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61335261012083018c6132f2565b8281036020840152613364818c6132f2565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f8301126133ae575f5ffd5b813567ffffffffffffffff8111156133c8576133c86131c2565b6133f960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131ef565b81815284602083860101111561340d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561343b575f5ffd5b833567ffffffffffffffff811115613451575f5ffd5b61345d8682870161339f565b935050602084013567ffffffffffffffff811115613479575f5ffd5b6134858682870161339f565b93969395505050506040919091013590565b602081525f6131bb60208301846132f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156134e9576134e96134a9565b92915050565b80820281158282048414176134e9576134e96134a9565b5f82613539577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156134e9576134e96134a9565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613581576135816134a9565b5060010190565b600181811c9082168061359c57607f821691505b6020821081036135d3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156135e9575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561362d575f5ffd5b815180151581146131bb575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103613670576136706134a9565b5f0392915050565b601f8211156136bf57805f5260205f20601f840160051c8101602085101561369d5750805b601f840160051c820191505b818110156136bc575f81556001016136a9565b50505b505050565b815167ffffffffffffffff8111156136de576136de6131c2565b6136f2816136ec8454613588565b84613678565b6020601f821160018114613743575f831561370d5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556136bc565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156137905787850151825560209485019460019092019101613770565b50848210156137cc57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156137ec575f5ffd5b505080516020909101519092909150565b608081525f61380f60808301876132f2565b828103602084015261382181876132f2565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f61386361385d8386613838565b84613838565b949350505050565b5f6020828403121561387b575f5ffd5b81516131bb8161314e565b815173ffffffffffffffffffffffffffffffffffffffff168152610160810160208301516138cc602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516138e3604084018262ffffff169052565b5060608301516138f8606084018260020b9052565b50608083015161390d608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161396161012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613984575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff811681146139ab575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a264697066735822122060005ca427dc4ec27018406e14921f0daf63d292b75907767da8e92e724a1c4664736f6c634300081c0033", + "deployedBytecode": "0x6080604052600436106101b9575f3560e01c806372f2a36b116100f2578063b72124e311610092578063e0be161711610062578063e0be161714610553578063e1758bd814610566578063f74e481b14610599578063ffa1ad74146105b8575f5ffd5b8063b72124e314610514578063be399e2b1461052a578063d1b0c28814610514578063dab346ff1461053f575f5ffd5b8063a1634b14116100cd578063a1634b1414610468578063a2a7eb951461049b578063a5ae390c146104ce578063b1bd3c9514610501575f5ffd5b806372f2a36b146103ed578063803551a9146104215780638e499bcf14610454575f5ffd5b806340b67a9b1161015d5780635122c409116101385780635122c4091461037657806358c0f7291461039357806367608ad0146103b25780636882a888146103c6575f5ffd5b806340b67a9b14610303578063466ffbce1461032e5780634c69a6c91461034d575f5ffd5b80631ecfd535116101985780631ecfd5351461027f5780632e0f2625146102aa57806335f9f8d9146102d05780633d0cc375146102e4575f5ffd5b806231d115146101bd57806309ca5a111461021a5780630df400c61461023b575b5f5ffd5b3480156101c8575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610225575f5ffd5b50610239610234366004613137565b61060d565b005b348015610246575f5ffd5b50610271610255366004613172565b600660209081525f928352604080842090915290825290205481565b604051908152602001610211565b34801561028a575f5ffd5b506102716102993660046131a0565b60076020525f908152604090205481565b3480156102b5575f5ffd5b506102be601281565b60405160ff9091168152602001610211565b3480156102db575f5ffd5b50610271603281565b3480156102ef575f5ffd5b506102396102fe3660046131a0565b610865565b34801561030e575f5ffd5b5061027161031d3660046131a0565b60086020525f908152604090205481565b348015610339575f5ffd5b506101f0610348366004613137565b610da9565b348015610358575f5ffd5b5061036261271081565b60405162ffffff9091168152602001610211565b348015610381575f5ffd5b5061027169d3c21bcecceda100000081565b34801561039e575f5ffd5b506102396103ad36600461323e565b610dde565b3480156103bd575f5ffd5b506102396110a3565b3480156103d1575f5ffd5b506103da6112c9565b60405160029190910b8152602001610211565b3480156103f8575f5ffd5b5061040c610407366004613137565b6112f5565b6040516102119998979695949392919061333e565b34801561042c575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561045f575f5ffd5b506102715f5481565b348015610473575f5ffd5b506103da7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b3480156104a6575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d9575f5ffd5b506102717f000000000000000000000000000000000000000000000000000000000000000081565b61023961050f366004613429565b61144b565b34801561051f575f5ffd5b506102716201518081565b348015610535575f5ffd5b5061027160015481565b34801561054a575f5ffd5b50610271600a81565b610239610561366004613137565b61189f565b348015610571575f5ffd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a4575f5ffd5b506102396105b33660046131a0565b611b29565b3480156105c3575f5ffd5b506106006040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102119190613497565b60035460011461067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546106fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b62015180816004015461077a91906134d6565b4210156107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610675565b60038101546107f181611f16565b5f60646107ff600a846134ef565b6108099190613506565b90505f610816828461353e565b90508160015f82825461082991906134d6565b9091555050335f90815260086020526040812080549161084883613551565b919050555061085985858386611f96565b50506001600355505050565b6003546001146108d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f9081526007602090815260408083205480845260059092528083208151610120810190925280549293928290829061092590613588565b80601f016020809104026020016040519081016040528092919081815260200182805461095190613588565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b505050505081526020016001820180546109b590613588565b80601f01602080910402602001604051908101604052809291908181526020018280546109e190613588565b8015610a2c5780601f10610a0357610100808354040283529160200191610a2c565b820191905f5260205f20905b815481529060010190602001808311610a0f57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151610b0491906134d6565b4211610b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610675565b335f908152600860205260408120805491610bac83613551565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610c1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4191906135d9565b90505f8111610cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610675565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610d37575f5ffd5b505af1158015610d49573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610d9591815260200190565b60405180910390a250506001600355505050565b60098181548110610db8575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b6002600355335f908152600860205260408120805491610e6983613551565b909155505f90505b815181101561109a575f60075f848481518110610e9057610e906135f0565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610f0190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2d90613588565b8015610f785780601f10610f4f57610100808354040283529160200191610f78565b820191905f5260205f20905b815481529060010190602001808311610f5b57829003601f168201915b50505050508152602001600182018054610f9190613588565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd90613588565b80156110085780601f10610fdf57610100808354040283529160200191611008565b820191905f5260205f20905b815481529060010190602001808311610feb57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061109090859085908110611078576110786135f0565b60200260200101518260e00151836101000151612270565b5050600101610e71565b50506001600355565b60035460011461110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003556004545f9061112557600154611129565b6001545b90505f8111611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610675565b5f60018190553381526008602052604081208054916111b283613551565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128d919061361d565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6112f27ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061363c565b81565b60056020525f908152604090208054819061130f90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461133b90613588565b80156113865780601f1061135d57610100808354040283529160200191611386565b820191905f5260205f20905b81548152906001019060200180831161136957829003601f168201915b50505050509080600101805461139b90613588565b80601f01602080910402602001604051908101604052809291908181526020018280546113c790613588565b80156114125780601f106113e957610100808354040283529160200191611412565b820191905f5260205f20905b8154815290600101906020018083116113f557829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b6003546001146114b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003558251158015906114cc57505f8251115b611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b7f0000000000000000000000000000000000000000000000000000000000000000341015611608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610675565b69d3c21bcecceda100000081101561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610675565b6fffffffffffffffffffffffffffffffff81106116f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610675565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061175890826136c4565b506020820151600182019061176d90826136c4565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f848152602093845281812033825284528181203490559190925290812080549161181283613551565b9091555061182390508160016134d6565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b60035460011461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b60026003553461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610675565b5f8181526005602052604090206004810154611a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610675565b600581015415611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610675565b6003810154611a9034826134d6565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611ac49084906134d6565b9091555050335f908152600860205260408120805491611ae383613551565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610675565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611be990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1590613588565b8015611c605780601f10611c3757610100808354040283529160200191611c60565b820191905f5260205f20905b815481529060010190602001808311611c4357829003601f168201915b50505050508152602001600182018054611c7990613588565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca590613588565b8015611cf05780601f10611cc757610100808354040283529160200191611cf0565b820191905f5260205f20905b815481529060010190602001808311611cd357829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610675565b620151808160a00151611dc891906134d6565b421115611e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610675565b5f82815260066020908152604080832033845290915290205480611ed7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610675565b335f908152600860205260408120805491611ef183613551565b9190505550611f0b84848460c0015184866060015161261b565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611f7c575f5ffd5b505af1158015611f8e573d5f5f3e3d5ffd5b505050505050565b5f606460328560020154611faa91906134ef565b611fb49190613506565b90505f818560020154611fc7919061353e565b90505f6120ed87875f018054611fdc90613588565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613588565b80156120535780601f1061202a57610100808354040283529160200191612053565b820191905f5260205f20905b81548152906001019060200180831161203657829003601f168201915b505050505088600101805461206790613588565b80601f016020809104026020016040519081016040528092919081815260200182805461209390613588565b80156120de5780601f106120b5576101008083540402835291602001916120de565b820191905f5260205f20905b8154815290600101906020018083116120c157829003601f168201915b5050505050896002015461273f565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526007602052604081208990559091508080612124848988612913565b4260058d015560068c0188905560078c01839055919450925090508015612174576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a8152600660209081526040808320338452909152902054801561220e5761220e858c88848c61261b565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261229e57847f00000000000000000000000000000000000000000000000000000000000000006122c1565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612386575f5ffd5b505afa158015612398573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af1158015612478573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249c91906137db565b915091505f8211806124ad57505f81115b612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610675565b5f5f871561252557508290508161252b565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612590575f5ffd5b505af11580156125a2573d5f5f3e3d5ffd5b505050508160015f8282546125b791906134d6565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f8161262784866134ef565b6126319190613506565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af11580156126c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e8919061361d565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f604051806020016127ec9061312a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052612834908890889060129089906020016137fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612870929160200161384f565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610675565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16101561296e575060015b5f5f5f5f846129a057897f0000000000000000000000000000000000000000000000000000000000000000898b6129c5565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a76400006129e391906134ef565b6129ed9190613506565b90505f633b9aca006129fe83613078565b612a15906c010000000000000000000000006134ef565b612a1f9190613506565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aaf919061386b565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612b2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b52919061386b565b905073ffffffffffffffffffffffffffffffffffffffff811615612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610675565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612c75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c99919061386b565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612d2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d53919061361d565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612de6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0a919061361d565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660612eb09061363c565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b8152600401612f4b9190613886565b6080604051808303815f875af1158015612f67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f8b9190613971565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a612fbf57868f612fba919061353e565b612fcb565b878f612fcb919061353e565b90508015612fea578060015f828254612fe491906134d6565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b15801561304f575f5ffd5b505af1158015613061573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b60b58171010000000000000000000000000000000000811061309f5760409190911b9060801c5b690100000000000000000081106130bb5760209190911b9060401c5b6501000000000081106130d35760109190911b9060201c5b630100000081106130e95760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b611194806139c283390190565b5f60208284031215613147575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461316f575f5ffd5b50565b5f5f60408385031215613183575f5ffd5b8235915060208301356131958161314e565b809150509250929050565b5f602082840312156131b0575f5ffd5b81356131bb8161314e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613236576132366131c2565b604052919050565b5f6020828403121561324e575f5ffd5b813567ffffffffffffffff811115613264575f5ffd5b8201601f81018413613274575f5ffd5b803567ffffffffffffffff81111561328e5761328e6131c2565b8060051b61329e602082016131ef565b918252602081840181019290810190878411156132b9575f5ffd5b6020850194505b838510156132e757843592506132d58361314e565b828252602094850194909101906132c0565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61335261012083018c6132f2565b8281036020840152613364818c6132f2565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f8301126133ae575f5ffd5b813567ffffffffffffffff8111156133c8576133c86131c2565b6133f960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131ef565b81815284602083860101111561340d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561343b575f5ffd5b833567ffffffffffffffff811115613451575f5ffd5b61345d8682870161339f565b935050602084013567ffffffffffffffff811115613479575f5ffd5b6134858682870161339f565b93969395505050506040919091013590565b602081525f6131bb60208301846132f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156134e9576134e96134a9565b92915050565b80820281158282048414176134e9576134e96134a9565b5f82613539577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156134e9576134e96134a9565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613581576135816134a9565b5060010190565b600181811c9082168061359c57607f821691505b6020821081036135d3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156135e9575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561362d575f5ffd5b815180151581146131bb575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103613670576136706134a9565b5f0392915050565b601f8211156136bf57805f5260205f20601f840160051c8101602085101561369d5750805b601f840160051c820191505b818110156136bc575f81556001016136a9565b50505b505050565b815167ffffffffffffffff8111156136de576136de6131c2565b6136f2816136ec8454613588565b84613678565b6020601f821160018114613743575f831561370d5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556136bc565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156137905787850151825560209485019460019092019101613770565b50848210156137cc57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156137ec575f5ffd5b505080516020909101519092909150565b608081525f61380f60808301876132f2565b828103602084015261382181876132f2565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f61386361385d8386613838565b84613838565b949350505050565b5f6020828403121561387b575f5ffd5b81516131bb8161314e565b815173ffffffffffffffffffffffffffffffffffffffff168152610160810160208301516138cc602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516138e3604084018262ffffff169052565b5060608301516138f8606084018260020b9052565b50608083015161390d608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161396161012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613984575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff811681146139ab575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a264697066735822122060005ca427dc4ec27018406e14921f0daf63d292b75907767da8e92e724a1c4664736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/UniswapPriceOracle.json b/abis/0.8.28/UniswapPriceOracle.json new file mode 100644 index 0000000..ca31078 --- /dev/null +++ b/abis/0.8.28/UniswapPriceOracle.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "UniswapPriceOracle", + "sourceName": "contracts/oracles/UniswapPriceOracle.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_nativeToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_maxSlippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_pair", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "direction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pair", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updatePrice", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "validatePrice", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60e060405234801561000f575f5ffd5b506040516109b43803806109b483398101604081905261002e916100e6565b6001600160a01b038116608081905260a083905260408051630dfe168160e01b815290515f9291630dfe16819160048083019260209291908290030181865afa15801561007d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a1919061011f565b9050836001600160a01b0316816001600160a01b0316146100c257600160c0525b5050505061013f565b80516001600160a01b03811681146100e1575f5ffd5b919050565b5f5f5f606084860312156100f8575f5ffd5b610101846100cb565b925060208401519150610116604085016100cb565b90509250925092565b5f6020828403121561012f575f5ffd5b610138826100cb565b9392505050565b60805160a05160c05161081561019f5f395f818160a0015281816101e30152818161059e01526105dd01525f818160db015261015401525f818161010a0152818161020a0152818161029e0152818161032f01526104ab01526108155ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638c04166f1161004d5780638c04166f146100d657806398d5fdca146100fd578063a8aa1b3114610105575f5ffd5b8063136d6f2114610073578063645539ed1461009b578063673a7e28146100d0575b5f5ffd5b610086610081366004610653565b610151565b60405190151581526020015b60405180910390f35b6100c27f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610092565b5f610086565b6100c27f000000000000000000000000000000000000000000000000000000000000000081565b6100c2610485565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610092565b5f7f00000000000000000000000000000000000000000000000000000000000000008211156101e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536c697070616765206f766572666c6f77000000000000000000000000000000604482015260640160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000005f0361029c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610295919061066a565b905061032c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610305573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610329919061066a565b90505b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610396573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ba91906106a3565b63ffffffff16925050508042036103d457505f9392505050565b5f6103df824261071c565b90505f6103ea610485565b90505f6103f78383610735565b610401908661074c565b90505f8361040f878461071c565b610419919061078c565b90505f81841161044e578161042e858261071c565b61043f90662386f26fc10000610735565b610449919061078c565b610474565b81610459818661071c565b61046a90662386f26fc10000610735565b610474919061078c565b989098111598975050505050505050565b6040805160028082526060820183525f92839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610512573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053691906106a3565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff16915050825f8151811061056f5761056f61079f565b60200260200101836001815181106105895761058961079f565b60200260200101828152508281525050505f817f0000000000000000000000000000000000000000000000000000000000000000815181106105cd576105cd61079f565b602002602001015190505f8260027f00000000000000000000000000000000000000000000000000000000000000006001610608919061074c565b61061291906107cc565b815181106106225761062261079f565b602002602001015190508181670de0b6b3a76400006106419190610735565b61064b919061078c565b935050505090565b5f60208284031215610663575f5ffd5b5035919050565b5f6020828403121561067a575f5ffd5b5051919050565b80516dffffffffffffffffffffffffffff8116811461069e575f5ffd5b919050565b5f5f5f606084860312156106b5575f5ffd5b6106be84610681565b92506106cc60208501610681565b9150604084015163ffffffff811681146106e4575f5ffd5b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561072f5761072f6106ef565b92915050565b808202811582820484141761072f5761072f6106ef565b8082018082111561072f5761072f6106ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261079a5761079a61075f565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f826107da576107da61075f565b50069056fea2646970667358221220df486158e785bdfc07ffb403ff2f6541c7d685bf910d087c58fd60566e216e4164736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638c04166f1161004d5780638c04166f146100d657806398d5fdca146100fd578063a8aa1b3114610105575f5ffd5b8063136d6f2114610073578063645539ed1461009b578063673a7e28146100d0575b5f5ffd5b610086610081366004610653565b610151565b60405190151581526020015b60405180910390f35b6100c27f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610092565b5f610086565b6100c27f000000000000000000000000000000000000000000000000000000000000000081565b6100c2610485565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610092565b5f7f00000000000000000000000000000000000000000000000000000000000000008211156101e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536c697070616765206f766572666c6f77000000000000000000000000000000604482015260640160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000005f0361029c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610295919061066a565b905061032c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610305573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610329919061066a565b90505b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610396573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ba91906106a3565b63ffffffff16925050508042036103d457505f9392505050565b5f6103df824261071c565b90505f6103ea610485565b90505f6103f78383610735565b610401908661074c565b90505f8361040f878461071c565b610419919061078c565b90505f81841161044e578161042e858261071c565b61043f90662386f26fc10000610735565b610449919061078c565b610474565b81610459818661071c565b61046a90662386f26fc10000610735565b610474919061078c565b989098111598975050505050505050565b6040805160028082526060820183525f92839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610512573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053691906106a3565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff16915050825f8151811061056f5761056f61079f565b60200260200101836001815181106105895761058961079f565b60200260200101828152508281525050505f817f0000000000000000000000000000000000000000000000000000000000000000815181106105cd576105cd61079f565b602002602001015190505f8260027f00000000000000000000000000000000000000000000000000000000000000006001610608919061074c565b61061291906107cc565b815181106106225761062261079f565b602002602001015190508181670de0b6b3a76400006106419190610735565b61064b919061078c565b935050505090565b5f60208284031215610663575f5ffd5b5035919050565b5f6020828403121561067a575f5ffd5b5051919050565b80516dffffffffffffffffffffffffffff8116811461069e575f5ffd5b919050565b5f5f5f606084860312156106b5575f5ffd5b6106be84610681565b92506106cc60208501610681565b9150604084015163ffffffff811681146106e4575f5ffd5b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561072f5761072f6106ef565b92915050565b808202811582820484141761072f5761072f6106ef565b8082018082111561072f5761072f6106ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261079a5761079a61075f565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f826107da576107da61075f565b50069056fea2646970667358221220df486158e785bdfc07ffb403ff2f6541c7d685bf910d087c58fd60566e216e4164736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.28/UniswapPriceOracleCelo.json b/abis/0.8.28/UniswapPriceOracleCelo.json new file mode 100644 index 0000000..69f9699 --- /dev/null +++ b/abis/0.8.28/UniswapPriceOracleCelo.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "UniswapPriceOracle", + "sourceName": "contracts/oracles/UniswapPriceOracle.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_nativeToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_maxSlippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_pair", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "direction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pair", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updatePrice", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "validatePrice", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60e060405234801561001057600080fd5b506040516109ef3803806109ef83398101604081905261002f916100eb565b6001600160a01b038116608081905260a083905260408051630dfe168160e01b8152905160009291630dfe16819160048083019260209291908290030181865afa158015610081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a59190610127565b9050836001600160a01b0316816001600160a01b0316146100c657600160c0525b50505050610149565b80516001600160a01b03811681146100e657600080fd5b919050565b60008060006060848603121561010057600080fd5b610109846100cf565b92506020840151915061011e604085016100cf565b90509250925092565b60006020828403121561013957600080fd5b610142826100cf565b9392505050565b60805160a05160c0516108416101ae6000396000818160a4015281816101ea015281816105b801526105f801526000818160e0015261015a01526000818161010f01528181610212015281816102a80152818161033c01526104c101526108416000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638c04166f116100505780638c04166f146100db57806398d5fdca14610102578063a8aa1b311461010a57600080fd5b8063136d6f2114610077578063645539ed1461009f578063673a7e28146100d4575b600080fd5b61008a61008536600461066e565b610156565b60405190151581526020015b60405180910390f35b6100c67f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610096565b600061008a565b6100c67f000000000000000000000000000000000000000000000000000000000000000081565b6100c661049a565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b60007f00000000000000000000000000000000000000000000000000000000000000008211156101e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536c697070616765206f766572666c6f77000000000000000000000000000000604482015260640160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006000036102a6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190610687565b9050610338565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103359190610687565b90505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156103a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c991906106c3565b63ffffffff16925050508042036103e4575060009392505050565b60006103f08242610742565b905060006103fc61049a565b9050600061040a838361075b565b6104149086610772565b90506000836104238784610742565b61042d91906107b4565b9050600081841161046357816104438582610742565b61045490662386f26fc1000061075b565b61045e91906107b4565b610489565b8161046e8186610742565b61047f90662386f26fc1000061075b565b61048991906107b4565b989098111598975050505050505050565b604080516002808252606082018352600092839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054e91906106c3565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505082600081518110610588576105886107c8565b60200260200101836001815181106105a2576105a26107c8565b60200260200101828152508281525050506000817f0000000000000000000000000000000000000000000000000000000000000000815181106105e7576105e76107c8565b6020026020010151905060008260027f000000000000000000000000000000000000000000000000000000000000000060016106239190610772565b61062d91906107f7565b8151811061063d5761063d6107c8565b602002602001015190508181670de0b6b3a764000061065c919061075b565b61066691906107b4565b935050505090565b60006020828403121561068057600080fd5b5035919050565b60006020828403121561069957600080fd5b5051919050565b80516dffffffffffffffffffffffffffff811681146106be57600080fd5b919050565b6000806000606084860312156106d857600080fd5b6106e1846106a0565b92506106ef602085016106a0565b9150604084015163ffffffff8116811461070857600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561075557610755610713565b92915050565b808202811582820484141761075557610755610713565b8082018082111561075557610755610713565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826107c3576107c3610785565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008261080657610806610785565b50069056fea2646970667358221220c50a735dd47b8192be41810e9e423ed323f149aa1dc955d0a38384c1c306dd4a64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638c04166f116100505780638c04166f146100db57806398d5fdca14610102578063a8aa1b311461010a57600080fd5b8063136d6f2114610077578063645539ed1461009f578063673a7e28146100d4575b600080fd5b61008a61008536600461066e565b610156565b60405190151581526020015b60405180910390f35b6100c67f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610096565b600061008a565b6100c67f000000000000000000000000000000000000000000000000000000000000000081565b6100c661049a565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b60007f00000000000000000000000000000000000000000000000000000000000000008211156101e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536c697070616765206f766572666c6f77000000000000000000000000000000604482015260640160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006000036102a6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190610687565b9050610338565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103359190610687565b90505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156103a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c991906106c3565b63ffffffff16925050508042036103e4575060009392505050565b60006103f08242610742565b905060006103fc61049a565b9050600061040a838361075b565b6104149086610772565b90506000836104238784610742565b61042d91906107b4565b9050600081841161046357816104438582610742565b61045490662386f26fc1000061075b565b61045e91906107b4565b610489565b8161046e8186610742565b61047f90662386f26fc1000061075b565b61048991906107b4565b989098111598975050505050505050565b604080516002808252606082018352600092839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054e91906106c3565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505082600081518110610588576105886107c8565b60200260200101836001815181106105a2576105a26107c8565b60200260200101828152508281525050506000817f0000000000000000000000000000000000000000000000000000000000000000815181106105e7576105e76107c8565b6020026020010151905060008260027f000000000000000000000000000000000000000000000000000000000000000060016106239190610772565b61062d91906107f7565b8151811061063d5761063d6107c8565b602002602001015190508181670de0b6b3a764000061065c919061075b565b61066691906107b4565b935050505090565b60006020828403121561068057600080fd5b5035919050565b60006020828403121561069957600080fd5b5051919050565b80516dffffffffffffffffffffffffffff811681146106be57600080fd5b919050565b6000806000606084860312156106d857600080fd5b6106e1846106a0565b92506106ef602085016106a0565b9150604084015163ffffffff8116811461070857600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561075557610755610713565b92915050565b808202811582820484141761075557610755610713565b8082018082111561075557610755610713565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826107c3576107c3610785565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008261080657610806610785565b50069056fea2646970667358221220c50a735dd47b8192be41810e9e423ed323f149aa1dc955d0a38384c1c306dd4a64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/bridging/erc20.json b/abis/bridging/erc20.json new file mode 100644 index 0000000..f240543 --- /dev/null +++ b/abis/bridging/erc20.json @@ -0,0 +1,249 @@ +[ + { + "inputs": [ + { "internalType": "address[]", "name": "holders", "type": "address[]" }, + { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "WhitelistedOperator", + "type": "event" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" } + ], + "name": "allowance", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "balanceOf", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "addedValue", "type": "uint256" } + ], + "name": "increaseAllowance", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "who", "type": "address" }], + "name": "isOperator", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bool", "name": "enabled", "type": "bool" } + ], + "name": "whitelistOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/abis/bridging/l1standardbridge.json b/abis/bridging/l1standardbridge.json new file mode 100644 index 0000000..d7fcc0d --- /dev/null +++ b/abis/bridging/l1standardbridge.json @@ -0,0 +1,521 @@ +[ + { + "inputs": [ + { + "internalType": "address payable", + "name": "_messenger", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "localToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "remoteToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ERC20BridgeFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "localToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "remoteToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ERC20BridgeInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ERC20DepositInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ERC20WithdrawalFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ETHBridgeFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ETHBridgeInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ETHDepositInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ETHWithdrawalFinalized", + "type": "event" + }, + { + "inputs": [], + "name": "MESSENGER", + "outputs": [ + { + "internalType": "contract CrossDomainMessenger", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OTHER_BRIDGE", + "outputs": [ + { + "internalType": "contract StandardBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_localToken", "type": "address" }, + { "internalType": "address", "name": "_remoteToken", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_localToken", "type": "address" }, + { "internalType": "address", "name": "_remoteToken", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeERC20To", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeETHTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l1Token", "type": "address" }, + { "internalType": "address", "name": "_l2Token", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "depositERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l1Token", "type": "address" }, + { "internalType": "address", "name": "_l2Token", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "depositERC20To", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "depositETHTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" } + ], + "name": "deposits", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_localToken", "type": "address" }, + { "internalType": "address", "name": "_remoteToken", "type": "address" }, + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeBridgeERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeBridgeETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l1Token", "type": "address" }, + { "internalType": "address", "name": "_l2Token", "type": "address" }, + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeERC20Withdrawal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeETHWithdrawal", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "l2TokenBridge", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messenger", + "outputs": [ + { + "internalType": "contract CrossDomainMessenger", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/abis/bridging/l2OutputOracle.json b/abis/bridging/l2OutputOracle.json new file mode 100644 index 0000000..26111bf --- /dev/null +++ b/abis/bridging/l2OutputOracle.json @@ -0,0 +1,295 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_submissionInterval", + "type": "uint256" + }, + { "internalType": "uint256", "name": "_l2BlockTime", "type": "uint256" }, + { + "internalType": "uint256", + "name": "_startingBlockNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_startingTimestamp", + "type": "uint256" + }, + { "internalType": "address", "name": "_proposer", "type": "address" }, + { "internalType": "address", "name": "_challenger", "type": "address" }, + { + "internalType": "uint256", + "name": "_finalizationPeriodSeconds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "outputRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2OutputIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2BlockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "l1Timestamp", + "type": "uint256" + } + ], + "name": "OutputProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "prevNextOutputIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "newNextOutputIndex", + "type": "uint256" + } + ], + "name": "OutputsDeleted", + "type": "event" + }, + { + "inputs": [], + "name": "CHALLENGER", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZATION_PERIOD_SECONDS", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "L2_BLOCK_TIME", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROPOSER", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SUBMISSION_INTERVAL", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_l2BlockNumber", "type": "uint256" } + ], + "name": "computeL2Timestamp", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_l2OutputIndex", "type": "uint256" } + ], + "name": "deleteL2Outputs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_l2OutputIndex", "type": "uint256" } + ], + "name": "getL2Output", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "outputRoot", + "type": "bytes32" + }, + { "internalType": "uint128", "name": "timestamp", "type": "uint128" }, + { + "internalType": "uint128", + "name": "l2BlockNumber", + "type": "uint128" + } + ], + "internalType": "struct Types.OutputProposal", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_l2BlockNumber", "type": "uint256" } + ], + "name": "getL2OutputAfter", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "outputRoot", + "type": "bytes32" + }, + { "internalType": "uint128", "name": "timestamp", "type": "uint128" }, + { + "internalType": "uint128", + "name": "l2BlockNumber", + "type": "uint128" + } + ], + "internalType": "struct Types.OutputProposal", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_l2BlockNumber", "type": "uint256" } + ], + "name": "getL2OutputIndexAfter", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_startingBlockNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_startingTimestamp", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "latestBlockNumber", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestOutputIndex", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextBlockNumber", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextOutputIndex", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_outputRoot", "type": "bytes32" }, + { + "internalType": "uint256", + "name": "_l2BlockNumber", + "type": "uint256" + }, + { "internalType": "bytes32", "name": "_l1BlockHash", "type": "bytes32" }, + { "internalType": "uint256", "name": "_l1BlockNumber", "type": "uint256" } + ], + "name": "proposeL2Output", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "startingBlockNumber", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "startingTimestamp", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abis/bridging/l2ToL1MessagePasser.json b/abis/bridging/l2ToL1MessagePasser.json new file mode 100644 index 0000000..8345110 --- /dev/null +++ b/abis/bridging/l2ToL1MessagePasser.json @@ -0,0 +1,112 @@ +[ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + } + ], + "name": "MessagePassed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawerBalanceBurnt", + "type": "event" + }, + { + "inputs": [], + "name": "MESSAGE_VERSION", + "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_target", "type": "address" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "name": "initiateWithdrawal", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "messageNonce", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "sentMessages", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/abis/bridging/l2standardbridge.json b/abis/bridging/l2standardbridge.json new file mode 100644 index 0000000..8925ee1 --- /dev/null +++ b/abis/bridging/l2standardbridge.json @@ -0,0 +1,424 @@ +[ + { + "inputs": [ + { + "internalType": "address payable", + "name": "_otherBridge", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "localToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "remoteToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ERC20BridgeFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "localToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "remoteToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ERC20BridgeInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ETHBridgeFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "ETHBridgeInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [], + "name": "MESSENGER", + "outputs": [ + { + "internalType": "contract CrossDomainMessenger", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OTHER_BRIDGE", + "outputs": [ + { + "internalType": "contract StandardBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_localToken", "type": "address" }, + { "internalType": "address", "name": "_remoteToken", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_localToken", "type": "address" }, + { "internalType": "address", "name": "_remoteToken", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeERC20To", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "bridgeETHTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" } + ], + "name": "deposits", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_localToken", "type": "address" }, + { "internalType": "address", "name": "_remoteToken", "type": "address" }, + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeBridgeERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeBridgeETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l1Token", "type": "address" }, + { "internalType": "address", "name": "_l2Token", "type": "address" }, + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "finalizeDeposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "l1TokenBridge", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messenger", + "outputs": [ + { + "internalType": "contract CrossDomainMessenger", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l2Token", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l2Token", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, + { "internalType": "bytes", "name": "_extraData", "type": "bytes" } + ], + "name": "withdrawTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/abis/bridging/optimismPortal.json b/abis/bridging/optimismPortal.json new file mode 100644 index 0000000..665a5a2 --- /dev/null +++ b/abis/bridging/optimismPortal.json @@ -0,0 +1,344 @@ +[ + { + "inputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "_l2Oracle", + "type": "address" + }, + { "internalType": "address", "name": "_guardian", "type": "address" }, + { "internalType": "bool", "name": "_paused", "type": "bool" }, + { + "internalType": "contract SystemConfig", + "name": "_config", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "version", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "opaqueData", + "type": "bytes" + } + ], + "name": "TransactionDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "name": "WithdrawalFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "WithdrawalProven", + "type": "event" + }, + { + "inputs": [], + "name": "GUARDIAN", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "L2_ORACLE", + "outputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SYSTEM_CONFIG", + "outputs": [ + { "internalType": "contract SystemConfig", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_value", "type": "uint256" }, + { "internalType": "uint64", "name": "_gasLimit", "type": "uint64" }, + { "internalType": "bool", "name": "_isCreation", "type": "bool" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "name": "depositTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "donateETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "gasLimit", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + } + ], + "name": "finalizeWithdrawalTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "finalizedWithdrawals", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "_paused", "type": "bool" }], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_l2OutputIndex", "type": "uint256" } + ], + "name": "isOutputFinalized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Sender", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint64", "name": "_byteCount", "type": "uint64" } + ], + "name": "minimumGasLimit", + "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "params", + "outputs": [ + { "internalType": "uint128", "name": "prevBaseFee", "type": "uint128" }, + { "internalType": "uint64", "name": "prevBoughtGas", "type": "uint64" }, + { "internalType": "uint64", "name": "prevBlockNum", "type": "uint64" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "gasLimit", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_l2OutputIndex", + "type": "uint256" + }, + { + "components": [ + { "internalType": "bytes32", "name": "version", "type": "bytes32" }, + { "internalType": "bytes32", "name": "stateRoot", "type": "bytes32" }, + { + "internalType": "bytes32", + "name": "messagePasserStorageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "latestBlockhash", + "type": "bytes32" + } + ], + "internalType": "struct Types.OutputRootProof", + "name": "_outputRootProof", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "_withdrawalProof", + "type": "bytes[]" + } + ], + "name": "proveWithdrawalTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "provenWithdrawals", + "outputs": [ + { "internalType": "bytes32", "name": "outputRoot", "type": "bytes32" }, + { "internalType": "uint128", "name": "timestamp", "type": "uint128" }, + { "internalType": "uint128", "name": "l2OutputIndex", "type": "uint128" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/abis/uniswap/factory.json b/abis/uniswap/factory.json new file mode 100644 index 0000000..e2354a6 --- /dev/null +++ b/abis/uniswap/factory.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":true,"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"FeeAmountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":false,"internalType":"int24","name":"tickSpacing","type":"int24"},{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"enableFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"","type":"uint24"}],"name":"feeAmountTickSpacing","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint24","name":"","type":"uint24"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameters","outputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/abis/uniswap/pool.json b/abis/uniswap/pool.json new file mode 100644 index 0000000..bd99dfb --- /dev/null +++ b/abis/uniswap/pool.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"int24","name":"tickLower","type":"int24"},{"indexed":true,"internalType":"int24","name":"tickUpper","type":"int24"},{"indexed":false,"internalType":"uint128","name":"amount","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"int24","name":"tickLower","type":"int24"},{"indexed":true,"internalType":"int24","name":"tickUpper","type":"int24"},{"indexed":false,"internalType":"uint128","name":"amount0","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"amount1","type":"uint128"}],"name":"Collect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint128","name":"amount0","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"amount1","type":"uint128"}],"name":"CollectProtocol","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"paid0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"paid1","type":"uint256"}],"name":"Flash","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"observationCardinalityNextOld","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"observationCardinalityNextNew","type":"uint16"}],"name":"IncreaseObservationCardinalityNext","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"indexed":false,"internalType":"int24","name":"tick","type":"int24"}],"name":"Initialize","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"int24","name":"tickLower","type":"int24"},{"indexed":true,"internalType":"int24","name":"tickUpper","type":"int24"},{"indexed":false,"internalType":"uint128","name":"amount","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"feeProtocol0Old","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"feeProtocol1Old","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"feeProtocol0New","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"feeProtocol1New","type":"uint8"}],"name":"SetFeeProtocol","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"int256","name":"amount0","type":"int256"},{"indexed":false,"internalType":"int256","name":"amount1","type":"int256"},{"indexed":false,"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"indexed":false,"internalType":"uint128","name":"liquidity","type":"uint128"},{"indexed":false,"internalType":"int24","name":"tick","type":"int24"}],"name":"Swap","type":"event"},{"inputs":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint128","name":"amount0Requested","type":"uint128"},{"internalType":"uint128","name":"amount1Requested","type":"uint128"}],"name":"collect","outputs":[{"internalType":"uint128","name":"amount0","type":"uint128"},{"internalType":"uint128","name":"amount1","type":"uint128"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Requested","type":"uint128"},{"internalType":"uint128","name":"amount1Requested","type":"uint128"}],"name":"collectProtocol","outputs":[{"internalType":"uint128","name":"amount0","type":"uint128"},{"internalType":"uint128","name":"amount1","type":"uint128"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeGrowthGlobal0X128","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeGrowthGlobal1X128","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"flash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"observationCardinalityNext","type":"uint16"}],"name":"increaseObservationCardinalityNext","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLiquidityPerTick","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"observations","outputs":[{"internalType":"uint32","name":"blockTimestamp","type":"uint32"},{"internalType":"int56","name":"tickCumulative","type":"int56"},{"internalType":"uint160","name":"secondsPerLiquidityCumulativeX128","type":"uint160"},{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"secondsAgos","type":"uint32[]"}],"name":"observe","outputs":[{"internalType":"int56[]","name":"tickCumulatives","type":"int56[]"},{"internalType":"uint160[]","name":"secondsPerLiquidityCumulativeX128s","type":"uint160[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"positions","outputs":[{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"uint256","name":"feeGrowthInside0LastX128","type":"uint256"},{"internalType":"uint256","name":"feeGrowthInside1LastX128","type":"uint256"},{"internalType":"uint128","name":"tokensOwed0","type":"uint128"},{"internalType":"uint128","name":"tokensOwed1","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFees","outputs":[{"internalType":"uint128","name":"token0","type":"uint128"},{"internalType":"uint128","name":"token1","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"feeProtocol0","type":"uint8"},{"internalType":"uint8","name":"feeProtocol1","type":"uint8"}],"name":"setFeeProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slot0","outputs":[{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"int24","name":"tick","type":"int24"},{"internalType":"uint16","name":"observationIndex","type":"uint16"},{"internalType":"uint16","name":"observationCardinality","type":"uint16"},{"internalType":"uint16","name":"observationCardinalityNext","type":"uint16"},{"internalType":"uint8","name":"feeProtocol","type":"uint8"},{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"}],"name":"snapshotCumulativesInside","outputs":[{"internalType":"int56","name":"tickCumulativeInside","type":"int56"},{"internalType":"uint160","name":"secondsPerLiquidityInsideX128","type":"uint160"},{"internalType":"uint32","name":"secondsInside","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"int256","name":"amountSpecified","type":"int256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[{"internalType":"int256","name":"amount0","type":"int256"},{"internalType":"int256","name":"amount1","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int16","name":"","type":"int16"}],"name":"tickBitmap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tickSpacing","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int24","name":"","type":"int24"}],"name":"ticks","outputs":[{"internalType":"uint128","name":"liquidityGross","type":"uint128"},{"internalType":"int128","name":"liquidityNet","type":"int128"},{"internalType":"uint256","name":"feeGrowthOutside0X128","type":"uint256"},{"internalType":"uint256","name":"feeGrowthOutside1X128","type":"uint256"},{"internalType":"int56","name":"tickCumulativeOutside","type":"int56"},{"internalType":"uint160","name":"secondsPerLiquidityOutsideX128","type":"uint160"},{"internalType":"uint32","name":"secondsOutside","type":"uint32"},{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/abis/uniswap/quoter.json b/abis/uniswap/quoter.json new file mode 100644 index 0000000..7368dd6 --- /dev/null +++ b/abis/uniswap/quoter.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"quoteExactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint160[]","name":"sqrtPriceX96AfterList","type":"uint160[]"},{"internalType":"uint32[]","name":"initializedTicksCrossedList","type":"uint32[]"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IQuoterV2.QuoteExactInputSingleParams","name":"params","type":"tuple"}],"name":"quoteExactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceX96After","type":"uint160"},{"internalType":"uint32","name":"initializedTicksCrossed","type":"uint32"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"quoteExactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint160[]","name":"sqrtPriceX96AfterList","type":"uint160[]"},{"internalType":"uint32[]","name":"initializedTicksCrossedList","type":"uint32[]"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IQuoterV2.QuoteExactOutputSingleParams","name":"params","type":"tuple"}],"name":"quoteExactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceX96After","type":"uint160"},{"internalType":"uint32","name":"initializedTicksCrossed","type":"uint32"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"path","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/abis/uniswap/swaprouter.json b/abis/uniswap/swaprouter.json new file mode 100644 index 0000000..769c48e --- /dev/null +++ b/abis/uniswap/swaprouter.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_factoryV2","type":"address"},{"internalType":"address","name":"factoryV3","type":"address"},{"internalType":"address","name":"_positionManager","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveMax","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveMaxMinusOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveZeroThenMax","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveZeroThenMaxMinusOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callPositionManager","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"paths","type":"bytes[]"},{"internalType":"uint128[]","name":"amounts","type":"uint128[]"},{"internalType":"uint24","name":"maximumTickDivergence","type":"uint24"},{"internalType":"uint32","name":"secondsAgo","type":"uint32"}],"name":"checkOracleSlippage","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint24","name":"maximumTickDivergence","type":"uint24"},{"internalType":"uint32","name":"secondsAgo","type":"uint32"}],"name":"checkOracleSlippage","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactInputParams","name":"params","type":"tuple"}],"name":"exactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IV3SwapRouter.ExactInputSingleParams","name":"params","type":"tuple"}],"name":"exactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IV3SwapRouter.ExactOutputSingleParams","name":"params","type":"tuple"}],"name":"exactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getApprovalType","outputs":[{"internalType":"enum IApproveAndCall.ApprovalType","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"}],"internalType":"struct IApproveAndCall.IncreaseLiquidityParams","name":"params","type":"tuple"}],"name":"increaseLiquidity","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"internalType":"struct IApproveAndCall.MintParams","name":"params","type":"tuple"}],"name":"mint","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"previousBlockhash","type":"bytes32"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"positionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"pull","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"refundETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowedIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"}],"name":"sweepToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"sweepTokenWithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"sweepTokenWithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"unwrapWETH9","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"}],"name":"unwrapWETH9","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"unwrapWETH9WithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"unwrapWETH9WithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"wrapETH","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/abis/uniswap/usdc.json b/abis/uniswap/usdc.json new file mode 100644 index 0000000..f51114c --- /dev/null +++ b/abis/uniswap/usdc.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"implementationContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}] \ No newline at end of file diff --git a/abis/uniswap/weth.json b/abis/uniswap/weth.json new file mode 100644 index 0000000..13e246c --- /dev/null +++ b/abis/uniswap/weth.json @@ -0,0 +1 @@ +[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"guy","type":"address"},{"name":"wad","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":true,"name":"guy","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":true,"name":"dst","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"dst","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"}] \ No newline at end of file diff --git a/audits/README.md b/audits/README.md new file mode 100644 index 0000000..6a4ddc0 --- /dev/null +++ b/audits/README.md @@ -0,0 +1,8 @@ +### Internal audit +The first internal audit is located in this folder: [internal audit](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal). +The second internal audit is located in this folder: [internal audit](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal2). +The third audit is located in this folder: [internal audit](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal3). +The fourth audit is located in this folder: [internal audit](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal4). +The fifth audit is located in this folder: [internal audit](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal5). +The latest audit is located in this folder: [internal audit](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal6). + diff --git a/audits/internal/README.md b/audits/internal/README.md new file mode 100644 index 0000000..a64dc55 --- /dev/null +++ b/audits/internal/README.md @@ -0,0 +1,88 @@ +# meme-ooorr +The review has been performed based on the contract code in the following repository:
+`https://github.com/dvilelaf/meme-ooorr`
+commit: `606acf4ed03c9d66a48e38abe0bce614feaf5ee5` or `tag: v0.0.1-pre-internal-audit`
+ +## Objectives +The audit focused on Meme* contracts
+ +### Flatten version +Flatten version of contracts. [contracts](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal/analysis/contracts) + +### Security issues +Details in [slither_full](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal/analysis/slither_full.txt)
+All false positive. + +## Issue +## Critical issue +### scheduleOLASForAscendance() needs Oracle for price +``` +Needing re-design with TWAP Oracle + // TODO: needs oracle integration + // Apply 3% slippage protection + uint256 limit = _getLowSlippageSafeSwapAmount(); +This is correctly reflected in TODO +``` +[x] Refactored + +### Medium issue +#### Not check that this LP token doesn't exist, DOS if exist +``` + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (address pair, uint256 liquidity) { + _wrap(nativeTokenAmount); + + // TODO Check that this LP token doesn't exist + // TODO What to do if it exists: add liquidity if one exists, otherwise create it + // TODO try-catch + // Create the LP + pair = IUniswap(factory).createPair(nativeToken, memeToken); + Please, fixing TODO +``` +[x] Fixed + +#### All critical functions from the FSM that should only be called once must be guaranteed to be called only once. This must be explicitly checked. +``` + Example of bad design: + + function unleashThisMeme(address memeToken) external = must be called only once for every memeToken + // Zero the allocation + ... + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if(earterContribution > 0) { + ... inside internal function + + memeHearters[memeToken][msg.sender] = 0; + } + So, we needed sure: + 1. t0: unleashThisMeme(tkn1) - passed + 2. t1: unleashThisMeme(tkn1) - revert + 3. t2: unleashThisMeme(tkn2) - passed + This should be true for all functions from FSM: + - summonThisMem -> heartThisMeme -> unleashThisMeme -> collectThisMeme (optional) -> purgeThisMeme + + By code: race between collectThisMeme and purgeThisMeme. to discussion +``` +[x] Fixed + +### Low issue +#### Rare case = don't create() +``` +function summonThisMeme( + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + + require(memeToken != address(0), "Token creation failed"); // This is redundant but good for clarity +``` +[x] Fixed + +#### Confusing name of variable lpTokenAmount +``` +uint256 heartersAmount = totalSupply - lpTokenAmount; +Because it is NOT amount of LP token. +``` +[x] Fixed diff --git a/audits/internal/analysis/contracts/Meme-flatten.sol b/audits/internal/analysis/contracts/Meme-flatten.sol new file mode 100644 index 0000000..0304811 --- /dev/null +++ b/audits/internal/analysis/contracts/Meme-flatten.sol @@ -0,0 +1,224 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +// File lib/solmate/src/tokens/ERC20.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.8.0; +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} diff --git a/audits/internal/analysis/contracts/MemeActivityChecker-flatten.sol b/audits/internal/analysis/contracts/MemeActivityChecker-flatten.sol new file mode 100644 index 0000000..6b5a6a3 --- /dev/null +++ b/audits/internal/analysis/contracts/MemeActivityChecker-flatten.sol @@ -0,0 +1,77 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +// File contracts/MemeActivityChecker.sol +pragma solidity ^0.8.25; + +// Meme Factory interface +interface IMemeFactory { + function mapAccountActivities(address multisig) external view returns (uint256); +} + +/// @dev Zero address. +error ZeroAddress(); + +/// @dev Zero value. +error ZeroValue(); + +/// @title MemeActivityChecker - Smart contract for meme contract interaction service staking activity check +/// @author Aleksandr Kuperman - +/// @author Andrey Lebedev - +/// @author David Vilela - +contract MemeActivityChecker { + // Liveness ratio in the format of 1e18 + uint256 public immutable livenessRatio; + // Meme Factory contract address + address public immutable memeFactory; + + /// @dev StakingNativeToken initialization. + /// @param _memeFactory Meme Factory contract address. + /// @param _livenessRatio Liveness ratio in the format of 1e18. + constructor(address _memeFactory, uint256 _livenessRatio) { + // Check the zero address + if (_memeFactory == address(0)) { + revert ZeroAddress(); + } + + // Check for zero value + if (_livenessRatio == 0) { + revert ZeroValue(); + } + + memeFactory = _memeFactory; + livenessRatio = _livenessRatio; + } + + /// @dev Gets service multisig nonces. + /// @param multisig Service multisig address. + /// @return nonces Set of a single service multisig nonce. + function getMultisigNonces(address multisig) external view virtual returns (uint256[] memory nonces) { + nonces = new uint256[](1); + // The nonce is equal to the meme factory contract interaction corresponding to a multisig activity + nonces[0] = IMemeFactory(memeFactory).mapAccountActivities(multisig); + } + + /// @dev Checks if the service multisig liveness ratio passes the defined liveness threshold. + /// @notice The formula for calculating the ratio is the following: + /// currentNonce - service multisig nonce at time now (block.timestamp); + /// lastNonce - service multisig nonce at the previous checkpoint or staking time (tsStart); + /// ratio = (currentNonce - lastNonce) / (block.timestamp - tsStart). + /// @param curNonces Current service multisig set of a single nonce. + /// @param lastNonces Last service multisig set of a single nonce. + /// @param ts Time difference between current and last timestamps. + /// @return ratioPass True, if the liveness ratio passes the check. + function isRatioPass( + uint256[] memory curNonces, + uint256[] memory lastNonces, + uint256 ts + ) external view virtual returns (bool ratioPass) { + // If the checkpoint was called in the exact same block, the ratio is zero + // If the current nonce is not greater than the last nonce, the ratio is zero + if (ts > 0 && curNonces[0] > lastNonces[0]) { + uint256 ratio = ((curNonces[0] - lastNonces[0]) * 1e18) / ts; + ratioPass = (ratio >= livenessRatio); + } + } +} diff --git a/audits/internal/analysis/contracts/MemeBase-flatten.sol b/audits/internal/analysis/contracts/MemeBase-flatten.sol new file mode 100644 index 0000000..d4bdddd --- /dev/null +++ b/audits/internal/analysis/contracts/MemeBase-flatten.sol @@ -0,0 +1,819 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +// File lib/solmate/src/tokens/ERC20.sol +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + + +interface IWETH { + function deposit() external payable; +} + +// UniswapV2 interface +interface IUniswap { + /// @dev Creates an LP pair. + function createPair(address tokenA, address tokenB) external returns (address pair); + + /// @dev Adds liquidity to the LP consisting of tokenA and tokenB. + function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, + uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) + external returns (uint256 amountA, uint256 amountB, uint256 liquidity); + /// @dev Swaps exact amount of ETH for a specified token. + function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) + external payable returns (uint256[] memory amounts); +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(address indexed olas, uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, address indexed lpPairAddress, + uint256 liquidity, uint256 burnPercentageOfStable); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + } + + // Version number + string public constant VERSION = "0.1.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // L1 OLAS Burner address + address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address + address public immutable nativeToken; + // Uniswap V2 router address + address public immutable router; + // Uniswap V2 factory address + address public immutable factory; + + // Number of meme tokens + uint256 public numTokens; + // Native token scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Tokens to be bridged + uint256 public bridgeAmount; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _router, + address _factory, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + router = _router; + factory = _factory; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Get safe slippage amount from dex with oracle. + /// @return safe amount of tokens to swap on dex with low slippage. + function _getLowSlippageSafeSwapAmount() internal virtual returns (uint256); + + /// @dev Buys OLAS on DEX. + /// @param nativeTokenAmount Native token amount. + /// @param limit OLAS minimum amount depending on the desired slippage. + /// @return Obtained OLAS amount. + function _buyOLAS(uint256 nativeTokenAmount, uint256 limit) internal virtual returns (uint256); + + /// @dev Bridges OLAS amount back to L1 and burns. + /// @param OLASAmount OLAS amount. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @param bridgePayload Optional additional bridge payload. + /// @return msg.value leftovers if partially utilized by the bridge. + function _bridgeAndBurn( + uint256 OLASAmount, + uint256 tokenGasLimit, + bytes memory bridgePayload + ) internal virtual returns (uint256); + + /// @dev Creates reference token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return pair reference token + meme token LP address. + /// @return liquidity Obtained LP liquidity. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (address pair, uint256 liquidity) { + _wrap(nativeTokenAmount); + + // TODO Check that this LP token doesn't exist + // TODO What to do if it exists: add liquidity if one exists, otherwise create it + // TODO try-catch + // Create the LP + pair = IUniswap(factory).createPair(nativeToken, memeToken); + + // Approve tokens for router + IERC20(nativeToken).approve(router, nativeTokenAmount); + IERC20(memeToken).approve(router, memeTokenAmount); + + // Add reference token + meme token liquidity + (, , liquidity) = IUniswap(router).addLiquidity( + nativeToken, + memeToken, + nativeTokenAmount, + memeTokenAmount, + 0, // Accept any amount of reference token + 0, // Accept any amount of meme token + address(this), + block.timestamp + ); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token maount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + function _wrap(uint256 nativeTokenAmount) internal virtual { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(totalNativeTokenCommitted > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Put aside reference token to buy OLAS with the burn percentage of the total native token amount committed + uint256 burnPercentageOfReferenceToken = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + scheduledForAscendance += burnPercentageOfReferenceToken; + + // Adjust reference token amount + totalNativeTokenCommitted -= burnPercentageOfReferenceToken; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 lpTokenAmount = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - lpTokenAmount; + + // Create Uniswap pair with LP allocation + (address pool, uint256 liquidity) = _createUniswapPair(memeToken, totalNativeTokenCommitted, lpTokenAmount); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, hearterContribution, heartersAmount, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, pool, liquidity, burnPercentageOfReferenceToken); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // TODO: check state in this function + // Collect the token + _collect(memeToken, hearterContribution, memeSummon.heartersAmount, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Converts collected reference token to OLAS. + function scheduleOLASForAscendance() external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 localAscendance = scheduledForAscendance; + require(localAscendance > 0, "Nothing to burn"); + + // TODO: needs oracle integration + // Apply 3% slippage protection + uint256 limit = _getLowSlippageSafeSwapAmount(); + + uint256 swapAmount; + if (localAscendance > limit) { + swapAmount = limit; + localAscendance -= limit; + } else { + swapAmount = localAscendance; + localAscendance = 0; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + uint256 OLASAmount = _buyOLAS(swapAmount, limit); + + bridgeAmount += OLASAmount; + scheduledForAscendance = localAscendance; + + _locked = 1; + } + + + /// @dev Bridges OLAS to Ethereum mainnet for burn. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @param bridgePayload Optional additional bridge payload. + function sendToHigherHeights(uint256 tokenGasLimit, bytes memory bridgePayload) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + require(bridgeAmount > 0, "Nothing to bridge"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + uint256 OLASAmount = bridgeAmount; + bridgeAmount = 0; + // Burn OLAS + uint256 leftovers = _bridgeAndBurn(OLASAmount, tokenGasLimit, bridgePayload); + + // Send leftover amount, if any, back to the sender + if (leftovers > 0) { + // If the call fails, ignore to avoid the attack that would prevent this function from executing + // solhint-disable-next-line avoid-low-level-calls + tx.origin.call{value: leftovers}(""); + } + + _locked = 1; + } + + /// @dev Allows the contract to receive native token + receive() external payable {} +} + + +// File contracts/MemeBase.sol +// Balancer interface +interface IBalancer { + enum SwapKind { GIVEN_IN, GIVEN_OUT } + + struct SingleSwap { + bytes32 poolId; + SwapKind kind; + address assetIn; + address assetOut; + uint256 amount; + bytes userData; + } + + struct FundManagement { + address sender; + bool fromInternalBalance; + address payable recipient; + bool toInternalBalance; + } + + /// @dev Swaps tokens on Balancer. + function swap(SingleSwap memory singleSwap, FundManagement memory funds, uint256 limit, uint256 deadline) + external payable returns (uint256); +} + +// Bridge interface +interface IBridge { + /// @dev Initiates a withdrawal from L2 to L1 to a target account on L1. + /// @param l2Token Address of the L2 token to withdraw. + /// @param to Recipient account on L1. + /// @param amount Amount of the L2 token to withdraw. + /// @param minGasLimit Minimum gas limit to use for the transaction. + /// @param extraData Extra data attached to the withdrawal. + function withdrawTo(address l2Token, address to, uint256 amount, uint32 minGasLimit, bytes calldata extraData) external; +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); +} + +// Oracle interface +interface IOracle { + /// @dev Gets latest round token price data. + function latestRoundData() + external returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); +} + +/// @title MemeBase - a smart contract factory for Meme Token creation on Base. +contract MemeBase is MemeFactory { + // Slippage parameter (3%) + uint256 public constant SLIPPAGE = 3; + // Token transfer gas limit for L1 + // This is safe as the value is practically bigger than observed ones on numerous chains + uint32 public constant TOKEN_GAS_LIMIT = 300_000; + + // L2 token relayer bridge address + address public immutable l2TokenRelayer; + // Balancer Vault address + address public immutable balancerVault; + // Balancer Pool Id + bytes32 public immutable balancerPoolId; + + /// @dev MemeBase constructor + constructor( + address _olas, + address _weth, + address _router, + address _factory, + uint256 _minNativeTokenValue, + address _l2TokenRelayer, + address _balancerVault, + bytes32 _balancerPoolId + ) MemeFactory(_olas, _weth, _router, _factory, _minNativeTokenValue) { + l2TokenRelayer = _l2TokenRelayer; + balancerVault = _balancerVault; + balancerPoolId = _balancerPoolId; + } + + /// @dev Get safe slippage amount from dex. + /// @return safe amount of tokens to swap on dex with low slippage. + function _getLowSlippageSafeSwapAmount() internal virtual override returns (uint256) { + /// check on three-sided USDC, ETH, OLAS pool for correct amount with max 3% slippage + return 0; + } + + + /// @dev Buys OLAS on Balancer. + /// @param nativeTokenAmount Native token amount. + /// @param limit OLAS minimum amount depending on the desired slippage. + /// @return Obtained OLAS amount. + function _buyOLAS(uint256 nativeTokenAmount, uint256 limit) internal override returns (uint256) { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + + // Approve usdc for the Balancer Vault + IERC20(nativeToken).approve(balancerVault, nativeTokenAmount); + + // Prepare Balancer data for the WETH-OLAS pool + IBalancer.SingleSwap memory singleSwap = IBalancer.SingleSwap(balancerPoolId, IBalancer.SwapKind.GIVEN_IN, + nativeToken, olas, nativeTokenAmount, "0x"); + IBalancer.FundManagement memory fundManagement = IBalancer.FundManagement(address(this), false, + payable(address(this)), false); + + // Perform swap + return IBalancer(balancerVault).swap(singleSwap, fundManagement, limit, block.timestamp); + } + + /// @dev Bridges OLAS amount back to L1 and burns. + /// @param olasAmount OLAS amount. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @return msg.value leftovers if partially utilized by the bridge. + function _bridgeAndBurn(uint256 olasAmount, uint256 tokenGasLimit, bytes memory) internal override returns (uint256) { + // Approve bridge to use OLAS + IERC20(olas).approve(l2TokenRelayer, olasAmount); + + // Check for sufficient minimum gas limit + if (tokenGasLimit < TOKEN_GAS_LIMIT) { + tokenGasLimit = TOKEN_GAS_LIMIT; + } + + // Data for the mainnet validate the OLAS burn + bytes memory data = abi.encodeWithSignature("burn(uint256)", olasAmount); + + // Bridge OLAS to mainnet to get burned + IBridge(l2TokenRelayer).withdrawTo(olas, OLAS_BURNER, olasAmount, uint32(tokenGasLimit), data); + + emit OLASJourneyToAscendance(olas, olasAmount); + + return msg.value; + } +} diff --git a/audits/internal/analysis/contracts/MemeCelo-flatten.sol b/audits/internal/analysis/contracts/MemeCelo-flatten.sol new file mode 100644 index 0000000..0e7e221 --- /dev/null +++ b/audits/internal/analysis/contracts/MemeCelo-flatten.sol @@ -0,0 +1,828 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + + +// File contracts/MemeFactory.sol +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); +} + +interface IWETH { + function deposit() external payable; +} + +// UniswapV2 interface +interface IUniswap { + /// @dev Creates an LP pair. + function createPair(address tokenA, address tokenB) external returns (address pair); + + /// @dev Adds liquidity to the LP consisting of tokenA and tokenB. + function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, + uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) + external returns (uint256 amountA, uint256 amountB, uint256 liquidity); + + /// @dev Swaps exact amount of ETH for a specified token. + function swapExactTokensForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) + external payable returns (uint256[] memory amounts); + + /// @dev Swaps an exact amount of input tokens along the route determined by the path. + function swapExactTokensForTokens( + uint256 amountIn, + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external returns (uint256[] memory amounts); +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(address indexed olas, uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, address indexed lpPairAddress, + uint256 liquidity, uint256 burnPercentageOfStable); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + } + + // Version number + string public constant VERSION = "0.1.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // L1 OLAS Burner address + address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address + address public immutable nativeToken; + // Uniswap V2 router address + address public immutable router; + // Uniswap V2 factory address + address public immutable factory; + + // Number of meme tokens + uint256 public numTokens; + // Native token scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Tokens to be bridged + uint256 public bridgeAmount; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _router, + address _factory, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + router = _router; + factory = _factory; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Get safe slippage amount from dex with oracle. + /// @return safe amount of tokens to swap on dex with low slippage. + function _getLowSlippageSafeSwapAmount() internal virtual returns (uint256); + + /// @dev Buys OLAS on DEX. + /// @param nativeTokenAmount Native token amount. + /// @param limit OLAS minimum amount depending on the desired slippage. + /// @return Obtained OLAS amount. + function _buyOLAS(uint256 nativeTokenAmount, uint256 limit) internal virtual returns (uint256); + + /// @dev Bridges OLAS amount back to L1 and burns. + /// @param OLASAmount OLAS amount. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @param bridgePayload Optional additional bridge payload. + /// @return msg.value leftovers if partially utilized by the bridge. + function _bridgeAndBurn( + uint256 OLASAmount, + uint256 tokenGasLimit, + bytes memory bridgePayload + ) internal virtual returns (uint256); + + /// @dev Creates reference token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return pair reference token + meme token LP address. + /// @return liquidity Obtained LP liquidity. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (address pair, uint256 liquidity) { + _wrap(nativeTokenAmount); + + // TODO Check that this LP token doesn't exist + // TODO What to do if it exists: add liquidity if one exists, otherwise create it + // TODO try-catch + // Create the LP + pair = IUniswap(factory).createPair(nativeToken, memeToken); + + // Approve tokens for router + IERC20(nativeToken).approve(router, nativeTokenAmount); + IERC20(memeToken).approve(router, memeTokenAmount); + + // Add reference token + meme token liquidity + (, , liquidity) = IUniswap(router).addLiquidity( + nativeToken, + memeToken, + nativeTokenAmount, + memeTokenAmount, + 0, // Accept any amount of reference token + 0, // Accept any amount of meme token + address(this), + block.timestamp + ); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token maount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + function _wrap(uint256 nativeTokenAmount) internal virtual { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(totalNativeTokenCommitted > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Put aside reference token to buy OLAS with the burn percentage of the total native token amount committed + uint256 burnPercentageOfReferenceToken = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + scheduledForAscendance += burnPercentageOfReferenceToken; + + // Adjust reference token amount + totalNativeTokenCommitted -= burnPercentageOfReferenceToken; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 lpTokenAmount = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - lpTokenAmount; + + // Create Uniswap pair with LP allocation + (address pool, uint256 liquidity) = _createUniswapPair(memeToken, totalNativeTokenCommitted, lpTokenAmount); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, hearterContribution, heartersAmount, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, pool, liquidity, burnPercentageOfReferenceToken); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // TODO: check state in this function + // Collect the token + _collect(memeToken, hearterContribution, memeSummon.heartersAmount, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Converts collected reference token to OLAS. + function scheduleOLASForAscendance() external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 localAscendance = scheduledForAscendance; + require(localAscendance > 0, "Nothing to burn"); + + // TODO: needs oracle integration + // Apply 3% slippage protection + uint256 limit = _getLowSlippageSafeSwapAmount(); + + uint256 swapAmount; + if (localAscendance > limit) { + swapAmount = limit; + localAscendance -= limit; + } else { + swapAmount = localAscendance; + localAscendance = 0; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + uint256 OLASAmount = _buyOLAS(swapAmount, limit); + + bridgeAmount += OLASAmount; + scheduledForAscendance = localAscendance; + + _locked = 1; + } + + + /// @dev Bridges OLAS to Ethereum mainnet for burn. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @param bridgePayload Optional additional bridge payload. + function sendToHigherHeights(uint256 tokenGasLimit, bytes memory bridgePayload) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + require(bridgeAmount > 0, "Nothing to bridge"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + uint256 OLASAmount = bridgeAmount; + bridgeAmount = 0; + // Burn OLAS + uint256 leftovers = _bridgeAndBurn(OLASAmount, tokenGasLimit, bridgePayload); + + // Send leftover amount, if any, back to the sender + if (leftovers > 0) { + // If the call fails, ignore to avoid the attack that would prevent this function from executing + // solhint-disable-next-line avoid-low-level-calls + tx.origin.call{value: leftovers}(""); + } + + _locked = 1; + } + + /// @dev Allows the contract to receive native token + receive() external payable {} +} + + +// File contracts/MemeCelo.sol +// Bridge interface +interface IBridge { + /// @dev Transfers tokens through Wormhole portal. + function transferTokens( + address token, + uint256 amount, + uint16 recipientChain, + bytes32 recipient, + uint256 arbiterFee, + uint32 nonce + ) external payable returns (uint64 sequence); +} + +// Oracle interface +interface IOracle { + /// @dev Gets latest round token price data. + function latestRoundData() + external returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); +} + +/// @title MemeCelo - a smart contract factory for Meme Token creation on Celo. +contract MemeCelo is MemeFactory { + // Slippage parameter (3%) + uint256 public constant SLIPPAGE = 97; + // Wormhole bridging decimals cutoff + uint256 public constant WORMHOLE_BRIDGING_CUTOFF = 1e10; + // Ethereum mainnet chain Id in Wormhole format + uint16 public constant WORMHOLE_ETH_CHAIN_ID = 2; + + // CELO token address + address public immutable celo; + // L2 token relayer bridge address + address public immutable l2TokenRelayer; + // Oracle address + address public immutable oracle; + + // Contract nonce + uint256 public nonce; + // OLAS leftovers from bridging + uint256 public olasLeftovers; + + /// @dev MemeBase constructor + constructor( + address _olas, + address _celo, + address _router, + address _factory, + uint256 _minNativeTokenValue, + address _l2TokenRelayer, + address _oracle + ) MemeFactory(_olas, _celo, _router, _factory, _minNativeTokenValue) { + l2TokenRelayer = _l2TokenRelayer; + oracle = _oracle; + } + + /// @dev Get safe slippage amount from dex. + /// @return safe amount of tokens to swap on dex with low slippage. + function _getLowSlippageSafeSwapAmount() internal virtual override returns (uint256) { + /// check on two-sided CELO, OLAS pool for correct amount with max 3% slippage + return 0; + } + + /// @dev Buys OLAS on UniswapV2. + /// @param nativeTokenAmount CELO amount. + /// @return Obtained OLAS amount. + function _buyOLAS(uint256 nativeTokenAmount, uint256 limit) internal override returns (uint256) { + address[] memory path = new address[](3); + path[0] = nativeToken; + path[1] = olas; + + // Approve native token + IERC20(nativeToken).approve(router, nativeTokenAmount); + + // Swap cUSD for OLAS + // This will go via two pools - not a problem as Ubeswap has both + uint256[] memory amounts = IUniswap(router).swapExactTokensForTokens( + nativeTokenAmount, + limit, + path, + address(this), + block.timestamp + ); + + // Return the OLAS amount bought + return amounts[1]; + } + + /// @dev Bridges OLAS amount back to L1 and burns. + /// @param olasAmount OLAS amount. + /// @return msg.value leftovers if partially utilized by the bridge. + function _bridgeAndBurn(uint256 olasAmount, uint256, bytes memory) internal override returns (uint256) { + // Get OLAS leftovers from previous transfers and adjust the amount to transfer + olasAmount += olasLeftovers; + + // Round transfer amount to the cutoff value + uint256 transferAmount = olasAmount / WORMHOLE_BRIDGING_CUTOFF; + transferAmount *= WORMHOLE_BRIDGING_CUTOFF; + + // Check for zero value + require(transferAmount > 0, "Amount is too small for bridging"); + + // Update OLAS leftovers + olasLeftovers = olasAmount - transferAmount; + + // Approve bridge to use OLAS + IERC20(olas).approve(l2TokenRelayer, transferAmount); + + // Bridge arguments + bytes32 olasBurner = bytes32(uint256(uint160(OLAS_BURNER))); + uint256 localNonce = nonce; + + // Bridge OLAS to mainnet to get burned + IBridge(l2TokenRelayer).transferTokens(olas, transferAmount, WORMHOLE_ETH_CHAIN_ID, olasBurner, 0, uint32(nonce)); + + // Adjust nonce + nonce = localNonce + 1; + + emit OLASJourneyToAscendance(olas, transferAmount); + + return msg.value; + } + + function _wrap(uint256) internal virtual override {} +} diff --git a/audits/internal/analysis/contracts/MemeFactory-flatten.sol b/audits/internal/analysis/contracts/MemeFactory-flatten.sol new file mode 100644 index 0000000..d14b4ed --- /dev/null +++ b/audits/internal/analysis/contracts/MemeFactory-flatten.sol @@ -0,0 +1,687 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + + +// File contracts/MemeFactory.sol +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); +} + +interface IWETH { + function deposit() external payable; +} + +// UniswapV2 interface +interface IUniswap { + /// @dev Creates an LP pair. + function createPair(address tokenA, address tokenB) external returns (address pair); + + /// @dev Adds liquidity to the LP consisting of tokenA and tokenB. + function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, + uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) + external returns (uint256 amountA, uint256 amountB, uint256 liquidity); +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(address indexed olas, uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, address indexed lpPairAddress, + uint256 liquidity, uint256 burnPercentageOfStable); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + } + + // Version number + string public constant VERSION = "0.1.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // L1 OLAS Burner address + address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address + address public immutable nativeToken; + // Uniswap V2 router address + address public immutable router; + // Uniswap V2 factory address + address public immutable factory; + + // Number of meme tokens + uint256 public numTokens; + // Native token scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Tokens to be bridged + uint256 public bridgeAmount; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _router, + address _factory, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + router = _router; + factory = _factory; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Get safe slippage amount from dex with oracle. + /// @return safe amount of tokens to swap on dex with low slippage. + function _getLowSlippageSafeSwapAmount() internal virtual returns (uint256); + + /// @dev Buys OLAS on DEX. + /// @param nativeTokenAmount Native token amount. + /// @param limit OLAS minimum amount depending on the desired slippage. + /// @return Obtained OLAS amount. + function _buyOLAS(uint256 nativeTokenAmount, uint256 limit) internal virtual returns (uint256); + + /// @dev Bridges OLAS amount back to L1 and burns. + /// @param OLASAmount OLAS amount. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @param bridgePayload Optional additional bridge payload. + /// @return msg.value leftovers if partially utilized by the bridge. + function _bridgeAndBurn( + uint256 OLASAmount, + uint256 tokenGasLimit, + bytes memory bridgePayload + ) internal virtual returns (uint256); + + /// @dev Creates reference token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return pair reference token + meme token LP address. + /// @return liquidity Obtained LP liquidity. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (address pair, uint256 liquidity) { + _wrap(nativeTokenAmount); + + // TODO Check that this LP token doesn't exist + // TODO What to do if it exists: add liquidity if one exists, otherwise create it + // TODO try-catch + // Create the LP + pair = IUniswap(factory).createPair(nativeToken, memeToken); + + // Approve tokens for router + IERC20(nativeToken).approve(router, nativeTokenAmount); + IERC20(memeToken).approve(router, memeTokenAmount); + + // Add reference token + meme token liquidity + (, , liquidity) = IUniswap(router).addLiquidity( + nativeToken, + memeToken, + nativeTokenAmount, + memeTokenAmount, + 0, // Accept any amount of reference token + 0, // Accept any amount of meme token + address(this), + block.timestamp + ); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token maount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + function _wrap(uint256 nativeTokenAmount) internal virtual { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(totalNativeTokenCommitted > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Put aside reference token to buy OLAS with the burn percentage of the total native token amount committed + uint256 burnPercentageOfReferenceToken = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + scheduledForAscendance += burnPercentageOfReferenceToken; + + // Adjust reference token amount + totalNativeTokenCommitted -= burnPercentageOfReferenceToken; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 lpTokenAmount = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - lpTokenAmount; + + // Create Uniswap pair with LP allocation + (address pool, uint256 liquidity) = _createUniswapPair(memeToken, totalNativeTokenCommitted, lpTokenAmount); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, hearterContribution, heartersAmount, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, pool, liquidity, burnPercentageOfReferenceToken); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // TODO: check state in this function + // Collect the token + _collect(memeToken, hearterContribution, memeSummon.heartersAmount, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Converts collected reference token to OLAS. + function scheduleOLASForAscendance() external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 localAscendance = scheduledForAscendance; + require(localAscendance > 0, "Nothing to burn"); + + // TODO: needs oracle integration + // Apply 3% slippage protection + uint256 limit = _getLowSlippageSafeSwapAmount(); + + uint256 swapAmount; + if (localAscendance > limit) { + swapAmount = limit; + localAscendance -= limit; + } else { + swapAmount = localAscendance; + localAscendance = 0; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + uint256 OLASAmount = _buyOLAS(swapAmount, limit); + + bridgeAmount += OLASAmount; + scheduledForAscendance = localAscendance; + + _locked = 1; + } + + + /// @dev Bridges OLAS to Ethereum mainnet for burn. + /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. + /// @param bridgePayload Optional additional bridge payload. + function sendToHigherHeights(uint256 tokenGasLimit, bytes memory bridgePayload) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + require(bridgeAmount > 0, "Nothing to bridge"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + uint256 OLASAmount = bridgeAmount; + bridgeAmount = 0; + // Burn OLAS + uint256 leftovers = _bridgeAndBurn(OLASAmount, tokenGasLimit, bridgePayload); + + // Send leftover amount, if any, back to the sender + if (leftovers > 0) { + // If the call fails, ignore to avoid the attack that would prevent this function from executing + // solhint-disable-next-line avoid-low-level-calls + tx.origin.call{value: leftovers}(""); + } + + _locked = 1; + } + + /// @dev Allows the contract to receive native token + receive() external payable {} +} diff --git a/audits/internal/analysis/contracts/script.sh b/audits/internal/analysis/contracts/script.sh new file mode 100755 index 0000000..286784b --- /dev/null +++ b/audits/internal/analysis/contracts/script.sh @@ -0,0 +1,20 @@ +#!/bin/bash + + slither_options=("call-graph" "constructor-calls" "contract-summary" "data-dependency" "function-summary" + "human-summary" "inheritance" "inheritance-graph" "modifiers" "require" "variable-order" "vars-and-auth") + echo -e "\nRunning slither routines ..." + for so in "${slither_options[@]}"; do + echo -e "\t$so" + slither . --print ${so} &> "slither_$so.txt" + done + echo -e "\tfull report" + slither . &> "slither_full.txt" + + # moving generated .dot files to the audit folder + count=`ls -1 *.dot 2>/dev/null | wc -l` + echo -e "\tgenerated $count .dot files" + for _filename in *.dot; do + filename="${_filename%.*}" + cat $_filename | dot -Tpng > slither_$filename.png + done + rm *.dot diff --git a/audits/internal/analysis/slither_Meme-flatten.sol.Meme.call-graph.png b/audits/internal/analysis/slither_Meme-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..1420b0b Binary files /dev/null and b/audits/internal/analysis/slither_Meme-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal/analysis/slither_Meme-flatten.sol.all_contracts.call-graph.png b/audits/internal/analysis/slither_Meme-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..e2f20f5 Binary files /dev/null and b/audits/internal/analysis/slither_Meme-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal/analysis/slither_Meme-flatten.sol.inheritance-graph.png b/audits/internal/analysis/slither_Meme-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..c37b609 Binary files /dev/null and b/audits/internal/analysis/slither_Meme-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png new file mode 100644 index 0000000..901f9f9 Binary files /dev/null and b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png new file mode 100644 index 0000000..dc0dd56 Binary files /dev/null and b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..333bf2f Binary files /dev/null and b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..c6ab2d1 Binary files /dev/null and b/audits/internal/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.IBalancer.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.IBalancer.call-graph.png new file mode 100644 index 0000000..ed102f5 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.IBalancer.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.IBridge.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.IBridge.call-graph.png new file mode 100644 index 0000000..82411de Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.IBridge.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d185d53 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.IOracle.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.IOracle.call-graph.png new file mode 100644 index 0000000..a4f68b8 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.IOracle.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.IUniswap.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.IUniswap.call-graph.png new file mode 100644 index 0000000..3f8c190 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.IUniswap.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..282b5a7 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png new file mode 100644 index 0000000..8677835 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..e5bb76d Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png b/audits/internal/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..815eae4 Binary files /dev/null and b/audits/internal/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.IBridge.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IBridge.call-graph.png new file mode 100644 index 0000000..9194ef2 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IBridge.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d185d53 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.IOracle.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IOracle.call-graph.png new file mode 100644 index 0000000..a4f68b8 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IOracle.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.IUniswap.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IUniswap.call-graph.png new file mode 100644 index 0000000..323beea Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IUniswap.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.IWETH.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..282b5a7 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png new file mode 100644 index 0000000..300d2c0 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..8e53212 Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png b/audits/internal/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..c014e8f Binary files /dev/null and b/audits/internal/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d185d53 Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.IUniswap.call-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.IUniswap.call-graph.png new file mode 100644 index 0000000..2ce0264 Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.IUniswap.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.IWETH.call-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..282b5a7 Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png new file mode 100644 index 0000000..7b1be1d Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..e94c74a Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png b/audits/internal/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..d5346d0 Binary files /dev/null and b/audits/internal/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal/analysis/slither_call-graph.txt b/audits/internal/analysis/slither_call-graph.txt new file mode 100644 index 0000000..a9ac4e8 --- /dev/null +++ b/audits/internal/analysis/slither_call-graph.txt @@ -0,0 +1,68 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers:Call Graph: ./MemeActivityChecker-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.dot +Call Graph: ./MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.dot + +INFO:Printers:Call Graph: ./MemeCelo-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IUniswap.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IBridge.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IOracle.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.MemeCelo.call-graph.dot + +INFO:Printers:Call Graph: ./Meme-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./Meme-flatten.sol.Meme.call-graph.dot + +INFO:Printers:Call Graph: ./MemeFactory-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IUniswap.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.MemeFactory.call-graph.dot + +INFO:Printers:Call Graph: ./MemeBase-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IUniswap.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IBalancer.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IBridge.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IOracle.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.MemeBase.call-graph.dot + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_constructor-calls.txt b/audits/internal/analysis/slither_constructor-calls.txt new file mode 100644 index 0000000..77ac0bd --- /dev/null +++ b/audits/internal/analysis/slither_constructor-calls.txt @@ -0,0 +1,319 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +################################### +####### MemeActivityChecker ####### +################################### + +## Constructor Call Sequence + - MemeActivityChecker + +## Constructor Definitions + +### MemeActivityChecker + + constructor(address _memeFactory, uint256 _livenessRatio) { + // Check the zero address + if (_memeFactory == address(0)) { + revert ZeroAddress(); + } + + // Check for zero value + if (_livenessRatio == 0) { + revert ZeroValue(); + } + + memeFactory = _memeFactory; + livenessRatio = _livenessRatio; + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +######################## +####### MemeCelo ####### +######################## + +## Constructor Call Sequence + - MemeFactory + - MemeCelo + +## Constructor Definitions + +### MemeFactory + + constructor( + address _olas, + address _nativeToken, + address _router, + address _factory, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + router = _router; + factory = _factory; + minNativeTokenValue = _minNativeTokenValue; + } + +### MemeCelo + + constructor( + address _olas, + address _celo, + address _router, + address _factory, + uint256 _minNativeTokenValue, + address _l2TokenRelayer, + address _oracle + ) MemeFactory(_olas, _celo, _router, _factory, _minNativeTokenValue) { + l2TokenRelayer = _l2TokenRelayer; + oracle = _oracle; + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +########################### +####### MemeFactory ####### +########################### + +## Constructor Call Sequence + - MemeFactory + +## Constructor Definitions + +### MemeFactory + + constructor( + address _olas, + address _nativeToken, + address _router, + address _factory, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + router = _router; + factory = _factory; + minNativeTokenValue = _minNativeTokenValue; + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +######################## +####### MemeBase ####### +######################## + +## Constructor Call Sequence + - MemeFactory + - MemeBase + +## Constructor Definitions + +### MemeFactory + + constructor( + address _olas, + address _nativeToken, + address _router, + address _factory, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + router = _router; + factory = _factory; + minNativeTokenValue = _minNativeTokenValue; + } + +### MemeBase + + constructor( + address _olas, + address _weth, + address _router, + address _factory, + uint256 _minNativeTokenValue, + address _l2TokenRelayer, + address _balancerVault, + bytes32 _balancerPoolId + ) MemeFactory(_olas, _weth, _router, _factory, _minNativeTokenValue) { + l2TokenRelayer = _l2TokenRelayer; + balancerVault = _balancerVault; + balancerPoolId = _balancerPoolId; + } + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_contract-summary.txt b/audits/internal/analysis/slither_contract-summary.txt new file mode 100644 index 0000000..cde747e --- /dev/null +++ b/audits/internal/analysis/slither_contract-summary.txt @@ -0,0 +1,314 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: ++ Contract IMemeFactory (Most derived contract) + - From IMemeFactory + - mapAccountActivities(address) (external) + ++ Contract MemeActivityChecker (Most derived contract) + - From MemeActivityChecker + - constructor(address,uint256) (public) + - getMultisigNonces(address) (external) + - isRatioPass(uint256[],uint256[],uint256) (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract IUniswap (Most derived contract) + - From IUniswap + - addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) (external) + - createPair(address,address) (external) + - swapExactTokensForTokens(uint256,address[],address,uint256) (external) + - swapExactTokensForTokens(uint256,uint256,address[],address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _bridgeAndBurn(uint256,uint256,bytes) (internal) + - _buyOLAS(uint256,uint256) (internal) + - _collect(address,uint256,uint256,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _getLowSlippageSafeSwapAmount() (internal) + - _wrap(uint256) (internal) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleOLASForAscendance() (external) + - sendToHigherHeights(uint256,bytes) (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + ++ Contract IBridge (Most derived contract) + - From IBridge + - transferTokens(address,uint256,uint16,bytes32,uint256,uint32) (external) + ++ Contract IOracle (Most derived contract) + - From IOracle + - latestRoundData() (external) + ++ Contract MemeCelo (Most derived contract) + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleOLASForAscendance() (external) + - sendToHigherHeights(uint256,bytes) (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + - From MemeCelo + - _bridgeAndBurn(uint256,uint256,bytes) (internal) + - _buyOLAS(uint256,uint256) (internal) + - _getLowSlippageSafeSwapAmount() (internal) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256,address,address) (public) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract IUniswap (Most derived contract) + - From IUniswap + - addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) (external) + - createPair(address,address) (external) + ++ Contract MemeFactory (Most derived contract) + - From MemeFactory + - _bridgeAndBurn(uint256,uint256,bytes) (internal) + - _buyOLAS(uint256,uint256) (internal) + - _collect(address,uint256,uint256,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _getLowSlippageSafeSwapAmount() (internal) + - _wrap(uint256) (internal) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleOLASForAscendance() (external) + - sendToHigherHeights(uint256,bytes) (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract IUniswap (Most derived contract) + - From IUniswap + - addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) (external) + - createPair(address,address) (external) + - swapExactETHForTokens(uint256,address[],address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _bridgeAndBurn(uint256,uint256,bytes) (internal) + - _buyOLAS(uint256,uint256) (internal) + - _collect(address,uint256,uint256,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _getLowSlippageSafeSwapAmount() (internal) + - _wrap(uint256) (internal) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleOLASForAscendance() (external) + - sendToHigherHeights(uint256,bytes) (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + ++ Contract IBalancer (Most derived contract) + - From IBalancer + - swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) (external) + ++ Contract IBridge (Most derived contract) + - From IBridge + - withdrawTo(address,address,uint256,uint32,bytes) (external) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + ++ Contract IOracle (Most derived contract) + - From IOracle + - latestRoundData() (external) + ++ Contract MemeBase (Most derived contract) + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _wrap(uint256) (internal) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleOLASForAscendance() (external) + - sendToHigherHeights(uint256,bytes) (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + - From MemeBase + - _bridgeAndBurn(uint256,uint256,bytes) (internal) + - _buyOLAS(uint256,uint256) (internal) + - _getLowSlippageSafeSwapAmount() (internal) + - constructor(address,address,address,address,uint256,address,address,bytes32) (public) + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_data-dependency.txt b/audits/internal/analysis/slither_data-dependency.txt new file mode 100644 index 0000000..5fb47c7 --- /dev/null +++ b/audits/internal/analysis/slither_data-dependency.txt @@ -0,0 +1,13371 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +Contract IMemeFactory ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function mapAccountActivities(address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| multisig | [] | +| | [] | ++----------+--------------+ +INFO:Printers: +Contract IMemeFactory ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function mapAccountActivities(address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| multisig | [] | +| | [] | ++----------+--------------+ +Contract MemeActivityChecker ++---------------+-------------------------------------+ +| Variable | Dependencies | ++---------------+-------------------------------------+ +| livenessRatio | ['_livenessRatio', 'livenessRatio'] | +| memeFactory | ['_memeFactory', 'memeFactory'] | ++---------------+-------------------------------------+ + +Function constructor(address,uint256) ++-----------------------------------+--------------------+ +| Variable | Dependencies | ++-----------------------------------+--------------------+ +| _memeFactory | [] | +| _livenessRatio | [] | +| MemeActivityChecker.livenessRatio | ['_livenessRatio'] | +| MemeActivityChecker.memeFactory | ['_memeFactory'] | ++-----------------------------------+--------------------+ +Function getMultisigNonces(address) ++-----------------------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------------------+---------------------------------------+ +| multisig | [] | +| nonces | ['memeFactory', 'multisig', 'nonces'] | +| MemeActivityChecker.livenessRatio | [] | +| MemeActivityChecker.memeFactory | ['memeFactory'] | ++-----------------------------------+---------------------------------------+ +Function isRatioPass(uint256[],uint256[],uint256) ++-----------------------------------+-------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------+-------------------------------------------------------------+ +| curNonces | ['curNonces'] | +| lastNonces | ['lastNonces'] | +| ts | [] | +| ratioPass | ['curNonces', 'lastNonces', 'livenessRatio', 'ratio', 'ts'] | +| ratio | ['curNonces', 'lastNonces', 'ts'] | +| MemeActivityChecker.livenessRatio | ['livenessRatio'] | +| MemeActivityChecker.memeFactory | [] | ++-----------------------------------+-------------------------------------------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactTokensForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Function swapExactTokensForTokens(uint256,uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountIn | [] | +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactTokensForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Function swapExactTokensForTokens(uint256,uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountIn | [] | +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_celo', '_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_celo'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_celo', '_nativeToken'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactTokensForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Function swapExactTokensForTokens(uint256,uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountIn | [] | +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_celo', '_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_celo'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_celo', '_nativeToken'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function transferTokens(address,uint256,uint16,bytes32,uint256,uint32) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| token | [] | +| amount | [] | +| recipientChain | [] | +| recipient | [] | +| arbiterFee | [] | +| nonce | [] | +| sequence | [] | ++----------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactTokensForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Function swapExactTokensForTokens(uint256,uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountIn | [] | +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_celo', '_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_celo'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_celo', '_nativeToken'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function transferTokens(address,uint256,uint16,bytes32,uint256,uint32) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| token | [] | +| amount | [] | +| recipientChain | [] | +| recipient | [] | +| arbiterFee | [] | +| nonce | [] | +| sequence | [] | ++----------------+--------------+ +Contract IOracle ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function latestRoundData() ++-----------------+--------------+ +| Variable | Dependencies | ++-----------------+--------------+ +| roundId | [] | +| answer | [] | +| startedAt | [] | +| updatedAt | [] | +| answeredInRound | [] | ++-----------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+[34m-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactTokensForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Function swapExactTokensForTokens(uint256,uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountIn | [] | +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_celo', '_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_celo'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_celo', '_nativeToken'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function transferTokens(address,uint256,uint16,bytes32,uint256,uint32) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| token | [] | +| amount | [] | +| recipientChain | [] | +| recipient | [] | +| arbiterFee | [] | +| nonce | [] | +| sequence | [] | ++----------------+--------------+ +Contract IOracle ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function latestRoundData() ++-----------------+--------------+ +| Variable | Dependencies | ++-----------------+--------------+ +| roundId | [] | +| answer | [] | +| startedAt | [] | +| updatedAt | [] | +| answeredInRound | [] | ++-----------------+--------------+ +Contract MemeCelo ++--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | ['OLAS_BURNER'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas', 'olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'OLAS_BURN_PERCENTAGE', '_nativeToken', '_olas', '_router', 'amounts', 'block.timestamp', 'bridgeAmount', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'nativeToken', 'nativeTokenAmount', 'olas', 'path', 'router', 'scheduledForAscendance', 'swapAmount', 'this', 'totalNativeTokenCommitted'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| SLIPPAGE | [] | +| WORMHOLE_BRIDGING_CUTOFF | ['WORMHOLE_BRIDGING_CUTOFF'] | +| WORMHOLE_ETH_CHAIN_ID | ['WORMHOLE_ETH_CHAIN_ID'] | +| celo | [] | +| l2TokenRelayer | ['_l2TokenRelayer', 'l2TokenRelayer'] | +| oracle | ['_oracle'] | +| nonce | ['localNonce', 'nonce'] | +| olasLeftovers | ['OLASAmount', 'OLAS_BURN_PERCENTAGE', 'WORMHOLE_BRIDGING_CUTOFF', '_nativeToken', '_olas', '_router', 'amounts', 'block.timestamp', 'bridgeAmount', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'nativeToken', 'nativeTokenAmount', 'olas', 'olasAmount', 'olasLeftovers', 'path', 'router', 'scheduledForAscendance', 'swapAmount', 'this', 'totalNativeTokenCommitted', 'transferAmount'] | ++--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256,address,address) ++------------------------------------+---------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------+ +| _olas | [] | +| _celo | [] | +| _router | [] | +| _factory | [] | +| _minNativeTokenValue | [] | +| _l2TokenRelayer | [] | +| _oracle | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | [] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | [] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | ['_l2TokenRelayer'] | +| MemeCelo.oracle | ['_oracle'] | +| MemeCelo.nonce | [] | +| MemeCelo.olasLeftovers | [] | ++------------------------------------+---------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | [] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | [] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | [] | +| MemeCelo.oracle | [] | +| MemeCelo.nonce | [] | +| MemeCelo.olasLeftovers | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ +| nativeTokenAmount | ['swapAmount'] | +| limit | ['limit'] | +| | [] | +| path | ['nativeToken', 'olas', 'path'] | +| amounts | ['amounts', 'block.timestamp', 'limit', 'nativeToken', 'nativeTokenAmount', 'olas', 'path', 'router', 'swapAmount', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | ['olas'] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | [] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | [] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | [] | +| MemeCelo.oracle | [] | +| MemeCelo.nonce | [] | +| MemeCelo.olasLeftovers | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+---------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------+ +| olasAmount | ['OLASAmount', 'WORMHOLE_BRIDGING_CUTOFF', 'olasAmount', 'olasLeftovers', 'transferAmount'] | +| | [] | +| transferAmount | ['OLASAmount', 'WORMHOLE_BRIDGING_CUTOFF', 'olasAmount', 'olasLeftovers', 'transferAmount'] | +| olasBurner | ['OLAS_BURNER'] | +| localNonce | ['nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | ['OLAS_BURNER'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | ['olas'] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | ['WORMHOLE_BRIDGING_CUTOFF'] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | ['WORMHOLE_ETH_CHAIN_ID'] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | ['l2TokenRelayer'] | +| MemeCelo.oracle | [] | +| MemeCelo.nonce | ['localNonce', 'nonce'] | +| MemeCelo.olasLeftovers | ['OLASAmount', 'WORMHOLE_BRIDGING_CUTOFF', 'olasAmount', 'olasLeftovers', 'transferAmount'] | ++------------------------------------+---------------------------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | [] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | [] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | [] | +| MemeCelo.oracle | [] | +| MemeCelo.nonce | [] | +| MemeCelo.olasLeftovers | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | [] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | [] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | [] | +| MemeCelo.oracle | [] | +| MemeCelo.nonce | [] | +| MemeCelo.olasLeftovers | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeCelo.SLIPPAGE | [] | +| MemeCelo.WORMHOLE_BRIDGING_CUTOFF | [] | +| MemeCelo.WORMHOLE_ETH_CHAIN_ID | [] | +| MemeCelo.celo | [] | +| MemeCelo.l2TokenRelayer | [] | +| MemeCelo.oracle | [] | +| MemeCelo.nonce | [] | +| MemeCelo.olasLeftovers | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| _olas | [] | +| _nativeToken | [] | +| _router | [] | +| _factory | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++------------------------[0m--------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', '_weth', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_weth'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken', '_weth'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', '_weth', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_weth'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken', '_weth'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBalancer ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) ++------------+--------------+ +| Variable | Dependencies | ++------------+--------------+ +| singleSwap | [] | +| funds | [] | +| limit | [] | +| deadline | [] | +| | [] | ++------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', '_weth', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_weth'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken', '_weth'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBalancer ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) ++------------+--------------+ +| Variable | Dependencies | ++------------+--------------+ +| singleSwap | [] | +| funds | [] | +| limit | [] | +| deadline | [] | +| | [] | ++------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function withdrawTo(address,address,uint256,uint32,bytes) ++-------------+--------------+ +| Variable | Dependencies | ++-------------+--------------+ +| l2Token | [] | +| to | [] | +| amount | [] | +| minGasLimit | [] | +| extraData | [] | ++-------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', '_weth', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_weth'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken', '_weth'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBalancer ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) ++------------+--------------+ +| Variable | Dependencies | ++------------+--------------+ +| singleSwap | [] | +| funds | [] | +| limit | [] | +| deadline | [] | +| | [] | ++------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function withdrawTo(address,address,uint256,uint32,bytes) ++-------------+--------------+ +| Variable | Dependencies | ++-------------+--------------+ +| l2Token | [] | +| to | [] | +| amount | [] | +| minGasLimit | [] | +| extraData | [] | ++-------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', '_weth', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_weth'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken', '_weth'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBalancer ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) ++------------+--------------+ +| Variable | Dependencies | ++------------+--------------+ +| singleSwap | [] | +| funds | [] | +| limit | [] | +| deadline | [] | +| | [] | ++------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function withdrawTo(address,address,uint256,uint32,bytes) ++-------------+--------------+ +| Variable | Dependencies | ++-------------+--------------+ +| l2Token | [] | +| to | [] | +| amount | [] | +| minGasLimit | [] | +| extraData | [] | ++-------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IOracle ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function latestRoundData() ++-----------------+--------------+ +| Variable | Dependencies | ++-----------------+--------------+ +| roundId | [] | +| answer | [] | +| startedAt | [] | +| updatedAt | [] | +| answeredInRound | [] | ++-----------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract IUniswap ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createPair(address,address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| pair | [] | ++----------+--------------+ +Function addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) ++----------------+--------------+ +| Variable | Dependencies | ++----------------+--------------+ +| tokenA | [] | +| tokenB | [] | +| amountADesired | [] | +| amountBDesired | [] | +| amountAMin | [] | +| amountBMin | [] | +| to | [] | +| deadline | [] | +| amountA | [] | +| amountB | [] | +| liquidity | [] | ++----------------+--------------+ +Function swapExactETHForTokens(uint256,address[],address,uint256) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| amountOutMin | [] | +| path | [] | +| to | [] | +| deadline | [] | +| amounts | [] | ++--------------+--------------+ +Contract MemeFactory ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | [] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', '_weth', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_weth'] | +| _router | ['_router'] | +| _factory | ['_factory'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken', '_weth'] | +| MemeFactory.router | ['_router'] | +| MemeFactory.factory | ['_factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY [34m| [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| limit | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| OLASAmount | [] | +| tokenGasLimit | [] | +| bridgePayload | [] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| memeTokenAmount | ['lpTokenAmount'] | +| pair | ['factory', 'memeToken', 'nativeToken'] | +| liquidity | ['TUPLE_0', 'block.timestamp', 'lpTokenAmount', 'memeToken', 'memeTokenAmount', 'nativeToken', 'nativeTokenAmount', 'router', 'this', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | ['router'] | +| MemeFactory.factory | ['factory'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['hearterContribution'] | +| hearterContribution | ['heartersAmount'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-----------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------+ +| nativeTokenAmount | ['nativeTokenAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| totalNativeTokenCommitted | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'totalNativeTokenCommitted'] | +| burnPercentageOfReferenceToken | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| lpTokenAmount | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'lpTokenAmount', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| pool | ['TUPLE_1'] | +| liquidity | ['TUPLE_1'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleOLASForAscendance() ++------------------------------------+----------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------+ +| localAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| limit | [] | +| swapAmount | ['limit', 'localAscendance', 'scheduledForAscendance', 'swapAmount'] | +| OLASAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['limit', 'localAscendance', 'scheduledForAscendance'] | +| MemeFactory.bridgeAmount | ['OLASAmount', 'bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------+ +Function sendToHigherHeights(uint256,bytes) ++------------------------------------+--------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------+ +| tokenGasLimit | [] | +| bridgePayload | [] | +| OLASAmount | ['bridgeAmount'] | +| leftovers | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | ['bridgeAmount'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IBalancer ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) ++------------+--------------+ +| Variable | Dependencies | ++------------+--------------+ +| singleSwap | [] | +| funds | [] | +| limit | [] | +| deadline | [] | +| | [] | ++------------+--------------+ +Contract IBridge ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function withdrawTo(address,address,uint256,uint32,bytes) ++-------------+--------------+ +| Variable | Dependencies | ++-------------+--------------+ +| l2Token | [] | +| to | [] | +| amount | [] | +| minGasLimit | [] | +| extraData | [] | ++-------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Contract IOracle ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function latestRoundData() ++-----------------+--------------+ +| Variable | Dependencies | ++-----------------+--------------+ +| roundId | [] | +| answer | [] | +| startedAt | [] | +| updatedAt | [] | +| answeredInRound | [] | ++-----------------+--------------+ +Contract MemeBase ++------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| OLAS_BURNER | ['OLAS_BURNER'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas', 'olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| router | ['_router', 'router'] | +| factory | ['_factory', 'factory'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'burnPercentageOfReferenceToken', 'limit', 'localAscendance', 'memeSummon', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| bridgeAmount | ['IBalancer', 'OLASAmount', 'OLAS_BURN_PERCENTAGE', '_balancerPoolId', '_balancerVault', '_nativeToken', '_olas', 'balancerPoolId', 'balancerVault', 'block.timestamp', 'bridgeAmount', 'burnPercentageOfReferenceToken', 'fundManagement', 'limit', 'localAscendance', 'memeSummon', 'nativeToken', 'nativeTokenAmount', 'olas', 'scheduledForAscendance', 'singleSwap', 'swapAmount', 'this', 'totalNativeTokenCommitted'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'block.timestamp', 'heartersAmount', 'lpTokenAmount', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| SLIPPAGE | [] | +| TOKEN_GAS_LIMIT | ['TOKEN_GAS_LIMIT'] | +| l2TokenRelayer | ['_l2TokenRelayer', 'l2TokenRelayer'] | +| balancerVault | ['_balancerVault', 'balancerVault'] | +| balancerPoolId | ['_balancerPoolId', 'balancerPoolId'] | ++------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256,address,address,bytes32) ++------------------------------------+---------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------+ +| _olas | [] | +| _weth | [] | +| _router | [] | +| _factory | [] | +| _minNativeTokenValue | [] | +| _l2TokenRelayer | [] | +| _balancerVault | [] | +| _balancerPoolId | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.SLIPPAGE | [] | +| MemeBase.TOKEN_GAS_LIMIT | [] | +| MemeBase.l2TokenRelayer | ['_l2TokenRelayer'] | +| MemeBase.balancerVault | ['_balancerVault'] | +| MemeBase.balancerPoolId | ['_balancerPoolId'] | ++------------------------------------+---------------------+ +Function _getLowSlippageSafeSwapAmount() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.SLIPPAGE | [] | +| MemeBase.TOKEN_GAS_LIMIT | [] | +| MemeBase.l2TokenRelayer | [] | +| MemeBase.balancerVault | [] | +| MemeBase.balancerPoolId | [] | ++------------------------------------+--------------+ +Function _buyOLAS(uint256,uint256) ++------------------------------------+-------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------------------------+ +| nativeTokenAmount | ['swapAmount'] | +| limit | ['limit'] | +| | [] | +| singleSwap | ['IBalancer', 'balancerPoolId', 'nativeToken', 'nativeTokenAmount', 'olas', 'swapAmount'] | +| fundManagement | ['this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | ['olas'] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.SLIPPAGE | [] | +| MemeBase.TOKEN_GAS_LIMIT | [] | +| MemeBase.l2TokenRelayer | [] | +| MemeBase.balancerVault | ['balancerVault'] | +| MemeBase.balancerPoolId | ['balancerPoolId'] | ++------------------------------------+-------------------------------------------------------------------------------------------+ +Function _bridgeAndBurn(uint256,uint256,bytes) ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| olasAmount | ['OLASAmount'] | +| tokenGasLimit | ['TOKEN_GAS_LIMIT', 'tokenGasLimit'] | +| | [] | +| data | ['OLASAmount', 'olasAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | ['OLAS_BURNER'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | ['olas'] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.SLIPPAGE | [] | +| MemeBase.TOKEN_GAS_LIMIT | ['TOKEN_GAS_LIMIT'] | +| MemeBase.l2TokenRelayer | ['l2TokenRelayer'] | +| MemeBase.balancerVault | [] | +| MemeBase.balancerPoolId | [] | ++------------------------------------+--------------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.SLIPPAGE | [] | +| MemeBase.TOKEN_GAS_LIMIT | [] | +| MemeBase.l2TokenRelayer | [] | +| MemeBase.balancerVault | [] | +| MemeBase.balancerPoolId | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.OLAS_BURNER | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.router | [] | +| MemeFactory.factory | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory.bridgeAmount | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.SLIPPAGE | [] | +| MemeBase.TOKEN_GAS_LIMIT | [] | +| MemeBase.l2TokenRelayer | [] | +| MemeBase.balancerVault | [] | +| MemeBase.balancerPoolId | [] | ++------------------------------------+--------------+ +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_full.txt b/audits/internal/analysis/slither_full.txt new file mode 100644 index 0000000..8fff0f7 --- /dev/null +++ b/audits/internal/analysis/slither_full.txt @@ -0,0 +1,639 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Ignore +INFO:Detectors: +MemeFactory._wrap(uint256) (MemeCelo-flatten.sol#460-463) sends eth to arbitrary user + Dangerous calls: + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations + +False +INFO:Detectors: +Reentrancy in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697): + External calls: + - tx.origin.call{value: leftovers}() (MemeCelo-flatten.sol#693) + State variables written after the call(s): + - _locked = 1 (MemeCelo-flatten.sol#696) + MemeFactory._locked (MemeCelo-flatten.sol#351) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) + - MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) + - MemeFactory.scheduleOLASForAscendance() (MemeCelo-flatten.sol#640-669) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697) + - MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeCelo-flatten.sol#415) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeCelo-flatten.sol#418) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeCelo-flatten.sol#419) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeCelo-flatten.sol#422-431) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + State variables written after the call(s): + - memeSummon.unleashTime = block.timestamp (MemeCelo-flatten.sol#560) + MemeFactory.memeSummons (MemeCelo-flatten.sol#354) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) + - MemeFactory.heartThisMeme(address) (MemeCelo-flatten.sol#500-524) + - MemeFactory.memeSummons (MemeCelo-flatten.sol#354) + - MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) + - MemeFactory.summonThisMeme(string,string,uint256) (MemeCelo-flatten.sol#469-496) + - MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) + - memeSummon.heartersAmount = heartersAmount (MemeCelo-flatten.sol#562) + MemeFactory.memeSummons (MemeCelo-flatten.sol#354) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) + - MemeFactory.heartThisMeme(address) (MemeCelo-flatten.sol#500-524) + - MemeFactory.memeSummons (MemeCelo-flatten.sol#354) + - MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) + - MemeFactory.summonThisMeme(string,string,uint256) (MemeCelo-flatten.sol#469-496) + - MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) + +False +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeCelo-flatten.sol#415) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeCelo-flatten.sol#418) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeCelo-flatten.sol#419) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeCelo-flatten.sol#422-431) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeCelo-flatten.sol#570) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeCelo-flatten.sol#455) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + State variables written after the call(s): + - _locked = 1 (MemeCelo-flatten.sol#575) + MemeFactory._locked (MemeCelo-flatten.sol#351) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) + - MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) + - MemeFactory.scheduleOLASForAscendance() (MemeCelo-flatten.sol#640-669) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697) + - MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities + +Ignore +INFO:Detectors: +MemeFactory._collect(address,uint256,uint256,uint256) (MemeCelo-flatten.sol#439-458) ignores return value by memeTokenInstance.transfer(msg.sender,allocation) (MemeCelo-flatten.sol#455) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer + +Ignore +INFO:Detectors: +Manipulated call found: tx.origin.call{value: leftovers}() (MemeCelo-flatten.sol#693) in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697) +Only the destination could be manipulated +Reference: https://github.com/pessimistic-io/slitherin/blob/master/docs/arbitrary_call.md + +OK, proved +INFO:Detectors: +MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825) performs a multiplication on the result of a division: + - transferAmount = olasAmount / WORMHOLE_BRIDGING_CUTOFF (MemeCelo-flatten.sol#800) + - transferAmount *= WORMHOLE_BRIDGING_CUTOFF (MemeCelo-flatten.sol#801) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply +INFO:Detectors: +Reentrancy in MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825): + External calls: + - IERC20(olas).approve(l2TokenRelayer,transferAmount) (MemeCelo-flatten.sol#810) + - IBridge(l2TokenRelayer).transferTokens(olas,transferAmount,WORMHOLE_ETH_CHAIN_ID,olasBurner,0,uint32(nonce)) (MemeCelo-flatten.sol#817) + State variables written after the call(s): + - nonce = localNonce + 1 (MemeCelo-flatten.sol#820) + MemeCelo.nonce (MemeCelo-flatten.sol#742) can be used in cross function reentrancies: + - MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825) + - MemeCelo.nonce (MemeCelo-flatten.sol#742) + +False +Reentrancy in MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605): + External calls: + - _collect(memeToken,hearterContribution,memeSummon.heartersAmount,memeSummon.nativeTokenContributed) (MemeCelo-flatten.sol#602) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeCelo-flatten.sol#455) + State variables written after the call(s): + - _locked = 1 (MemeCelo-flatten.sol#604) + MemeFactory._locked (MemeCelo-flatten.sol#351) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) + - MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) + - MemeFactory.scheduleOLASForAscendance() (MemeCelo-flatten.sol#640-669) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697) + - MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) + +False +Reentrancy in MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637): + External calls: + - memeTokenInstance.burn(remainingBalance) (MemeCelo-flatten.sol#632) + State variables written after the call(s): + - _locked = 1 (MemeCelo-flatten.sol#636) + MemeFactory._locked (MemeCelo-flatten.sol#351) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) + - MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) + - MemeFactory.scheduleOLASForAscendance() (MemeCelo-flatten.sol#640-669) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697) + - MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1 + +OK, noticed it +INFO:Detectors: +MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697) ignores return value by tx.origin.call{value: leftovers}() (MemeCelo-flatten.sol#693) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls + +Ignore +INFO:Detectors: +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeCelo-flatten.sol#404-432) ignores return value by IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeCelo-flatten.sol#418) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeCelo-flatten.sol#404-432) ignores return value by IERC20(memeToken).approve(router,memeTokenAmount) (MemeCelo-flatten.sol#419) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeCelo-flatten.sol#404-432) ignores return value by (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeCelo-flatten.sol#422-431) +MemeCelo._buyOLAS(uint256,uint256) (MemeCelo-flatten.sol#770-790) ignores return value by IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeCelo-flatten.sol#776) +MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825) ignores return value by IERC20(olas).approve(l2TokenRelayer,transferAmount) (MemeCelo-flatten.sol#810) +MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825) ignores return value by IBridge(l2TokenRelayer).transferTokens(olas,transferAmount,WORMHOLE_ETH_CHAIN_ID,olasBurner,0,uint32(nonce)) (MemeCelo-flatten.sol#817) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return + +OK, proved +INFO:Detectors: +Dubious typecast in MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825): + uint256 => uint32 casting occurs in IBridge(l2TokenRelayer).transferTokens(olas,transferAmount,WORMHOLE_ETH_CHAIN_ID,olasBurner,0,uint32(nonce)) (MemeCelo-flatten.sol#817) +Reference: https://github.com/pessimistic-io/slitherin/blob/master/docs/dubious_typecast.md + +OK, ignore +INFO:Detectors: +MemeCelo.constructor(address,address,address,address,uint256,address,address)._l2TokenRelayer (MemeCelo-flatten.sol#753) lacks a zero-check on : + - l2TokenRelayer = _l2TokenRelayer (MemeCelo-flatten.sol#756) +MemeCelo.constructor(address,address,address,address,uint256,address,address)._oracle (MemeCelo-flatten.sol#754) lacks a zero-check on : + - oracle = _oracle (MemeCelo-flatten.sol#757) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation + +False +INFO:Detectors: +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeCelo-flatten.sol#415) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeCelo-flatten.sol#418) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeCelo-flatten.sol#419) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeCelo-flatten.sol#422-431) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + State variables written after the call(s): + - mapAccountActivities[msg.sender] ++ (MemeCelo-flatten.sol#565) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2 + +False +INFO:Detectors: +Reentrancy in MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825): + External calls: + - IERC20(olas).approve(l2TokenRelayer,transferAmount) (MemeCelo-flatten.sol#810) + - IBridge(l2TokenRelayer).transferTokens(olas,transferAmount,WORMHOLE_ETH_CHAIN_ID,olasBurner,0,uint32(nonce)) (MemeCelo-flatten.sol#817) + Event emitted after the call(s): + - OLASJourneyToAscendance(olas,transferAmount) (MemeCelo-flatten.sol#822) +Reentrancy in MemeFactory._collect(address,uint256,uint256,uint256) (MemeCelo-flatten.sol#439-458): + External calls: + - memeTokenInstance.transfer(msg.sender,allocation) (MemeCelo-flatten.sol#455) + Event emitted after the call(s): + - Collected(msg.sender,memeToken,allocation) (MemeCelo-flatten.sol#457) +Reentrancy in MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637): + External calls: + - memeTokenInstance.burn(remainingBalance) (MemeCelo-flatten.sol#632) + Event emitted after the call(s): + - Purged(memeToken,remainingBalance) (MemeCelo-flatten.sol#634) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeCelo-flatten.sol#415) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeCelo-flatten.sol#418) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeCelo-flatten.sol#419) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeCelo-flatten.sol#422-431) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeCelo-flatten.sol#570) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeCelo-flatten.sol#455) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeCelo-flatten.sol#557) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeCelo-flatten.sol#462) + Event emitted after the call(s): + - Collected(msg.sender,memeToken,allocation) (MemeCelo-flatten.sol#457) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeCelo-flatten.sol#570) + - Unleashed(msg.sender,memeToken,pool,liquidity,burnPercentageOfReferenceToken) (MemeCelo-flatten.sol#573) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3 + +Ignore +INFO:Detectors: +ERC20.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (MemeCelo-flatten.sol#119-163) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) (MemeCelo-flatten.sol#128) +MemeFactory.unleashThisMeme(address) (MemeCelo-flatten.sol#528-576) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) (MemeCelo-flatten.sol#539) + - require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) (MemeCelo-flatten.sol#541) +MemeFactory.collectThisMeme(address) (MemeCelo-flatten.sol#580-605) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) (MemeCelo-flatten.sol#588) + - require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) (MemeCelo-flatten.sol#590) +MemeFactory.purgeThisMeme(address) (MemeCelo-flatten.sol#609-637) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) (MemeCelo-flatten.sol#617) + - require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) (MemeCelo-flatten.sol#619) +MemeCelo._bridgeAndBurn(uint256,uint256,bytes) (MemeCelo-flatten.sol#795-825) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(transferAmount > 0,Amount is too small for bridging) (MemeCelo-flatten.sol#804) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp +INFO:Detectors: + +Ignore +MemeFactory._wrap(uint256) (MemeCelo-flatten.sol#460-463) is never used and should be removed +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code + +OK, noticed +INFO:Detectors: +Low level call in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeCelo-flatten.sol#675-697): + - tx.origin.call{value: leftovers}() (MemeCelo-flatten.sol#693) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls + +INFO:Detectors: +Reentrancy in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683): + External calls: + - tx.origin.call{value: leftovers}() (MemeFactory-flatten.sol#679) + State variables written after the call(s): + - _locked = 1 (MemeFactory-flatten.sol#682) + MemeFactory._locked (MemeFactory-flatten.sol#337) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) + - MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) + - MemeFactory.scheduleOLASForAscendance() (MemeFactory-flatten.sol#626-655) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683) + - MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeFactory-flatten.sol#401) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeFactory-flatten.sol#404) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeFactory-flatten.sol#405) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeFactory-flatten.sol#408-417) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + State variables written after the call(s): + - memeSummon.unleashTime = block.timestamp (MemeFactory-flatten.sol#546) + MemeFactory.memeSummons (MemeFactory-flatten.sol#340) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) + - MemeFactory.heartThisMeme(address) (MemeFactory-flatten.sol#486-510) + - MemeFactory.memeSummons (MemeFactory-flatten.sol#340) + - MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) + - MemeFactory.summonThisMeme(string,string,uint256) (MemeFactory-flatten.sol#455-482) + - MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) + - memeSummon.heartersAmount = heartersAmount (MemeFactory-flatten.sol#548) + MemeFactory.memeSummons (MemeFactory-flatten.sol#340) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) + - MemeFactory.heartThisMeme(address) (MemeFactory-flatten.sol#486-510) + - MemeFactory.memeSummons (MemeFactory-flatten.sol#340) + - MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) + - MemeFactory.summonThisMeme(string,string,uint256) (MemeFactory-flatten.sol#455-482) + - MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeFactory-flatten.sol#401) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeFactory-flatten.sol#404) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeFactory-flatten.sol#405) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeFactory-flatten.sol#408-417) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeFactory-flatten.sol#556) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeFactory-flatten.sol#441) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + State variables written after the call(s): + - _locked = 1 (MemeFactory-flatten.sol#561) + MemeFactory._locked (MemeFactory-flatten.sol#337) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) + - MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) + - MemeFactory.scheduleOLASForAscendance() (MemeFactory-flatten.sol#626-655) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683) + - MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities + +INFO:Detectors: +MemeFactory._collect(address,uint256,uint256,uint256) (MemeFactory-flatten.sol#425-444) ignores return value by memeTokenInstance.transfer(msg.sender,allocation) (MemeFactory-flatten.sol#441) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer + +INFO:Detectors: +Manipulated call found: tx.origin.call{value: leftovers}() (MemeFactory-flatten.sol#679) in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683) +Only the destination could be manipulated +Reference: https://github.com/pessimistic-io/slitherin/blob/master/docs/arbitrary_call.md + +INFO:Detectors: +Reentrancy in MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591): + External calls: + - _collect(memeToken,hearterContribution,memeSummon.heartersAmount,memeSummon.nativeTokenContributed) (MemeFactory-flatten.sol#588) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeFactory-flatten.sol#441) + State variables written after the call(s): + - _locked = 1 (MemeFactory-flatten.sol#590) + MemeFactory._locked (MemeFactory-flatten.sol#337) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) + - MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) + - MemeFactory.scheduleOLASForAscendance() (MemeFactory-flatten.sol#626-655) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683) + - MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) +Reentrancy in MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623): + External calls: + - memeTokenInstance.burn(remainingBalance) (MemeFactory-flatten.sol#618) + State variables written after the call(s): + - _locked = 1 (MemeFactory-flatten.sol#622) + MemeFactory._locked (MemeFactory-flatten.sol#337) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) + - MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) + - MemeFactory.scheduleOLASForAscendance() (MemeFactory-flatten.sol#626-655) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683) + - MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1 + +INFO:Detectors: +MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683) ignores return value by tx.origin.call{value: leftovers}() (MemeFactory-flatten.sol#679) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls + + +INFO:Detectors: +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeFactory-flatten.sol#401) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeFactory-flatten.sol#404) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeFactory-flatten.sol#405) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeFactory-flatten.sol#408-417) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + State variables written after the call(s): + - mapAccountActivities[msg.sender] ++ (MemeFactory-flatten.sol#551) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2 + +INFO:Detectors: +Reentrancy in MemeFactory._collect(address,uint256,uint256,uint256) (MemeFactory-flatten.sol#425-444): + External calls: + - memeTokenInstance.transfer(msg.sender,allocation) (MemeFactory-flatten.sol#441) + Event emitted after the call(s): + - Collected(msg.sender,memeToken,allocation) (MemeFactory-flatten.sol#443) +Reentrancy in MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623): + External calls: + - memeTokenInstance.burn(remainingBalance) (MemeFactory-flatten.sol#618) + Event emitted after the call(s): + - Purged(memeToken,remainingBalance) (MemeFactory-flatten.sol#620) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeFactory-flatten.sol#401) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeFactory-flatten.sol#404) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeFactory-flatten.sol#405) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeFactory-flatten.sol#408-417) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeFactory-flatten.sol#556) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeFactory-flatten.sol#441) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeFactory-flatten.sol#543) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeFactory-flatten.sol#448) + Event emitted after the call(s): + - Collected(msg.sender,memeToken,allocation) (MemeFactory-flatten.sol#443) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeFactory-flatten.sol#556) + - Unleashed(msg.sender,memeToken,pool,liquidity,burnPercentageOfReferenceToken) (MemeFactory-flatten.sol#559) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3 + +INFO:Detectors: +ERC20.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (MemeFactory-flatten.sol#118-162) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) (MemeFactory-flatten.sol#127) +MemeFactory.unleashThisMeme(address) (MemeFactory-flatten.sol#514-562) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) (MemeFactory-flatten.sol#525) + - require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) (MemeFactory-flatten.sol#527) +MemeFactory.collectThisMeme(address) (MemeFactory-flatten.sol#566-591) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) (MemeFactory-flatten.sol#574) + - require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) (MemeFactory-flatten.sol#576) +MemeFactory.purgeThisMeme(address) (MemeFactory-flatten.sol#595-623) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) (MemeFactory-flatten.sol#603) + - require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) (MemeFactory-flatten.sol#605) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp + +INFO:Detectors: +Low level call in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeFactory-flatten.sol#661-683): + - tx.origin.call{value: leftovers}() (MemeFactory-flatten.sol#679) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls + + +INFO:Detectors: +MemeFactory._wrap(uint256) (MemeBase-flatten.sol#439-442) sends eth to arbitrary user + Dangerous calls: + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations + +INFO:Detectors: +Reentrancy in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676): + External calls: + - tx.origin.call{value: leftovers}() (MemeBase-flatten.sol#672) + State variables written after the call(s): + - _locked = 1 (MemeBase-flatten.sol#675) + MemeFactory._locked (MemeBase-flatten.sol#330) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) + - MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) + - MemeFactory.scheduleOLASForAscendance() (MemeBase-flatten.sol#619-648) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676) + - MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeBase-flatten.sol#394) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeBase-flatten.sol#397) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeBase-flatten.sol#398) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeBase-flatten.sol#401-410) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + State variables written after the call(s): + - memeSummon.unleashTime = block.timestamp (MemeBase-flatten.sol#539) + MemeFactory.memeSummons (MemeBase-flatten.sol#333) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) + - MemeFactory.heartThisMeme(address) (MemeBase-flatten.sol#479-503) + - MemeFactory.memeSummons (MemeBase-flatten.sol#333) + - MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) + - MemeFactory.summonThisMeme(string,string,uint256) (MemeBase-flatten.sol#448-475) + - MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) + - memeSummon.heartersAmount = heartersAmount (MemeBase-flatten.sol#541) + MemeFactory.memeSummons (MemeBase-flatten.sol#333) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) + - MemeFactory.heartThisMeme(address) (MemeBase-flatten.sol#479-503) + - MemeFactory.memeSummons (MemeBase-flatten.sol#333) + - MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) + - MemeFactory.summonThisMeme(string,string,uint256) (MemeBase-flatten.sol#448-475) + - MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeBase-flatten.sol#394) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeBase-flatten.sol#397) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeBase-flatten.sol#398) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeBase-flatten.sol#401-410) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeBase-flatten.sol#549) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeBase-flatten.sol#434) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + State variables written after the call(s): + - _locked = 1 (MemeBase-flatten.sol#554) + MemeFactory._locked (MemeBase-flatten.sol#330) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) + - MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) + - MemeFactory.scheduleOLASForAscendance() (MemeBase-flatten.sol#619-648) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676) + - MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities + +INFO:Detectors: +MemeFactory._collect(address,uint256,uint256,uint256) (MemeBase-flatten.sol#418-437) ignores return value by memeTokenInstance.transfer(msg.sender,allocation) (MemeBase-flatten.sol#434) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer + +INFO:Detectors: +Manipulated call found: tx.origin.call{value: leftovers}() (MemeBase-flatten.sol#672) in MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676) +Only the destination could be manipulated +Reference: https://github.com/pessimistic-io/slitherin/blob/master/docs/arbitrary_call.md + +INFO:Detectors: +Reentrancy in MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584): + External calls: + - _collect(memeToken,hearterContribution,memeSummon.heartersAmount,memeSummon.nativeTokenContributed) (MemeBase-flatten.sol#581) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeBase-flatten.sol#434) + State variables written after the call(s): + - _locked = 1 (MemeBase-flatten.sol#583) + MemeFactory._locked (MemeBase-flatten.sol#330) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) + - MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) + - MemeFactory.scheduleOLASForAscendance() (MemeBase-flatten.sol#619-648) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676) + - MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) +Reentrancy in MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616): + External calls: + - memeTokenInstance.burn(remainingBalance) (MemeBase-flatten.sol#611) + State variables written after the call(s): + - _locked = 1 (MemeBase-flatten.sol#615) + MemeFactory._locked (MemeBase-flatten.sol#330) can be used in cross function reentrancies: + - MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) + - MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) + - MemeFactory.scheduleOLASForAscendance() (MemeBase-flatten.sol#619-648) + - MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676) + - MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1 + +INFO:Detectors: +MemeFactory.sendToHigherHeights(uint256,bytes) (MemeBase-flatten.sol#654-676) ignores return value by tx.origin.call{value: leftovers}() (MemeBase-flatten.sol#672) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls + +INFO:Detectors: +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#383-411) ignores return value by IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeBase-flatten.sol#397) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#383-411) ignores return value by IERC20(memeToken).approve(router,memeTokenAmount) (MemeBase-flatten.sol#398) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#383-411) ignores return value by (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeBase-flatten.sol#401-410) +MemeBase._buyOLAS(uint256,uint256) (MemeBase-flatten.sol#779-794) ignores return value by IERC20(nativeToken).approve(balancerVault,nativeTokenAmount) (MemeBase-flatten.sol#784) +MemeBase._bridgeAndBurn(uint256,uint256,bytes) (MemeBase-flatten.sol#800-818) ignores return value by IERC20(olas).approve(l2TokenRelayer,olasAmount) (MemeBase-flatten.sol#802) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return + +INFO:Detectors: +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeBase-flatten.sol#394) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeBase-flatten.sol#397) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeBase-flatten.sol#398) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeBase-flatten.sol#401-410) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + State variables written after the call(s): + - mapAccountActivities[msg.sender] ++ (MemeBase-flatten.sol#544) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2 + +INFO:Detectors: +Reentrancy in MemeBase._bridgeAndBurn(uint256,uint256,bytes) (MemeBase-flatten.sol#800-818): + External calls: + - IERC20(olas).approve(l2TokenRelayer,olasAmount) (MemeBase-flatten.sol#802) + - IBridge(l2TokenRelayer).withdrawTo(olas,OLAS_BURNER,olasAmount,uint32(tokenGasLimit),data) (MemeBase-flatten.sol#813) + Event emitted after the call(s): + - OLASJourneyToAscendance(olas,olasAmount) (MemeBase-flatten.sol#815) +Reentrancy in MemeFactory._collect(address,uint256,uint256,uint256) (MemeBase-flatten.sol#418-437): + External calls: + - memeTokenInstance.transfer(msg.sender,allocation) (MemeBase-flatten.sol#434) + Event emitted after the call(s): + - Collected(msg.sender,memeToken,allocation) (MemeBase-flatten.sol#436) +Reentrancy in MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616): + External calls: + - memeTokenInstance.burn(remainingBalance) (MemeBase-flatten.sol#611) + Event emitted after the call(s): + - Purged(memeToken,remainingBalance) (MemeBase-flatten.sol#613) + +Reentrancy in MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555): + External calls: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + - pair = IUniswap(factory).createPair(nativeToken,memeToken) (MemeBase-flatten.sol#394) + - IERC20(nativeToken).approve(router,nativeTokenAmount) (MemeBase-flatten.sol#397) + - IERC20(memeToken).approve(router,memeTokenAmount) (MemeBase-flatten.sol#398) + - (None,None,liquidity) = IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp) (MemeBase-flatten.sol#401-410) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeBase-flatten.sol#549) + - memeTokenInstance.transfer(msg.sender,allocation) (MemeBase-flatten.sol#434) + External calls sending eth: + - (pool,liquidity) = _createUniswapPair(memeToken,totalNativeTokenCommitted,lpTokenAmount) (MemeBase-flatten.sol#536) + - IWETH(nativeToken).deposit{value: nativeTokenAmount}() (MemeBase-flatten.sol#441) + Event emitted after the call(s): + - Collected(msg.sender,memeToken,allocation) (MemeBase-flatten.sol#436) + - _collect(memeToken,hearterContribution,heartersAmount,totalNativeTokenCommitted) (MemeBase-flatten.sol#549) + - Unleashed(msg.sender,memeToken,pool,liquidity,burnPercentageOfReferenceToken) (MemeBase-flatten.sol#552) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3 + +INFO:Detectors: +ERC20.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (MemeBase-flatten.sol#120-164) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) (MemeBase-flatten.sol#129) +MemeFactory.unleashThisMeme(address) (MemeBase-flatten.sol#507-555) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) (MemeBase-flatten.sol#518) + - require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) (MemeBase-flatten.sol#520) +MemeFactory.collectThisMeme(address) (MemeBase-flatten.sol#559-584) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) (MemeBase-flatten.sol#567) + - require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) (MemeBase-flatten.sol#569) +MemeFactory.purgeThisMeme(address) (MemeBase-flatten.sol#588-616) uses timestamp for comparisons + Dangerous comparisons: + - require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) (MemeBase-flatten.sol#596) + - require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) (MemeBase-flatten.sol#598) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp + + diff --git a/audits/internal/analysis/slither_function-summary.txt b/audits/internal/analysis/slither_function-summary.txt new file mode 100644 index 0000000..bacaa28 --- /dev/null +++ b/audits/internal/analysis/slither_function-summary.txt @@ -0,0 +1,867 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +Contract IMemeFactory +Contract vars: [] +Inheritance:: [] + ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| mapAccountActivities(address) | external | [] | [] | [] | [] | [] | 2 | ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeActivityChecker +Contract vars: ['livenessRatio', 'memeFactory'] +Inheritance:: [] + ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ +| constructor(address,uint256) | public | [] | [] | ['livenessRatio', 'memeFactory'] | ['revert ZeroAddress()', 'revert ZeroValue()'] | [] | 3 | +| getMultisigNonces(address) | external | [] | ['memeFactory'] | [] | [] | ['IMemeFactory(memeFactory).mapAccountActivities(multisig)', 'new uint256[](1)'] | 1 | +| isRatioPass(uint256[],uint256[],uint256) | external | [] | ['livenessRatio'] | [] | [] | [] | 2 | ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswap +Contract vars: [] +Inheritance:: [] + ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createPair(address,address) | external | [] | [] | [] | [] | [] | 2 | +| addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| swapExactTokensForTokens(uint256,address[],address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| swapExactTokensForTokens(uint256,uint256,address[],address,uint256) | external | [] | [] | [] | [] | [] | 2 | ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'OLAS_BURNER', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'router', 'factory', 'numTokens', 'scheduledForAscendance', 'bridgeAmount', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['factory', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['router'] | | | | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 2 | +| _buyOLAS(uint256,uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | [] | [] | [] | [] | 2 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['block.timestamp', 'factory'] | [] | ['_wrap'] | ['IERC20(memeToken).approve(router,memeTokenAmount)', 'IERC20(nativeToken).approve(router,nativeTokenAmount)'] | 1 | +| | | | ['nativeToken', 'router'] | | | ['IUniswap(factory).createPair(nativeToken,memeToken)', 'IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp)'] | | +| | | | ['this'] | | | | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | ['memeSummons', 'memeTokens'] | | | | +| | | | ['memeTokens', 'minNativeTokenValue'] | ['numTokens'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['mapAccountActivities', 'memeHearters'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeSummons', 'msg.sender'] | ['memeSummons'] | | | | +| | | | ['msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 2 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleOLASForAscendance() | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_buyOLAS', '_getLowSlippageSafeSwapAmount'] | [] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['scheduledForAscendance'] | | | | | +| sendToHigherHeights(uint256,bytes) | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_bridgeAndBurn', 'require(bool,string)'] | ['tx.origin.call{value: leftovers}()'] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities'] | | | | +| | | | ['tx.origin'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURNER', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBridge +Contract vars: [] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| transferTokens(address,uint256,uint16,bytes32,uint256,uint32) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IOracle +Contract vars: [] +Inheritance:: [] + ++-------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| latestRoundData() | external | [] | [] | [] | [] | [] | 2 | ++-------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeCelo +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'OLAS_BURNER', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'router', 'factory', 'numTokens', 'scheduledForAscendance', 'bridgeAmount', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens', 'SLIPPAGE', 'WORMHOLE_BRIDGING_CUTOFF', 'WORMHOLE_ETH_CHAIN_ID', 'celo', 'l2TokenRelayer', 'oracle', 'nonce', 'olasLeftovers'] +Inheritance:: ['MemeFactory'] + ++----------------------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++----------------------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['factory', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['router'] | | | | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 2 | +| _buyOLAS(uint256,uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | [] | [] | [] | [] | 2 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['block.timestamp', 'factory'] | [] | ['_wrap'] | ['IERC20(memeToken).approve(router,memeTokenAmount)', 'IERC20(nativeToken).approve(router,nativeTokenAmount)'] | 1 | +| | | | ['nativeToken', 'router'] | | | ['IUniswap(factory).createPair(nativeToken,memeToken)', 'IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp)'] | | +| | | | ['this'] | | | | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | ['memeSummons', 'memeTokens'] | | | | +| | | | ['memeTokens', 'minNativeTokenValue'] | ['numTokens'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['mapAccountActivities', 'memeHearters'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeSummons', 'msg.sender'] | ['memeSummons'] | | | | +| | | | ['msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 2 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleOLASForAscendance() | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_buyOLAS', '_getLowSlippageSafeSwapAmount'] | [] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['scheduledForAscendance'] | | | | | +| sendToHigherHeights(uint256,bytes) | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_bridgeAndBurn', 'require(bool,string)'] | ['tx.origin.call{value: leftovers}()'] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities'] | | | | +| | | | ['tx.origin'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| constructor(address,address,address,address,uint256,address,address) | public | [] | [] | ['l2TokenRelayer', 'oracle'] | ['constructor'] | [] | 1 | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 1 | +| _buyOLAS(uint256,uint256) | internal | [] | ['block.timestamp', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).approve(router,nativeTokenAmount)', 'IUniswap(router).swapExactTokensForTokens(nativeTokenAmount,limit,path,address(this),block.timestamp)'] | 1 | +| | | | ['olas', 'router'] | | | ['new address[](3)'] | | +| | | | ['this'] | | | | | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | ['OLAS_BURNER', 'WORMHOLE_BRIDGING_CUTOFF'] | ['nonce', 'olasLeftovers'] | ['require(bool,string)'] | ['IBridge(l2TokenRelayer).transferTokens(olas,transferAmount,WORMHOLE_ETH_CHAIN_ID,olasBurner,0,uint32(nonce))', 'IERC20(olas).approve(l2TokenRelayer,transferAmount)'] | 1 | +| | | | ['WORMHOLE_ETH_CHAIN_ID', 'l2TokenRelayer'] | | | | | +| | | | ['msg.value', 'nonce'] | | | | | +| | | | ['olas', 'olasLeftovers'] | | | | | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURNER', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['SLIPPAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION', 'WORMHOLE_BRIDGING_CUTOFF'] | | | | +| | | | | ['WORMHOLE_ETH_CHAIN_ID'] | | | | ++----------------------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswap +Contract vars: [] +Inheritance:: [] + ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createPair(address,address) | external | [] | [] | [] | [] | [] | 2 | +| addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) | external | [] | [] | [] | [] | [] | 2 | ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'OLAS_BURNER', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'router', 'factory', 'numTokens', 'scheduledForAscendance', 'bridgeAmount', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['factory', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['router'] | | | | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 2 | +| _buyOLAS(uint256,uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | [] | [] | [] | [] | 2 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['block.timestamp', 'factory'] | [] | ['_wrap'] | ['IERC20(memeToken).approve(router,memeTokenAmount)', 'IERC20(nativeToken).approve(router,nativeTokenAmount)'] | 1 | +| | | | ['nativeToken', 'router'] | | | ['IUniswap(factory).createPair(nativeToken,memeToken)', 'IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp)'] | | +| | | | ['this'] | | | | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | ['memeSummons', 'memeTokens'] | | | | +| | | | ['memeTokens', 'minNativeTokenValue'] | ['numTokens'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['mapAccountActivities', 'memeHearters'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeSummons', 'msg.sender'] | ['memeSummons'] | | | | +| | | | ['msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 2 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleOLASForAscendance() | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_buyOLAS', '_getLowSlippageSafeSwapAmount'] | [] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['scheduledForAscendance'] | | | | | +| sendToHigherHeights(uint256,bytes) | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_bridgeAndBurn', 'require(bool,string)'] | ['tx.origin.call{value: leftovers}()'] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities'] | | | | +| | | | ['tx.origin'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURNER', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswap +Contract vars: [] +Inheritance:: [] + ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createPair(address,address) | external | [] | [] | [] | [] | [] | 2 | +| addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| swapExactETHForTokens(uint256,address[],address,uint256) | external | [] | [] | [] | [] | [] | 2 | ++-------------------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'OLAS_BURNER', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'router', 'factory', 'numTokens', 'scheduledForAscendance', 'bridgeAmount', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['factory', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['router'] | | | | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 2 | +| _buyOLAS(uint256,uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | [] | [] | [] | [] | 2 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['block.timestamp', 'factory'] | [] | ['_wrap'] | ['IERC20(memeToken).approve(router,memeTokenAmount)', 'IERC20(nativeToken).approve(router,nativeTokenAmount)'] | 1 | +| | | | ['nativeToken', 'router'] | | | ['IUniswap(factory).createPair(nativeToken,memeToken)', 'IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp)'] | | +| | | | ['this'] | | | | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | ['memeSummons', 'memeTokens'] | | | | +| | | | ['memeTokens', 'minNativeTokenValue'] | ['numTokens'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['mapAccountActivities', 'memeHearters'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeSummons', 'msg.sender'] | ['memeSummons'] | | | | +| | | | ['msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 2 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleOLASForAscendance() | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_buyOLAS', '_getLowSlippageSafeSwapAmount'] | [] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['scheduledForAscendance'] | | | | | +| sendToHigherHeights(uint256,bytes) | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_bridgeAndBurn', 'require(bool,string)'] | ['tx.origin.call{value: leftovers}()'] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities'] | | | | +| | | | ['tx.origin'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURNER', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBalancer +Contract vars: [] +Inheritance:: [] + ++---------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| swap(IBalancer.SingleSwap,IBalancer.FundManagement,uint256,uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBridge +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| withdrawTo(address,address,uint256,uint32,bytes) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IOracle +Contract vars: [] +Inheritance:: [] + ++-------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| latestRoundData() | external | [] | [] | [] | [] | [] | 2 | ++-------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeBase +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'OLAS_BURNER', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'router', 'factory', 'numTokens', 'scheduledForAscendance', 'bridgeAmount', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens', 'SLIPPAGE', 'TOKEN_GAS_LIMIT', 'l2TokenRelayer', 'balancerVault', 'balancerPoolId'] +Inheritance:: ['MemeFactory'] + ++------------------------------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['factory', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['router'] | | | | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 2 | +| _buyOLAS(uint256,uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | [] | [] | [] | [] | 2 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['block.timestamp', 'factory'] | [] | ['_wrap'] | ['IERC20(memeToken).approve(router,memeTokenAmount)', 'IERC20(nativeToken).approve(router,nativeTokenAmount)'] | 1 | +| | | | ['nativeToken', 'router'] | | | ['IUniswap(factory).createPair(nativeToken,memeToken)', 'IUniswap(router).addLiquidity(nativeToken,memeToken,nativeTokenAmount,memeTokenAmount,0,0,address(this),block.timestamp)'] | | +| | | | ['this'] | | | | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | ['memeSummons', 'memeTokens'] | | | | +| | | | ['memeTokens', 'minNativeTokenValue'] | ['numTokens'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['mapAccountActivities', 'memeHearters'] | ['mapAccountActivities', 'memeHearters'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeSummons', 'msg.sender'] | ['memeSummons'] | | | | +| | | | ['msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 2 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleOLASForAscendance() | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_buyOLAS', '_getLowSlippageSafeSwapAmount'] | [] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities', 'scheduledForAscendance'] | ['require(bool,string)'] | | | +| | | | ['scheduledForAscendance'] | | | | | +| sendToHigherHeights(uint256,bytes) | external | [] | ['_locked', 'bridgeAmount'] | ['_locked', 'bridgeAmount'] | ['_bridgeAndBurn', 'require(bool,string)'] | ['tx.origin.call{value: leftovers}()'] | 2 | +| | | | ['mapAccountActivities', 'msg.sender'] | ['mapAccountActivities'] | | | | +| | | | ['tx.origin'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| constructor(address,address,address,address,uint256,address,address,bytes32) | public | [] | [] | ['balancerPoolId', 'balancerVault'] | ['constructor'] | [] | 1 | +| | | | | ['l2TokenRelayer'] | | | | +| _getLowSlippageSafeSwapAmount() | internal | [] | [] | [] | [] | [] | 1 | +| _buyOLAS(uint256,uint256) | internal | [] | ['balancerPoolId', 'balancerVault'] | [] | [] | ['IBalancer(balancerVault).swap(singleSwap,fundManagement,limit,block.timestamp)', 'IBalancer.FundManagement(address(this),false,address(address(this)),false)'] | 1 | +| | | | ['block.timestamp', 'nativeToken'] | | | ['IBalancer.SingleSwap(balancerPoolId,IBalancer.SwapKind.GIVEN_IN,nativeToken,olas,nativeTokenAmount,0x)', 'IERC20(nativeToken).approve(balancerVault,nativeTokenAmount)'] | | +| | | | ['olas', 'this'] | | | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | | +| _bridgeAndBurn(uint256,uint256,bytes) | internal | [] | ['OLAS_BURNER', 'TOKEN_GAS_LIMIT'] | [] | ['abi.encodeWithSignature()'] | ['IBridge(l2TokenRelayer).withdrawTo(olas,OLAS_BURNER,olasAmount,uint32(tokenGasLimit),data)', 'IERC20(olas).approve(l2TokenRelayer,olasAmount)'] | 2 | +| | | | ['l2TokenRelayer', 'msg.value'] | | | ['abi.encodeWithSignature(burn(uint256),olasAmount)'] | | +| | | | ['olas'] | | | | | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURNER', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['SLIPPAGE', 'TOKEN_GAS_LIMIT'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------------+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_human-summary.txt b/audits/internal/analysis/slither_human-summary.txt new file mode 100644 index 0000000..c5c0b89 --- /dev/null +++ b/audits/internal/analysis/slither_human-summary.txt @@ -0,0 +1,153 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 34 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 2 +Number of low issues: 0 +Number of medium issues: 0 +Number of high issues: 0 + + ++---------------------+-------------+------+------------+--------------+----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++---------------------+-------------+------+------------+--------------+----------+ +| IMemeFactory | 1 | | | No | | +| MemeActivityChecker | 3 | | | No | | ++---------------------+-------------+------+------------+--------------+----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 9 +Source lines of code (SLOC) in source files: 427 +Number of assembly lines: 0 +Number of optimization issues: 1 +Number of informational issues: 13 +Number of low issues: 12 +Number of medium issues: 12 +Number of high issues: 6 +ERCs: ERC20, ERC2612 + ++----------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++----------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IERC20 | 1 | | | No | | +| IWETH | 1 | | | No | Receive ETH | +| IUniswap | 4 | | | No | Receive ETH | +| IBridge | 1 | | | No | Receive ETH | +| IOracle | 1 | | | No | | +| MemeCelo | 22 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | ++----------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 133 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 5 +Number of low issues: 1 +Number of medium issues: 0 +Number of high issues: 0 + +ERCs: ERC20, ERC2612 + ++------+-------------+---------------+--------------------+--------------+-----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++------+-------------+---------------+--------------------+--------------+-----------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | ++------+-------------+---------------+--------------------+--------------+-----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 6 +Source lines of code (SLOC) in source files: 350 +Number of assembly lines: 0 +Number of optimization issues: 2 +Number of informational issues: 12 +Number of low issues: 8 +Number of medium issues: 6 +Number of high issues: 5 +ERCs: ERC20, ERC2612 + ++-------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IERC20 | 1 | | | No | | +| IWETH | 1 | | | No | Receive ETH | +| IUniswap | 2 | | | No | | +| MemeFactory | 17 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | ++-------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 10 +Source lines of code (SLOC) in source files: 421 +Number of assembly lines: 0 +Number of optimization issues: 2 +Number of informational issues: 11 +Number of low issues: 11 +Number of medium issues: 9 +Number of high issues: 6 +ERCs: ERC20, ERC2612 + ++-----------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-----------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IWETH | 1 | | | No | Receive ETH | +| IUniswap | 3 | | | No | Receive ETH | +| IBalancer | 1 | | | No | Receive ETH | +| IBridge | 1 | | | No | | +| IERC20 | 1 | | | No | | +| IOracle | 1 | | | No | | +| MemeBase | 21 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | ++-----------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_inheritance-graph.txt b/audits/internal/analysis/slither_inheritance-graph.txt new file mode 100644 index 0000000..89858ff --- /dev/null +++ b/audits/internal/analysis/slither_inheritance-graph.txt @@ -0,0 +1,45 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers:Inheritance Graph: ./MemeActivityChecker-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeCelo-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./Meme-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeFactory-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeBase-flatten.sol.inheritance-graph.dot + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_inheritance.txt b/audits/internal/analysis/slither_inheritance.txt new file mode 100644 index 0000000..d892d70 --- /dev/null +++ b/audits/internal/analysis/slither_inheritance.txt @@ -0,0 +1,193 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ IMemeFactory + ++ MemeActivityChecker + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ IMemeFactory + ++ MemeActivityChecker + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IERC20 + ++ IWETH + ++ IUniswap + ++ MemeFactory + ++ IBridge + ++ IOracle + ++ MemeCelo + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IERC20 + ++ IWETH + ++ IUniswap + ++ MemeFactory + -> MemeCelo + ++ IBridge + ++ IOracle + ++ MemeCelo + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IERC20 + ++ IWETH + ++ IUniswap + ++ MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IERC20 + ++ IWETH + ++ IUniswap + ++ MemeFactory + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IWETH + ++ IUniswap + ++ MemeFactory + ++ IBalancer + ++ IBridge + ++ IERC20 + ++ IOracle + ++ MemeBase + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IWETH + ++ IUniswap + ++ MemeFactory + -> MemeBase + ++ IBalancer + ++ IBridge + ++ IERC20 + ++ IOracle + ++ MemeBase + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_modifiers.txt b/audits/internal/analysis/slither_modifiers.txt new file mode 100644 index 0000000..d8be108 --- /dev/null +++ b/audits/internal/analysis/slither_modifiers.txt @@ -0,0 +1,301 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +Contract IMemeFactory ++----------------------+-----------+ +| Function | Modifiers | ++----------------------+-----------+ +| mapAccountActivities | [] | ++----------------------+-----------+ +INFO:Printers: +Contract MemeActivityChecker ++-------------------+-----------+ +| Function | Modifiers | ++-------------------+-----------+ +| constructor | [] | +| getMultisigNonces | [] | +| isRatioPass | [] | ++-------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | ++----------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract IUniswap ++--------------------------+-----------+ +| Function | Modifiers | ++--------------------------+-----------+ +| createPair | [] | +| addLiquidity | [] | +| swapExactTokensForTokens | [] | +| swapExactTokensForTokens | [] | ++--------------------------+-----------+ +INFO:Printers: +Contract IBridge ++----------------+-----------+ +| Function | Modifiers | ++----------------+-----------+ +| transferTokens | [] | ++----------------+-----------+ +INFO:Printers: +Contract IOracle ++-----------------+-----------+ +| Function | Modifiers | ++-----------------+-----------+ +| latestRoundData | [] | ++-----------------+-----------+ +INFO:Printers: +Contract MemeCelo ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _getLowSlippageSafeSwapAmount | [] | +| _buyOLAS | [] | +| _bridgeAndBurn | [] | +| _createUniswapPair | [] | +| _collect | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleOLASForAscendance | [] | +| sendToHigherHeights | [] | +| receive | [] | +| constructor | [] | +| _getLowSlippageSafeSwapAmount | [] | +| _buyOLAS | [] | +| _bridgeAndBurn | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | ++----------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract IUniswap ++--------------+-----------+ +| Function | Modifiers | ++--------------+-----------+ +| createPair | [] | +| addLiquidity | [] | ++--------------+-----------+ +INFO:Printers: +Contract MemeFactory ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _getLowSlippageSafeSwapAmount | [] | +| _buyOLAS | [] | +| _bridgeAndBurn | [] | +| _createUniswapPair | [] | +| _collect | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleOLASForAscendance | [] | +| sendToHigherHeights | [] | +| receive | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract IUniswap ++-----------------------+-----------+ +| Function | Modifiers | ++-----------------------+-----------+ +| createPair | [] | +| addLiquidity | [] | +| swapExactETHForTokens | [] | ++-----------------------+-----------+ +INFO:Printers: +Contract IBalancer ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| swap | [] | ++----------+-----------+ +INFO:Printers: +Contract IBridge ++------------+-----------+ +| Function | Modifiers | ++------------+-----------+ +| withdrawTo | [] | ++------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | ++----------+-----------+ +INFO:Printers: +Contract IOracle ++-----------------+-----------+ +| Function | Modifiers | ++-----------------+-----------+ +| latestRoundData | [] | ++-----------------+-----------+ +INFO:Printers: +Contract MemeBase ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _getLowSlippageSafeSwapAmount | [] | +| _buyOLAS | [] | +| _bridgeAndBurn | [] | +| _createUniswapPair | [] | +| _collect | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleOLASForAscendance | [] | +| sendToHigherHeights | [] | +| receive | [] | +| constructor | [] | +| _getLowSlippageSafeSwapAmount | [] | +| _buyOLAS | [] | +| _bridgeAndBurn | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_require.txt b/audits/internal/analysis/slither_require.txt new file mode 100644 index 0000000..8ba4b22 --- /dev/null +++ b/audits/internal/analysis/slither_require.txt @@ -0,0 +1,345 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +Contract IMemeFactory ++----------------------+-------------------+ +| Function | require or assert | ++----------------------+-------------------+ +| mapAccountActivities | | ++----------------------+-------------------+ +INFO:Printers: +Contract MemeActivityChecker ++-------------------+-------------------+ +| Function | require or assert | ++-------------------+-------------------+ +| constructor | | +| getMultisigNonces | | +| isRatioPass | | ++-------------------+-------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+------------------[96m--------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | ++----------+-------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract IUniswap ++--------------------------+-------------------+ +| Function | require or assert | ++--------------------------+-------------------+ +| createPair | | +| addLiquidity | | +| swapExactTokensForTokens | | +| swapExactTokensForTokens | | ++--------------------------+-------------------+ +INFO:Printers: +Contract IBridge ++----------------+-------------------+ +| Function | require or assert | ++----------------+-------------------+ +| transferTokens | | ++----------------+-------------------+ +INFO:Printers: +Contract IOracle ++-----------------+-------------------+ +| Function | require or assert | ++-----------------+-------------------+ +| latestRoundData | | ++-----------------+-------------------+ +INFO:Printers: +Contract MemeCelo ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _getLowSlippageSafeSwapAmount | | +| _buyOLAS | | +| _bridgeAndBurn | | +| _createUniswapPair | | +| _collect | | +| _wrap | | +| summonThisMeme | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| | require(bool,string)(totalNativeTokenCommitted > 0,Meme not yet summoned) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleOLASForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(localAscendance > 0,Nothing to burn) | +| sendToHigherHeights | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(bridgeAmount > 0,Nothing to bridge) | +| | require(bool,string)(transferAmount > 0,Amount is too small for bridging) | +| receive | | +| constructor | | +| _getLowSlippageSafeSwapAmount | | +| _buyOLAS | | +| _bridgeAndBurn | require(bool,string)(transferAmount > 0,Amount is too small for bridging) | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | ++----------+-------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract IUniswap ++--------------+-------------------+ +| Function | require or assert | ++--------------+-------------------+ +| createPair | | +| addLiquidity | | ++--------------+-------------------+ +INFO:Printers: +Contract MemeFactory ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _getLowSlippageSafeSwapAmount | | +| _buyOLAS | | +| _bridgeAndBurn | | +| _createUniswapPair | | +| _collect | | +| _wrap | | +| summonThisMeme | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| | require(bool,string)(totalNativeTokenCommitted > 0,Meme not yet summoned) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleOLASForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(localAscendance > 0,Nothing to burn) | +| sendToHigherHeights | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(bridgeAmount > 0,Nothing to bridge) | +| receive | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract IUniswap ++-----------------------+-------------------+ +| Function | require or assert | ++-----------------------+-------------------+ +| createPair | | +| addLiquidity | | +| swapExactETHForTokens | | ++-----------------------+-------------------+ +INFO:Printers: +Contract IBalancer ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| swap | | ++----------+-------------------+ +INFO:Printers: +Contract IBridge ++------------+-------------------+ +| Function | require or assert | ++------------+-------------------+ +| withdrawTo | | ++------------+-------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | ++----------+-------------------+ +INFO:Printers: +Contract IOracle ++-----------------+-------------------+ +| Function | require or assert | ++-----------------+-------------------+ +| latestRoundData | | ++-----------------+-------------------+ +INFO:Printers: +Contract MemeBase ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _getLowSlippageSafeSwapAmount | | +| _buyOLAS | | +| _bridgeAndBurn | | +| _createUniswapPair | | +| _collect | | +| _wrap | | +| summonThisMeme | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| | require(bool,string)(totalNativeTokenCommitted > 0,Meme not yet summoned) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleOLASForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(localAscendance > 0,Nothing to burn) | +| sendToHigherHeights | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(bridgeAmount > 0,Nothing to bridge) | +| receive | | +| constructor | | +| _getLowSlippageSafeSwapAmount | | +| _buyOLAS | | +| _bridgeAndBurn | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_variable-order.txt b/audits/internal/analysis/slither_variable-order.txt new file mode 100644 index 0000000..e37cf04 --- /dev/null +++ b/audits/internal/analysis/slither_variable-order.txt @@ -0,0 +1,228 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +IMemeFactory: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeActivityChecker: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IUniswap: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBridge: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IOracle: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeCelo: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory.bridgeAmount | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 4 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 5 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 6 | 0 | +| MemeFactory.memeTokens | address[] | 7 | 0 | +| MemeCelo.nonce | uint256 | 8 | 0 | +| MemeCelo.olasLeftovers | uint256 | 9 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IUniswap: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeFactory: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory.bridgeAmount | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 4 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 5 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 6 | 0 | +| MemeFactory.memeTokens | address[] | 7 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IUniswap: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBalancer: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBridge: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IOracle: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeBase: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory.bridgeAmount | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 4 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 5 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 6 | 0 | +| MemeFactory.memeTokens | address[] | 7 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal/analysis/slither_vars-and-auth.txt b/audits/internal/analysis/slither_vars-and-auth.txt new file mode 100644 index 0000000..bd20cb8 --- /dev/null +++ b/audits/internal/analysis/slither_vars-and-auth.txt @@ -0,0 +1,412 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeCelo-flatten.sol:693:13: + | +693 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./Meme-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeFactory-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeFactory-flatten.sol:679:13: + | +679 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Return value of low-level calls not used. + --> MemeBase-flatten.sol:672:13: + | +672 | tx.origin.call{value: leftovers}(""); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +INFO:Printers: +Contract IMemeFactory ++----------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------------------+-------------------------+--------------------------+ +| mapAccountActivities | [] | [] | ++----------------------+-------------------------+--------------------------+ + +Contract MemeActivityChecker ++-------------------+----------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------+----------------------------------+--------------------------+ +| constructor | ['livenessRatio', 'memeFactory'] | [] | +| getMultisigNonces | [] | [] | +| isRatioPass | [] | [] | ++-------------------+----------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IUniswap ++--------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++--------------------------+-------------------------+--------------------------+ +| createPair | [] | [] | +| addLiquidity | [] | [] | +| swapExactTokensForTokens | [] | [] | +| swapExactTokensForTokens | [] | [] | ++--------------------------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['factory', 'minNativeTokenValue', 'nativeToken', 'olas', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collect | ['memeHearters'] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleOLASForAscendance | ['_locked', 'bridgeAmount', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| sendToHigherHeights | ['_locked', 'bridgeAmount', 'mapAccountActivities'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY', 'OLAS_BURNER', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IBridge ++----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------------+-------------------------+--------------------------+ +| transferTokens | [] | [] | ++----------------+-------------------------+--------------------------+ + +Contract IOracle ++-----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------+-------------------------+--------------------------+ +| latestRoundData | [] | [] | ++-----------------+-------------------------+--------------------------+ + +Contract MemeCelo ++-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['factory', 'minNativeTokenValue', 'nativeToken', 'olas', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collect | ['memeHearters'] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleOLASForAscendance | ['_locked', 'bridgeAmount', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| sendToHigherHeights | ['_locked', 'bridgeAmount', 'mapAccountActivities', 'nonce', 'olasLeftovers'] | [] | +| receive | [] | [] | +| constructor | ['factory', 'l2TokenRelayer', 'minNativeTokenValue', 'nativeToken', 'olas', 'oracle', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | ['nonce', 'olasLeftovers'] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY', 'OLAS_BURNER', 'OLAS_BURN_PERCENTAGE', 'SLIPPAGE', 'UNLEASH_DELAY', 'VERSION', 'WORMHOLE_BRIDGING_CUTOFF', 'WORMHOLE_ETH_CHAIN_ID'] | [] | ++-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IUniswap ++--------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++--------------+-------------------------+--------------------------+ +| createPair | [] | [] | +| addLiquidity | [] | [] | ++--------------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['factory', 'minNativeTokenValue', 'nativeToken', 'olas', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collect | ['memeHearters'] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleOLASForAscendance | ['_locked', 'bridgeAmount', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| sendToHigherHeights | ['_locked', 'bridgeAmount', 'mapAccountActivities'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY', 'OLAS_BURNER', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IUniswap ++-----------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------------+-------------------------+--------------------------+ +| createPair | [] | [] | +| addLiquidity | [] | [] | +| swapExactETHForTokens | [] | [] | ++-----------------------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['factory', 'minNativeTokenValue', 'nativeToken', 'olas', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collect | ['memeHearters'] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleOLASForAscendance | ['_locked', 'bridgeAmount', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| sendToHigherHeights | ['_locked', 'bridgeAmount', 'mapAccountActivities'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY', 'OLAS_BURNER', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IBalancer ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| swap | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IBridge ++------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------+-------------------------+--------------------------+ +| withdrawTo | [] | [] | ++------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract IOracle ++-----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------+-------------------------+--------------------------+ +| latestRoundData | [] | [] | ++-----------------+-------------------------+--------------------------+ + +Contract MemeBase ++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['factory', 'minNativeTokenValue', 'nativeToken', 'olas', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collect | ['memeHearters'] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleOLASForAscendance | ['_locked', 'bridgeAmount', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| sendToHigherHeights | ['_locked', 'bridgeAmount', 'mapAccountActivities'] | [] | +| receive | [] | [] | +| constructor | ['balancerPoolId', 'balancerVault', 'factory', 'l2TokenRelayer', 'minNativeTokenValue', 'nativeToken', 'olas', 'router'] | [] | +| _getLowSlippageSafeSwapAmount | [] | [] | +| _buyOLAS | [] | [] | +| _bridgeAndBurn | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'LP_PERCENTAGE', 'MIN_TOTAL_SUPPLY', 'OLAS_BURNER', 'OLAS_BURN_PERCENTAGE', 'SLIPPAGE', 'TOKEN_GAS_LIMIT', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Slither:. analyzed (29 contracts) diff --git a/audits/internal2/README.md b/audits/internal2/README.md new file mode 100644 index 0000000..af3f222 --- /dev/null +++ b/audits/internal2/README.md @@ -0,0 +1,186 @@ +# meme-ooorr +The review has been performed based on the contract code in the following repository:
+`https://github.com/dvilelaf/meme-ooorr`
+commit: `8e188f0f960fdf7c4d1538dd195152df88b6c55b` or `tag: v0.2.0-pre-internal-audi`
+ +## Objectives +The audit focused on Meme* contracts
+ +### Flatten version +Flatten version of contracts. [contracts](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal2/analysis/contracts) + +### Security issues +Details in [slither_full](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal2/analysis/slither_full.txt)
+All false positive. + +## Issue (medium/critical) +### receive() without windraw() on Meme* (medium) +``` + /// @dev Allows the contract to receive native token + receive() external payable {} + It is unclear why the contract accepts arbitrary ETH to address of contract. Purposes? Contract locking ether found. +``` +[x] Fixed + +### function __createUniswapPair() internal possible manipulated if pool exists (critical) +Any interactions with the pool (v3 too) can be attacked using the sandwich method. +``` +If pool exist, then +Lack of Price Oracle Validation: + +There is no mechanism to validate the input price (amount1 / amount0) against a trusted oracle or time-weighted average price (TWAP). +Without this validation, attackers could manipulate the price temporarily using flashloans and then initialize the pool with a skewed price. +Thanks, ChatGPT 4o mini to loang discussion. +``` + +or code: +``` +function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount +) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + require(nativeTokenAmount > 0 && memeTokenAmount > 0, "Amounts must be positive"); + + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Validate price against trusted oracle + uint256 priceX96 = (amount1 * 1e18) / amount0; + // 30 min + uint256 oraclePriceX96 = getPriceFromOracle(token0, token1, 1800); + require( + priceX96 >= (oraclePriceX96 * 95) / 100 && priceX96 <= (oraclePriceX96 * 105) / 100, + "Price deviation too high" + ); + + uint160 sqrtPriceX96 = uint160(FixedPointMathLib.sqrt(priceX96) * 2**48); + + // Create the pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, + FEE_TIER, sqrtPriceX96); + + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, + amount1Min: 0, + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, , ) = IUniswapV3(uniV3PositionManager).mint(params); +} + +function getTwapFromOracle( + address token0, + address token1, + uint32 secondsAgo +) public view returns (uint256 priceX96) { + // Get the address of the pool + address pool = IUniswapV3Factory(uniV3Factory).getPool(token0, token1, FEE_TIER); + require(pool != address(0), "Pool does not exist"); + + // Query the pool for the current and historical tick + uint32; + secondsAgos[0] = secondsAgo; // Start of the period + secondsAgos[1] = 0; // End of the period (current time) + + // Fetch the tick cumulative values from the pool + (int56[] memory tickCumulatives, ) = IUniswapV3Pool(pool).observe(secondsAgos); + + // Calculate the average tick over the time period + int56 tickCumulativeDelta = tickCumulatives[1] - tickCumulatives[0]; + int24 averageTick = int24(tickCumulativeDelta / int56(int32(secondsAgo))); + + // Convert the average tick to sqrtPriceX96 + uint160 sqrtPriceX96 = TickMath.getSqrtRatioAtTick(averageTick); + + // Calculate the price using the sqrtPriceX96 + uint256 price = (uint256(sqrtPriceX96) * uint256(sqrtPriceX96)) / (1 << 192); + + // Return the price in X96 format + return price; +} +``` +[x] Fixed in later version + +### Same for function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal (critical) +``` +Yes, the collect function in Uniswap V3, which retrieves the tokens owed to the position based on the accrued fees, can potentially be affected by external factors like a flashloan if the pool's reserves have been manipulated. However, this depends on how and when the function is called. +Mitigation Strategies: +To minimize the risks associated with flashloan attacks or other manipulations, consider the following: + +1. Use Time-Weighted Average Prices (TWAPs) +How It Helps: +TWAPs mitigate the impact of short-term price manipulation by averaging the price over a specified time frame. +Before calling collect, you can check the pool's TWAP and compare it to the instant price. If the deviation exceeds a threshold, delay the operation. +2. Check Pool State Consistency +How It Helps: +Before calling collect, validate the pool's current state against historical data (e.g., previous reserves or price). +Reject the operation if the state deviates significantly. +3. Time-Locking Operations +How It Helps: +Enforce a minimum delay between critical pool interactions (e.g., minting liquidity, swapping, or collecting fees). +This reduces the attacker's ability to exploit a manipulated state within a single transaction or block. +4. Verify Reserves and Trades +How It Helps: +Before calling collect, check the pool's reserves to ensure they haven't been manipulated significantly (e.g., large reserve changes relative to historical averages). +Thanks, ChatGPT 4o mini to loang discussion. +``` +or code: +``` +function safeCollect( + uint256 tokenId, + address recipient, + uint128 amount0Max, + uint128 amount1Max +) external { + // Verify pool reserves before proceeding + address pool = IUniswapV3Pool(factory.getPool(token0, token1, FEE_TIER)); + require(pool != address(0), "Pool does not exist"); + + // Get current pool reserves + (uint160 sqrtPriceX96, , , , , , ) = IUniswapV3Pool(pool).slot0(); + + // Check TWAP or historical data + uint256 twapPrice = getTwapFromOracle(token0, token1, 1800); // 30-minute TWAP + uint256 instantPrice = (uint256(sqrtPriceX96) * uint256(sqrtPriceX96)) / (1 << 192); + + uint256 deviation = (instantPrice > twapPrice) + ? ((instantPrice - twapPrice) * 1e18) / twapPrice + : ((twapPrice - instantPrice) * 1e18) / twapPrice; + + require(deviation <= maxAllowedDeviation, "Price deviation too high"); + + // Proceed with the collect operation + IUniswapV3(uniV3PositionManager).collect( + IUniswapV3.CollectParams({ + tokenId: tokenId, + recipient: recipient, + amount0Max: amount0Max, + amount1Max: amount1Max + }) + ); +} +``` +[x] Fixed in later version + +### Low issue: Oracle not finished? +``` +Unclear about oracles. They simply exist as separate contracts. Needed proxy pattern for oracle? +``` +[x] Noted for later versions \ No newline at end of file diff --git a/audits/internal2/analysis/contracts/BalancerPriceOracle-flatten.sol b/audits/internal2/analysis/contracts/BalancerPriceOracle-flatten.sol new file mode 100644 index 0000000..fe23eca --- /dev/null +++ b/audits/internal2/analysis/contracts/BalancerPriceOracle-flatten.sol @@ -0,0 +1,158 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IVault { + function getPoolTokens(bytes32 poolId) external view + returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock); +} + +/// @title BalancerPriceOracle - a smart contract oracle for Balancer V2 pools +/// @dev This contract acts as an oracle for a specific Balancer V2 pool. It allows: +/// 1) Updating the price by any caller +/// 2) Getting the price by any caller +/// 3) Validating slippage against the oracle +contract BalancerPriceOracle { + event PriceUpdated(address indexed sender, uint256 currentPrice, uint256 cumulativePrice); + + struct PriceSnapshot { + // Time-weighted cumulative price + uint256 cumulativePrice; + // Timestamp of the last update + uint256 lastUpdated; + // Most recent calculated average price + uint256 averagePrice; + } + + // Snapshot history struct + PriceSnapshot public snapshotHistory; + + // Maximum allowed update slippage in % + uint256 public immutable maxSlippage; + // Minimum update time period in seconds + uint256 public immutable minUpdateTimePeriod; + // LP token direction + uint256 public immutable direction; + // Native token (ERC-20) address + address public immutable nativeToken; + // OLAS token address + address public immutable olas; + // Balancer vault address + address public immutable balancerVault; + // Balancer pool Id + bytes32 public immutable balancerPoolId; + + constructor( + address _olas, + address _nativeToken, + uint256 _maxSlippage, + uint256 _minUpdateTimePeriod, + address _balancerVault, + bytes32 _balancerPoolId + ) { + require(_maxSlippage < 100, "Slippage must be less than 100%"); + + olas = _olas; + nativeToken = _nativeToken; + maxSlippage = _maxSlippage; + minUpdateTimePeriod = _minUpdateTimePeriod; + balancerVault = _balancerVault; + balancerPoolId = _balancerPoolId; + + // Get token direction + (address[] memory tokens, , ) = IVault(balancerVault).getPoolTokens(_balancerPoolId); + if (tokens[0] != _nativeToken) { + direction = 1; + } + + // Initialize price snapshot + updatePrice(); + } + + /// @dev Gets the current OLAS token price in 1e18 format. + function getPrice() public view returns (uint256) { + (, uint256[] memory balances, ) = IVault(balancerVault).getPoolTokens(balancerPoolId); + // Native token + uint256 balanceIn = balances[direction]; + // OLAS + uint256 balanceOut = balances[(direction + 1) % 2]; + + return (balanceOut * 1e18) / balanceIn; + } + + /// @dev Updates the time-weighted average price. + /// @notice This implementation only accounts for the first price update in a block. + function updatePrice() public returns (bool) { + uint256 currentPrice = getPrice(); + require(currentPrice > 0, "Price must be non-zero."); + + PriceSnapshot storage snapshot = snapshotHistory; + + if (snapshot.lastUpdated == 0) { + // Initialize snapshot + snapshot.cumulativePrice = 0; + snapshot.averagePrice = currentPrice; + snapshot.lastUpdated = block.timestamp; + emit PriceUpdated(msg.sender, currentPrice, 0); + return true; + } + + // Check if update is too soon + if (block.timestamp < snapshotHistory.lastUpdated + minUpdateTimePeriod) { + return false; + } + + // This implementation only accounts for the first price update in a block. + // Calculate elapsed time since the last update + uint256 elapsedTime = block.timestamp - snapshot.lastUpdated; + + // Update cumulative price with the previous average over the elapsed time + snapshot.cumulativePrice += snapshot.averagePrice * elapsedTime; + + // Update the average price to reflect the current price + uint256 averagePrice = (snapshot.cumulativePrice + (currentPrice * elapsedTime)) / + ((snapshot.cumulativePrice / snapshot.averagePrice) + elapsedTime); + + // Check if price deviation is too high + if (currentPrice < averagePrice - (averagePrice * maxSlippage / 100) || + currentPrice > averagePrice + (averagePrice * maxSlippage / 100)) + { + return false; + } + + snapshot.averagePrice = averagePrice; + snapshot.lastUpdated = block.timestamp; + + emit PriceUpdated(msg.sender, currentPrice, snapshot.cumulativePrice); + return true; + } + + /// @dev Validates the current price against a TWAP according to slippage tolerance. + /// @param slippage the acceptable slippage tolerance + function validatePrice(uint256 slippage) external view returns (bool) { + require(slippage <= maxSlippage, "Slippage overflow"); + + PriceSnapshot memory snapshot = snapshotHistory; + + // Ensure there is historical price data + if (snapshot.lastUpdated == 0) return false; + + // Calculate elapsed time + uint256 elapsedTime = block.timestamp - snapshot.lastUpdated; + // Require at least one block since last update + if (elapsedTime == 0) return false; + + // Compute time-weighted average price + uint256 timeWeightedAverage = (snapshot.cumulativePrice + (snapshot.averagePrice * elapsedTime)) / + ((snapshot.cumulativePrice / snapshot.averagePrice) + elapsedTime); + + uint256 tradePrice = getPrice(); + + // Validate against slippage thresholds + uint256 lowerBound = (timeWeightedAverage * (100 - slippage)) / 100; + uint256 upperBound = (timeWeightedAverage * (100 + slippage)) / 100; + + return tradePrice >= lowerBound && tradePrice <= upperBound; + } +} diff --git a/audits/internal2/analysis/contracts/BuyBackBurner-flatten.sol b/audits/internal2/analysis/contracts/BuyBackBurner-flatten.sol new file mode 100644 index 0000000..bc3f5b7 --- /dev/null +++ b/audits/internal2/analysis/contracts/BuyBackBurner-flatten.sol @@ -0,0 +1,79 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +/// @dev Only `owner` has a privilege, but the `sender` was provided. +/// @param sender Sender address. +/// @param owner Required sender address as an owner. +error OwnerOnly(address sender, address owner); + +/// @dev Provided zero address. +error ZeroAddress(); + +/// @dev The contract is already initialized. +error AlreadyInitialized(); + +/// @title BuyBackBurner - BuyBackBurner implementation contract +contract BuyBackBurner { + event ImplementationUpdated(address indexed implementation); + event OwnerUpdated(address indexed owner); + + // Version number + string public constant VERSION = "0.0.1"; + // Code position in storage is keccak256("BUY_BACK_BURNER_PROXY") = "c6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19" + bytes32 public constant BUY_BACK_BURNER_PROXY = 0xc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19; + // L1 OLAS Burner address + address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + + // Contract owner + address public owner; + + /// @dev BuyBackBurner initializer. + function initialize() external{ + if (owner != address(0)) { + revert AlreadyInitialized(); + } + + owner = msg.sender; + } + + /// @dev Changes the implementation contract address. + /// @param newImplementation New implementation contract address. + function changeImplementation(address newImplementation) external { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for zero address + if (newImplementation == address(0)) { + revert ZeroAddress(); + } + + // Store the implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, newImplementation) + } + + emit ImplementationUpdated(newImplementation); + } + + /// @dev Changes contract owner address. + /// @param newOwner Address of a new owner. + function changeOwner(address newOwner) external virtual { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the zero address + if (newOwner == address(0)) { + revert ZeroAddress(); + } + + owner = newOwner; + emit OwnerUpdated(newOwner); + } +} diff --git a/audits/internal2/analysis/contracts/BuyBackBurnerProxy-flatten.sol b/audits/internal2/analysis/contracts/BuyBackBurnerProxy-flatten.sol new file mode 100644 index 0000000..947bd31 --- /dev/null +++ b/audits/internal2/analysis/contracts/BuyBackBurnerProxy-flatten.sol @@ -0,0 +1,68 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/// @dev Zero implementation address. +error ZeroImplementationAddress(); + +/// @dev Zero data. +error ZeroData(); + +/// @dev Proxy initialization failed. +error InitializationFailed(); + +/* +* This is a BuyBackBurner proxy contract. +* Proxy implementation is created based on the Universal Upgradeable Proxy Standard (UUPS) EIP-1822. +* The implementation address must be located in a unique storage slot of the proxy contract. +* The upgrade logic must be located in the implementation contract. +* Special buyBackBurner implementation address slot is produced by hashing the "BUY_BACK_BURNER_PROXY" +* string in order to make the slot unique. +* The fallback() implementation for all the delegatecall-s is inspired by the Gnosis Safe set of contracts. +*/ + +/// @title BuyBackBurnerProxy - Smart contract for buyBackBurner proxy +contract BuyBackBurnerProxy { + // Code position in storage is keccak256("BUY_BACK_BURNER_PROXY") = "c6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19" + bytes32 public constant BUY_BACK_BURNER_PROXY = 0xc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19; + + /// @dev BuyBackBurnerProxy constructor. + /// @param implementation BuyBackBurner implementation address. + /// @param buyBackBurnerData BuyBackBurner initialization data. + constructor(address implementation, bytes memory buyBackBurnerData) { + // Check for the zero address, since the delegatecall works even with the zero one + if (implementation == address(0)) { + revert ZeroImplementationAddress(); + } + + // Check for the zero data + if (buyBackBurnerData.length == 0) { + revert ZeroData(); + } + + // Store the buyBackBurner implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, implementation) + } + // Initialize proxy storage + (bool success, ) = implementation.delegatecall(buyBackBurnerData); + if (!success) { + revert InitializationFailed(); + } + } + + /// @dev Delegatecall to all the incoming data. + fallback() external payable { + assembly { + let implementation := sload(BUY_BACK_BURNER_PROXY) + calldatacopy(0, 0, calldatasize()) + let success := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + if eq(success, 0) { + revert(0, returndatasize()) + } + return(0, returndatasize()) + } + } +} diff --git a/audits/internal2/analysis/contracts/Meme.sol b/audits/internal2/analysis/contracts/Meme.sol new file mode 100644 index 0000000..85cdb9f --- /dev/null +++ b/audits/internal2/analysis/contracts/Meme.sol @@ -0,0 +1,225 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} diff --git a/audits/internal2/analysis/contracts/MemeActivityChecker-flatten.sol b/audits/internal2/analysis/contracts/MemeActivityChecker-flatten.sol new file mode 100644 index 0000000..d570c73 --- /dev/null +++ b/audits/internal2/analysis/contracts/MemeActivityChecker-flatten.sol @@ -0,0 +1,76 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +// Meme Factory interface +interface IMemeFactory { + function mapAccountActivities(address multisig) external view returns (uint256); +} + +/// @dev Zero address. +error ZeroAddress(); + +/// @dev Zero value. +error ZeroValue(); + +/// @title MemeActivityChecker - Smart contract for meme contract interaction service staking activity check +/// @author Aleksandr Kuperman - +/// @author Andrey Lebedev - +/// @author David Vilela - +contract MemeActivityChecker { + // Liveness ratio in the format of 1e18 + uint256 public immutable livenessRatio; + // Meme Factory contract address + address public immutable memeFactory; + + /// @dev StakingNativeToken initialization. + /// @param _memeFactory Meme Factory contract address. + /// @param _livenessRatio Liveness ratio in the format of 1e18. + constructor(address _memeFactory, uint256 _livenessRatio) { + // Check the zero address + if (_memeFactory == address(0)) { + revert ZeroAddress(); + } + + // Check for zero value + if (_livenessRatio == 0) { + revert ZeroValue(); + } + + memeFactory = _memeFactory; + livenessRatio = _livenessRatio; + } + + /// @dev Gets service multisig nonces. + /// @param multisig Service multisig address. + /// @return nonces Set of a single service multisig nonce. + function getMultisigNonces(address multisig) external view virtual returns (uint256[] memory nonces) { + nonces = new uint256[](1); + // The nonce is equal to the meme factory contract interaction corresponding to a multisig activity + nonces[0] = IMemeFactory(memeFactory).mapAccountActivities(multisig); + } + + /// @dev Checks if the service multisig liveness ratio passes the defined liveness threshold. + /// @notice The formula for calculating the ratio is the following: + /// currentNonce - service multisig nonce at time now (block.timestamp); + /// lastNonce - service multisig nonce at the previous checkpoint or staking time (tsStart); + /// ratio = (currentNonce - lastNonce) / (block.timestamp - tsStart). + /// @param curNonces Current service multisig set of a single nonce. + /// @param lastNonces Last service multisig set of a single nonce. + /// @param ts Time difference between current and last timestamps. + /// @return ratioPass True, if the liveness ratio passes the check. + function isRatioPass( + uint256[] memory curNonces, + uint256[] memory lastNonces, + uint256 ts + ) external view virtual returns (bool ratioPass) { + // If the checkpoint was called in the exact same block, the ratio is zero + // If the current nonce is not greater than the last nonce, the ratio is zero + if (ts > 0 && curNonces[0] > lastNonces[0]) { + uint256 ratio = ((curNonces[0] - lastNonces[0]) * 1e18) / ts; + ratioPass = (ratio >= livenessRatio); + } + } +} diff --git a/audits/internal2/analysis/contracts/MemeArbitrum-flatten.sol b/audits/internal2/analysis/contracts/MemeArbitrum-flatten.sol new file mode 100644 index 0000000..0f51710 --- /dev/null +++ b/audits/internal2/analysis/contracts/MemeArbitrum-flatten.sol @@ -0,0 +1,1212 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary( + address token0, + address token1, + uint24 fee, + uint160 sqrtPriceX96 + ) external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) + external + payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); +} + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Transfers native token to be later converted to OLAS for burn. + /// @param amount Native token amount. + function _transferToLaterBurn(uint256 amount) internal virtual { + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160(FixedPointMathLib.sqrt(priceX96) * 2**48); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, + FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, , ) = IUniswapV3(uniV3PositionManager).mint(params); + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = + IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Account for launch campaign + // All funds ever collected are already wrapped + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Launch campaign logic. Allows diverting first x collected funds to a launch campaign. + /// @param nativeAmountForOLASBurn Native token amount (wrapped) for burning. + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal virtual returns (uint256 adjustedNativeAmountForAscendance); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 memeAmountForLP = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - memeAmountForLP; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collect(memeToken, memeSummon.heartersAmount, hearterContribution, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = scheduledForAscendance; + require(amount > 0, "Nothing to send"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Transfer native token to be converted to OLAS and burnt + _transferToLaterBurn(amount); + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + MemeSummon memory memeSummon = memeSummons[tokens[i]]; + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } + + // TODO Do we need this function as we all do via payable functions? + /// @dev Allows the contract to receive native token + receive() external payable {} +} + +interface IWETH { + function deposit() external payable; +} + +// @title MemeArbitrum - a smart contract factory for Meme Token creation on Arbitrum. +contract MemeArbitrum is MemeFactory { + /// @dev MemeArbitrum constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal override pure returns (uint256) { + return nativeAmountForOLASBurn; + } + + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } +} diff --git a/audits/internal2/analysis/contracts/MemeBase-flatten.sol b/audits/internal2/analysis/contracts/MemeBase-flatten.sol new file mode 100644 index 0000000..5602fd0 --- /dev/null +++ b/audits/internal2/analysis/contracts/MemeBase-flatten.sol @@ -0,0 +1,1316 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary( + address token0, + address token1, + uint24 fee, + uint160 sqrtPriceX96 + ) external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) + external + payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); +} + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Transfers native token to be later converted to OLAS for burn. + /// @param amount Native token amount. + function _transferToLaterBurn(uint256 amount) internal virtual { + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160(FixedPointMathLib.sqrt(priceX96) * 2**48); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, + FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, , ) = IUniswapV3(uniV3PositionManager).mint(params); + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = + IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Account for launch campaign + // All funds ever collected are already wrapped + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Launch campaign logic. Allows diverting first x collected funds to a launch campaign. + /// @param nativeAmountForOLASBurn Native token amount (wrapped) for burning. + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal virtual returns (uint256 adjustedNativeAmountForAscendance); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 memeAmountForLP = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - memeAmountForLP; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collect(memeToken, memeSummon.heartersAmount, hearterContribution, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = scheduledForAscendance; + require(amount > 0, "Nothing to send"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Transfer native token to be converted to OLAS and burnt + _transferToLaterBurn(amount); + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + MemeSummon memory memeSummon = memeSummons[tokens[i]]; + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } + + // TODO Do we need this function as we all do via payable functions? + /// @dev Allows the contract to receive native token + receive() external payable {} +} + +interface IWETH { + function deposit() external payable; +} + +/// @title MemeBase - a smart contract factory for Meme Token creation on Base. +contract MemeBase is MemeFactory { + // AGNT data: + // https://basescan.org/address/0x42156841253f428cb644ea1230d4fddfb70f8891#readContract#F17 + // Previous token address: 0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9 + // Full collected amount: 141569842100000000000 + uint256 public constant CONTRIBUTION_AGNT = 141569842100000000000; + // Liquidity amount: collected amount - 10% for burn = 127412857890000000000 + uint256 public constant LIQUIDITY_AGNT = 127412857890000000000; + + // Launch campaign token address + address public launchCampaignTokenAddress; + // Launch campaign balance + uint256 public launchCampaignBalance; + + /// @dev MemeBase constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue, + address[] memory accounts, + uint256[] memory amounts + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) { + if (accounts.length > 0) { + _launchCampaignSetup(accounts, amounts); + } + } + + /// @dev Launch campaign initialization function. + /// @param accounts Original accounts. + /// @param amounts Corresponding original amounts (without subtraction for burn). + function _launchCampaignSetup(address[] memory accounts, uint256[] memory amounts) private { + require(accounts.length == amounts.length); + + // Create a launch campaign token + launchCampaignTokenAddress = address(new Meme("Agent Token II", "AGNT II", DECIMALS, 1_000_000_000 ether)); + + // To match original summon events (purposefully placed here to match order of original events) + emit Summoned(accounts[0], launchCampaignTokenAddress, amounts[0]); + + // Record all the accounts and amounts + uint256 totalAmount; + for (uint256 i = 0; i < accounts.length; ++i) { + totalAmount += amounts[i]; + memeHearters[launchCampaignTokenAddress][accounts[i]] = amounts[i]; + // to match original hearter events + emit Hearted(accounts[i], launchCampaignTokenAddress, amounts[i]); + } + require(totalAmount == CONTRIBUTION_AGNT, "Total amount must match original contribution amount"); + // Adjust amount for already collected burned tokens + uint256 adjustedAmount = (totalAmount * 9) / 10; + require(adjustedAmount == LIQUIDITY_AGNT, "Total amount adjusted for burn allocation must match liqudity amount"); + + // summonTime is set to zero such that no one is able to heart this token + memeSummons[launchCampaignTokenAddress] = MemeSummon(CONTRIBUTION_AGNT, 0, 0, 0, 0, false); + + // Push token into the global list of tokens + memeTokens.push(launchCampaignTokenAddress); + numTokens = memeTokens.length; + } + + /// @dev AGNT token laugn campaign unleash. + function _MAGA() private { + Meme memeTokenInstance = Meme(launchCampaignTokenAddress); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 memeAmountForLP = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - memeAmountForLP; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(launchCampaignTokenAddress, LIQUIDITY_AGNT, memeAmountForLP); + + MemeSummon storage memeSummon = memeSummons[launchCampaignTokenAddress]; + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[launchCampaignTokenAddress][msg.sender]; + if (hearterContribution > 0) { + _collect(launchCampaignTokenAddress, heartersAmount, hearterContribution, CONTRIBUTION_AGNT); + } + + emit Unleashed(msg.sender, launchCampaignTokenAddress, positionId, liquidity, 0); + } + + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal override returns (uint256 adjustedNativeAmountForAscendance) { + // Launch campaign logic: + // Make Agent.Fi Great Again (MAGA) + if (launchCampaignBalance < LIQUIDITY_AGNT) { + // Get the difference of the required liquidity amount and launch campaign balance + uint256 diff = LIQUIDITY_AGNT - launchCampaignBalance; + // Take full nativeAmountForOLASBurn or a missing part to fulfil the launch campaign amount + if (diff > nativeAmountForOLASBurn) { + launchCampaignBalance += nativeAmountForOLASBurn; + adjustedNativeAmountForAscendance = 0; + } else { + adjustedNativeAmountForAscendance = nativeAmountForOLASBurn - diff; + launchCampaignBalance += diff; + } + + // Call MAGA if the balance has reached + if (launchCampaignBalance >= LIQUIDITY_AGNT) { + _MAGA(); + } + } + } + + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } +} diff --git a/audits/internal2/analysis/contracts/MemeCelo-flatten.sol b/audits/internal2/analysis/contracts/MemeCelo-flatten.sol new file mode 100644 index 0000000..f33a6d6 --- /dev/null +++ b/audits/internal2/analysis/contracts/MemeCelo-flatten.sol @@ -0,0 +1,1211 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary( + address token0, + address token1, + uint24 fee, + uint160 sqrtPriceX96 + ) external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) + external + payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); +} + + +// File lib/solmate/src/utils/FixedPointMathLib.sol +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + + +// File contracts/MemeFactory.sol +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Transfers native token to be later converted to OLAS for burn. + /// @param amount Native token amount. + function _transferToLaterBurn(uint256 amount) internal virtual { + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160(FixedPointMathLib.sqrt(priceX96) * 2**48); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, + FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, , ) = IUniswapV3(uniV3PositionManager).mint(params); + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = + IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Account for launch campaign + // All funds ever collected are already wrapped + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Launch campaign logic. Allows diverting first x collected funds to a launch campaign. + /// @param nativeAmountForOLASBurn Native token amount (wrapped) for burning. + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal virtual returns (uint256 adjustedNativeAmountForAscendance); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 memeAmountForLP = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - memeAmountForLP; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collect(memeToken, memeSummon.heartersAmount, hearterContribution, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = scheduledForAscendance; + require(amount > 0, "Nothing to send"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Transfer native token to be converted to OLAS and burnt + _transferToLaterBurn(amount); + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + MemeSummon memory memeSummon = memeSummons[tokens[i]]; + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } + + // TODO Do we need this function as we all do via payable functions? + /// @dev Allows the contract to receive native token + receive() external payable {} +} + + +// File contracts/MemeCelo.sol +/// @title MemeCelo - a smart contract factory for Meme Token creation on Celo. +contract MemeCelo is MemeFactory { + /// @dev MemeBase constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal override pure returns (uint256) { + return nativeAmountForOLASBurn; + } + + function _wrap(uint256) internal virtual override {} +} diff --git a/audits/internal2/analysis/contracts/MemeFactory-flatten.sol b/audits/internal2/analysis/contracts/MemeFactory-flatten.sol new file mode 100644 index 0000000..5af1603 --- /dev/null +++ b/audits/internal2/analysis/contracts/MemeFactory-flatten.sol @@ -0,0 +1,1195 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + + +// File contracts/interfaces/IUniswapV3.sol +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary( + address token0, + address token1, + uint24 fee, + uint160 sqrtPriceX96 + ) external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) + external + payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); +} + + +// File lib/solmate/src/utils/FixedPointMathLib.sol +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + + +// File contracts/MemeFactory.sol +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of meme token => Meme summon struct + mapping(address => MemeSummon) public memeSummons; + // Map of mem token => (map of hearter => native token balance) + mapping(address => mapping(address => uint256)) public memeHearters; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Transfers native token to be later converted to OLAS for burn. + /// @param amount Native token amount. + function _transferToLaterBurn(uint256 amount) internal virtual { + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160(FixedPointMathLib.sqrt(priceX96) * 2**48); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, + FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, , ) = IUniswapV3(uniV3PositionManager).mint(params); + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = + IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Account for launch campaign + // All funds ever collected are already wrapped + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collect( + address memeToken, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeToken][msg.sender] = 0; + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Launch campaign logic. Allows diverting first x collected funds to a launch campaign. + /// @param nativeAmountForOLASBurn Native token amount (wrapped) for burning. + function _launchCampaign(uint256 nativeAmountForOLASBurn) internal virtual returns (uint256 adjustedNativeAmountForAscendance); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + // Create a new token + Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); + address memeToken = address(newTokenInstance); + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + + // Initiate meme token map values + memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeToken][msg.sender] = msg.value; + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Summoned(msg.sender, memeToken, msg.value); + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeToken Meme token address. + function heartThisMeme(address memeToken) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeToken][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeToken, msg.value); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeToken Meme token address. + function unleashThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon storage memeSummon = memeSummons[memeToken]; + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + uint256 adjustedNativeAmountForAscendance = _launchCampaign(nativeAmountForOLASBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += adjustedNativeAmountForAscendance; + + // Calculate LP token allocation according to LP percentage and distribution to supporters + Meme memeTokenInstance = Meme(memeToken); + uint256 totalSupply = memeTokenInstance.totalSupply(); + uint256 memeAmountForLP = (totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = totalSupply - memeAmountForLP; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + if (hearterContribution > 0) { + _collect(memeToken, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collect(memeToken, memeSummon.heartersAmount, hearterContribution, memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get the meme summon info + MemeSummon memory memeSummon = memeSummons[memeToken]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = scheduledForAscendance; + require(amount > 0, "Nothing to send"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Transfer native token to be converted to OLAS and burnt + _transferToLaterBurn(amount); + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + MemeSummon memory memeSummon = memeSummons[tokens[i]]; + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } + + // TODO Do we need this function as we all do via payable functions? + /// @dev Allows the contract to receive native token + receive() external payable {} +} diff --git a/audits/internal2/analysis/contracts/UniswapPriceOracle-flatten.sol b/audits/internal2/analysis/contracts/UniswapPriceOracle-flatten.sol new file mode 100644 index 0000000..6430c04 --- /dev/null +++ b/audits/internal2/analysis/contracts/UniswapPriceOracle-flatten.sol @@ -0,0 +1,93 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IUniswapV2 { + function token0() external view returns (address); + function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast); + function price0CumulativeLast() external view returns (uint256); + function price1CumulativeLast() external view returns (uint256); +} + +/// @title UniswapPriceOracle - a smart contract oracle wrapper for Uniswap V2 pools +/// @dev This contract acts as an oracle wrapper for a specific Uniswap V2 pool. It allows: +/// 1) Getting the price by any caller +/// 2) Validating slippage against the oracle +contract UniswapPriceOracle { + // LP token address + address public immutable pair; + // Max allowable slippage + uint256 public immutable maxSlippage; + // LP token direction + uint256 public immutable direction; + + constructor(address _nativeToken, uint256 _maxSlippage, address _pair) { + pair = _pair; + maxSlippage = _maxSlippage; + + // Get token direction + address token0 = IUniswapV2(pair).token0(); + if (token0 != _nativeToken) { + direction = 1; + } + } + + /// @dev Gets the current OLAS token price in 1e18 format. + function getPrice() public view returns (uint256) { + uint256[] memory balances = new uint256[](2); + (balances[0], balances[1], ) = IUniswapV2(pair).getReserves(); + // Native token + uint256 balanceIn = balances[direction]; + // OLAS + uint256 balanceOut = balances[(direction + 1) % 2]; + + return (balanceOut * 1e18) / balanceIn; + } + + /// @dev Updates the time-weighted average price. + function updatePrice() external pure returns (bool) { + // Nothing to update; use built-in TWAP from Uniswap V2 pool + return true; + } + + /// @dev Validates the current price against a TWAP according to slippage tolerance. + /// @param slippage the acceptable slippage tolerance + function validatePrice(uint256 slippage) external view returns (bool) { + require(slippage <= maxSlippage, "Slippage overflow"); + + // Compute time-weighted average price + // Fetch the cumulative prices from the pair + uint256 cumulativePriceLast; + if (direction == 0) { + cumulativePriceLast = IUniswapV2(pair).price1CumulativeLast(); + } else { + cumulativePriceLast = IUniswapV2(pair).price0CumulativeLast(); + } + + // Fetch the reserves and the last block timestamp + (, , uint256 blockTimestampLast) = IUniswapV2(pair).getReserves(); + + // Require at least one block since last update + if (block.timestamp == blockTimestampLast) { + return false; + } + uint256 elapsedTime = block.timestamp - blockTimestampLast; + + uint256 tradePrice = getPrice(); + + // Calculate cumulative prices + uint256 cumulativePrice = cumulativePriceLast + (tradePrice * elapsedTime); + + // Calculate the TWAP for OLAS in terms of native token + uint256 timeWeightedAverage = (cumulativePrice - cumulativePriceLast) / elapsedTime; + + // Get the final derivation to compare with slippage + // Final derivation value must be + uint256 derivation = (tradePrice > timeWeightedAverage) + ? ((tradePrice - timeWeightedAverage) * 1e16) / timeWeightedAverage + : ((timeWeightedAverage - tradePrice) * 1e16) / timeWeightedAverage; + + return derivation <= slippage; + } +} diff --git a/audits/internal2/analysis/contracts/script.sh b/audits/internal2/analysis/contracts/script.sh new file mode 100755 index 0000000..286784b --- /dev/null +++ b/audits/internal2/analysis/contracts/script.sh @@ -0,0 +1,20 @@ +#!/bin/bash + + slither_options=("call-graph" "constructor-calls" "contract-summary" "data-dependency" "function-summary" + "human-summary" "inheritance" "inheritance-graph" "modifiers" "require" "variable-order" "vars-and-auth") + echo -e "\nRunning slither routines ..." + for so in "${slither_options[@]}"; do + echo -e "\t$so" + slither . --print ${so} &> "slither_$so.txt" + done + echo -e "\tfull report" + slither . &> "slither_full.txt" + + # moving generated .dot files to the audit folder + count=`ls -1 *.dot 2>/dev/null | wc -l` + echo -e "\tgenerated $count .dot files" + for _filename in *.dot; do + filename="${_filename%.*}" + cat $_filename | dot -Tpng > slither_$filename.png + done + rm *.dot diff --git a/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.BalancerPriceOracle.call-graph.png b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.BalancerPriceOracle.call-graph.png new file mode 100644 index 0000000..8aab210 Binary files /dev/null and b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.BalancerPriceOracle.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.IVault.call-graph.png b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.IVault.call-graph.png new file mode 100644 index 0000000..4747937 Binary files /dev/null and b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.IVault.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..d7f9a62 Binary files /dev/null and b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..5e9a4ff Binary files /dev/null and b/audits/internal2/analysis/slither_BalancerPriceOracle-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.png b/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.png new file mode 100644 index 0000000..b6a09ef Binary files /dev/null and b/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..0904813 Binary files /dev/null and b/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..b3adeba Binary files /dev/null and b/audits/internal2/analysis/slither_BuyBackBurner-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.png b/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.png new file mode 100644 index 0000000..a888f2d Binary files /dev/null and b/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..d42d113 Binary files /dev/null and b/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..fd2227c Binary files /dev/null and b/audits/internal2/analysis/slither_BuyBackBurnerProxy-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_Meme.sol.Meme.call-graph.png b/audits/internal2/analysis/slither_Meme.sol.Meme.call-graph.png new file mode 100644 index 0000000..a0bbbf3 Binary files /dev/null and b/audits/internal2/analysis/slither_Meme.sol.Meme.call-graph.png differ diff --git a/audits/internal2/analysis/slither_Meme.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_Meme.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..a0bbbf3 Binary files /dev/null and b/audits/internal2/analysis/slither_Meme.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_Meme.sol.inheritance-graph.png b/audits/internal2/analysis/slither_Meme.sol.inheritance-graph.png new file mode 100644 index 0000000..c37b609 Binary files /dev/null and b/audits/internal2/analysis/slither_Meme.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png new file mode 100644 index 0000000..901f9f9 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png new file mode 100644 index 0000000..d24c3a5 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..be77144 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..c6ab2d1 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..2074a55 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IERC20.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..c047667 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IUniswapV3.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..6db84b1 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IWETH.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.Meme.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..a0bbbf3 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.png new file mode 100644 index 0000000..edc2b02 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..ca4054b Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..60f1a8d Binary files /dev/null and b/audits/internal2/analysis/slither_MemeArbitrum-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..2074a55 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..c047667 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.IUniswapV3.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..6db84b1 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..a0bbbf3 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png new file mode 100644 index 0000000..1f9eccb Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..778cf74 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..e1ea99d Binary files /dev/null and b/audits/internal2/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..2074a55 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..c047667 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.IUniswapV3.call-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..6db84b1 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..a0bbbf3 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png new file mode 100644 index 0000000..3132049 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..2091a4b Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..70263a0 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..2074a55 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..c047667 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.IUniswapV3.call-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..6db84b1 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..a0bbbf3 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png new file mode 100644 index 0000000..7f44b33 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..1672db3 Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..8a7a95f Binary files /dev/null and b/audits/internal2/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.IUniswapV2.call-graph.png b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.IUniswapV2.call-graph.png new file mode 100644 index 0000000..37a7248 Binary files /dev/null and b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.IUniswapV2.call-graph.png differ diff --git a/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.UniswapPriceOracle.call-graph.png b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.UniswapPriceOracle.call-graph.png new file mode 100644 index 0000000..40ecfad Binary files /dev/null and b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.UniswapPriceOracle.call-graph.png differ diff --git a/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.all_contracts.call-graph.png b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..91c5c27 Binary files /dev/null and b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.inheritance-graph.png b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..e304771 Binary files /dev/null and b/audits/internal2/analysis/slither_UniswapPriceOracle-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal2/analysis/slither_call-graph.txt b/audits/internal2/analysis/slither_call-graph.txt new file mode 100644 index 0000000..820f2f0 --- /dev/null +++ b/audits/internal2/analysis/slither_call-graph.txt @@ -0,0 +1,85 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers:Call Graph: ./MemeActivityChecker-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.dot +Call Graph: ./MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.dot + +INFO:Printers:Call Graph: ./BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.dot + +INFO:Printers:Call Graph: ./Meme.sol.all_contracts.call-graph.dot +Call Graph: ./Meme.sol.Meme.call-graph.dot + +INFO:Printers:Call Graph: ./MemeCelo-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.MemeCelo.call-graph.dot + +INFO:Printers:Call Graph: ./BuyBackBurner-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.dot + +INFO:Printers:Call Graph: ./BalancerPriceOracle-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./BalancerPriceOracle-flatten.sol.IVault.call-graph.dot +Call Graph: ./BalancerPriceOracle-flatten.sol.BalancerPriceOracle.call-graph.dot + +INFO:Printers:Call Graph: ./MemeArbitrum-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.dot + +INFO:Printers:Call Graph: ./UniswapPriceOracle-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./UniswapPriceOracle-flatten.sol.IUniswapV2.call-graph.dot +Call Graph: ./UniswapPriceOracle-flatten.sol.UniswapPriceOracle.call-graph.dot + +INFO:Printers:Call Graph: ./MemeFactory-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.MemeFactory.call-graph.dot + +INFO:Printers:Call Graph: ./MemeBase-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.MemeBase.call-graph.dot + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_constructor-calls.txt b/audits/internal2/analysis/slither_constructor-calls.txt new file mode 100644 index 0000000..69c7292 --- /dev/null +++ b/audits/internal2/analysis/slither_constructor-calls.txt @@ -0,0 +1,496 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +################################### +####### MemeActivityChecker ####### +################################### + +## Constructor Call Sequence + - MemeActivityChecker + +## Constructor Definitions + +### MemeActivityChecker + + constructor(address _memeFactory, uint256 _livenessRatio) { + // Check the zero address + if (_memeFactory == address(0)) { + revert ZeroAddress(); + } + + // Check for zero value + if (_livenessRatio == 0) { + revert ZeroValue(); + } + + memeFactory = _memeFactory; + livenessRatio = _livenessRatio; + } + +INFO:Printers: +################################## +####### BuyBackBurnerProxy ####### +################################## + +## Constructor Call Sequence + - BuyBackBurnerProxy + +## Constructor Definitions + +### BuyBackBurnerProxy + + constructor(address implementation, bytes memory buyBackBurnerData) { + // Check for the zero address, since the delegatecall works even with the zero one + if (implementation == address(0)) { + revert ZeroImplementationAddress(); + } + + // Check for the zero data + if (buyBackBurnerData.length == 0) { + revert ZeroData(); + } + + // Store the buyBackBurner implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, implementation) + } + // Initialize proxy storage + (bool success, ) = implementation.delegatecall(buyBackBurnerData); + if (!success) { + revert InitializationFailed(); + } + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +######################## +####### MemeCelo ####### +######################## + +## Constructor Call Sequence + - MemeFactory + - MemeCelo + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +### MemeCelo + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + + +INFO:Printers: +INFO:Printers: +################################### +####### BalancerPriceOracle ####### +################################### + +## Constructor Call Sequence + - BalancerPriceOracle + +## Constructor Definitions + +### BalancerPriceOracle + + constructor( + address _olas, + address _nativeToken, + uint256 _maxSlippage, + uint256 _minUpdateTimePeriod, + address _balancerVault, + bytes32 _balancerPoolId + ) { + require(_maxSlippage < 100, "Slippage must be less than 100%"); + + olas = _olas; + nativeToken = _nativeToken; + maxSlippage = _maxSlippage; + minUpdateTimePeriod = _minUpdateTimePeriod; + balancerVault = _balancerVault; + balancerPoolId = _balancerPoolId; + + // Get token direction + (address[] memory tokens, , ) = IVault(balancerVault).getPoolTokens(_balancerPoolId); + if (tokens[0] != _nativeToken) { + direction = 1; + } + + // Initialize price snapshot + updatePrice(); + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +############################ +####### MemeArbitrum ####### +############################ + +## Constructor Call Sequence + - MemeFactory + - MemeArbitrum + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +### MemeArbitrum + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + + +INFO:Printers: +################################## +####### UniswapPriceOracle ####### +################################## + +## Constructor Call Sequence + - UniswapPriceOracle + +## Constructor Definitions + +### UniswapPriceOracle + + constructor(address _nativeToken, uint256 _maxSlippage, address _pair) { + pair = _pair; + maxSlippage = _maxSlippage; + + // Get token direction + address token0 = IUniswapV2(pair).token0(); + if (token0 != _nativeToken) { + direction = 1; + } + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +########################### +####### MemeFactory ####### +########################### + +## Constructor Call Sequence + - MemeFactory + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +######################## +####### MemeBase ####### +######################## + +## Constructor Call Sequence + - MemeFactory + - MemeBase + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +### MemeBase + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue, + address[] memory accounts, + uint256[] memory amounts + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) { + if (accounts.length > 0) { + _launchCampaignSetup(accounts, amounts); + } + } + + + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_contract-summary.txt b/audits/internal2/analysis/slither_contract-summary.txt new file mode 100644 index 0000000..26c5cf4 --- /dev/null +++ b/audits/internal2/analysis/slither_contract-summary.txt @@ -0,0 +1,485 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: ++ Contract IMemeFactory (Most derived contract) + - From IMemeFactory + - mapAccountActivities(address) (external) + ++ Contract MemeActivityChecker (Most derived contract) + - From MemeActivityChecker + - constructor(address,uint256) (public) + - getMultisigNonces(address) (external) + - isRatioPass(uint256[],uint256[],uint256) (external) + +INFO:Printers: ++ Contract BuyBackBurnerProxy (Upgradeable Proxy) (Most derived contract) + - From BuyBackBurnerProxy + - constructor(address,bytes) (public) + - fallback() (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - mint(IUniswapV3.MintParams) (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign(uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + ++ Contract MemeCelo (Most derived contract) + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + - From MemeCelo + - _launchCampaign(uint256) (internal) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256) (public) + +INFO:Printers: ++ Contract BuyBackBurner (Most derived contract) + - From BuyBackBurner + - changeImplementation(address) (external) + - changeOwner(address) (external) + - initialize() (external) + +INFO:Printers: ++ Contract IVault (Most derived contract) + - From IVault + - getPoolTokens(bytes32) (external) + ++ Contract BalancerPriceOracle (Most derived contract) + - From BalancerPriceOracle + - constructor(address,address,uint256,uint256,address,bytes32) (public) + - getPrice() (public) + - updatePrice() (public) + - validatePrice(uint256) (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - mint(IUniswapV3.MintParams) (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign(uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract MemeArbitrum (Most derived contract) + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + - From MemeArbitrum + - _launchCampaign(uint256) (internal) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256) (public) + +INFO:Printers: ++ Contract IUniswapV2 (Most derived contract) + - From IUniswapV2 + - getReserves() (external) + - price0CumulativeLast() (external) + - price1CumulativeLast() (external) + - token0() (external) + ++ Contract UniswapPriceOracle (Most derived contract) + - From UniswapPriceOracle + - constructor(address,uint256,address) (public) + - getPrice() (public) + - updatePrice() (external) + - validatePrice(uint256) (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - mint(IUniswapV3.MintParams) (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory (Most derived contract) + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign(uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - mint(IUniswapV3.MintParams) (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign(uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract MemeBase (Most derived contract) + - From MemeFactory + - _collect(address,uint256,uint256,uint256) (internal) + - _collectFees(address,uint256,bool) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _transferToLaterBurn(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(address) (external) + - purgeThisMeme(address) (external) + - receive() (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(address) (external) + - From MemeBase + - _MAGA() (private) + - _launchCampaign(uint256) (internal) + - _launchCampaignSetup(address[],uint256[]) (private) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256,address[],uint256[]) (public) + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_data-dependency.txt b/audits/internal2/analysis/slither_data-dependency.txt new file mode 100644 index 0000000..36d9c83 --- /dev/null +++ b/audits/internal2/analysis/slither_data-dependency.txt @@ -0,0 +1,16312 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +Contract IMemeFactory ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function mapAccountActivities(address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| multisig | [] | +| | [] | ++----------+--------------+ +INFO:Printers: +Contract IMemeFactory ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function mapAccountActivities(address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| multisig | [] | +| | [] | ++----------+--------------+ +Contract MemeActivityChecker ++---------------+-------------------------------------+ +| Variable | Dependencies | ++---------------+-------------------------------------+ +| livenessRatio | ['_livenessRatio', 'livenessRatio'] | +| memeFactory | ['_memeFactory', 'memeFactory'] | ++---------------+-------------------------------------+ + +Function constructor(address,uint256) ++-----------------------------------+--------------------+ +| Variable | Dependencies | ++-----------------------------------+--------------------+ +| _memeFactory | [] | +| _livenessRatio | [] | +| MemeActivityChecker.livenessRatio | ['_livenessRatio'] | +| MemeActivityChecker.memeFactory | ['_memeFactory'] | ++-----------------------------------+--------------------+ +Function getMultisigNonces(address) ++-----------------------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------------------+---------------------------------------+ +| multisig | [] | +| nonces | ['memeFactory', 'multisig', 'nonces'] | +| MemeActivityChecker.livenessRatio | [] | +| MemeActivityChecker.memeFactory | ['memeFactory'] | ++-----------------------------------+---------------------------------------+ +Function isRatioPass(uint256[],uint256[],uint256) ++-----------------------------------+-------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------+-------------------------------------------------------------+ +| curNonces | ['curNonces'] | +| lastNonces | ['lastNonces'] | +| ts | [] | +| ratioPass | ['curNonces', 'lastNonces', 'livenessRatio', 'ratio', 'ts'] | +| ratio | ['curNonces', 'lastNonces', 'ts'] | +| MemeActivityChecker.livenessRatio | ['livenessRatio'] | +| MemeActivityChecker.memeFactory | [] | ++-----------------------------------+-------------------------------------------------------------+ +INFO:Printers: +Contract BuyBackBurnerProxy ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | ++-----------------------+---------------------------+ + +Function constructor(address,bytes) ++------------------------------------------+----------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------------+----------------------------------------------------+ +| implementation | [] | +| buyBackBurnerData | ['buyBackBurnerData'] | +| success | ['TUPLE_0', 'buyBackBurnerData', 'implementation'] | +| BuyBackBurnerProxy.BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | ++------------------------------------------+----------------------------------------------------+ +Function fallback() ++------------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------------+---------------------------+ +| BuyBackBurnerProxy.BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | ++------------------------------------------+---------------------------+ +Function slitherConstructorConstantVariables() ++------------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------------+--------------+ +| BuyBackBurnerProxy.BUY_BACK_BURNER_PROXY | [] | ++------------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------[96m---+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract MemeCelo ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE', 'TUPLE_4', 'TUPLE_5', '_uniV3PositionManager', 'adjustedNativeAmountForAscendance', 'amount0', 'amount1', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_5', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _launchCampaign(uint256) ++------------------------------------+-----------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------+ +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract BuyBackBurner ++-----------------------+-------------------------------------+ +| Variable | Dependencies | ++-----------------------+-------------------------------------+ +| VERSION | [] | +| BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | +| OLAS_BURNER | [] | +| owner | ['msg.sender', 'newOwner', 'owner'] | ++-----------------------+-------------------------------------+ + +Function initialize() ++-------------------------------------+-------------------------+ +| Variable | Dependencies | ++-------------------------------------+-------------------------+ +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.owner | ['msg.sender', 'owner'] | ++-------------------------------------+-------------------------+ +Function changeImplementation(address) ++-------------------------------------+---------------------------+ +| Variable | Dependencies | ++-------------------------------------+---------------------------+ +| newImplementation | [] | +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.owner | ['owner'] | ++-------------------------------------+---------------------------+ +Function changeOwner(address) ++-------------------------------------+-----------------------+ +| Variable | Dependencies | ++-------------------------------------+-----------------------+ +| newOwner | [] | +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.owner | ['newOwner', 'owner'] | ++-------------------------------------+-----------------------+ +Function slitherConstructorConstantVariables() ++-------------------------------------+--------------+ +| Variable | Dependencies | ++-------------------------------------+--------------+ +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.owner | [] | ++-------------------------------------+--------------+ +INFO:Printers: +Contract IVault ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function getPoolTokens(bytes32) ++-----------------+--------------+ +| Variable | Dependencies | ++-----------------+--------------+ +| poolId | [] | +| tokens | [] | +| balances | [] | +| lastChangeBlock | [] | ++-----------------+--------------+ +INFO:Printers: +Contract IVault ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function getPoolTokens(bytes32) ++-----------------+--------------+ +| Variable | Dependencies | ++-----------------+--------------+ +| poolId | [] | +| tokens | [] | +| balances | [] | +| lastChangeBlock | [] | ++-----------------+--------------+ +Contract BalancerPriceOracle ++---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| snapshotHistory | ['TUPLE_1', '_balancerPoolId', '_balancerVault', 'averagePrice', 'balanceIn', 'balanceOut', 'balancerPoolId', 'balancerVault', 'balances', 'block.timestamp', 'currentPrice', 'elapsedTime', 'snapshot', 'snapshotHistory'] | +| maxSlippage | ['_maxSlippage', 'maxSlippage'] | +| minUpdateTimePeriod | ['_minUpdateTimePeriod', 'minUpdateTimePeriod'] | +| direction | ['direction'] | +| nativeToken | ['_nativeToken'] | +| olas | ['_olas'] | +| balancerVault | ['_balancerVault', 'balancerVault'] | +| balancerPoolId | ['_balancerPoolId', 'balancerPoolId'] | ++---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,uint256,uint256,address,bytes32) ++-----------------------------------------+-----------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------------+-----------------------------------------------------------------------------+ +| _olas | [] | +| _nativeToken | [] | +| _maxSlippage | [] | +| _minUpdateTimePeriod | [] | +| _balancerVault | [] | +| _balancerPoolId | [] | +| tokens | ['TUPLE_0', '_balancerPoolId', '_balancerVault', 'balancerVault', 'tokens'] | +| BalancerPriceOracle.snapshotHistory | [] | +| BalancerPriceOracle.maxSlippage | ['_maxSlippage'] | +| BalancerPriceOracle.minUpdateTimePeriod | ['_minUpdateTimePeriod'] | +| BalancerPriceOracle.direction | [] | +| BalancerPriceOracle.nativeToken | ['_nativeToken'] | +| BalancerPriceOracle.olas | ['_olas'] | +| BalancerPriceOracle.balancerVault | ['_balancerVault', 'balancerVault'] | +| BalancerPriceOracle.balancerPoolId | ['_balancerPoolId'] | ++-----------------------------------------+-----------------------------------------------------------------------------+ +Function getPrice() ++-----------------------------------------+------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------------+------------------------------------------------------------+ +| | [] | +| balances | ['TUPLE_1', 'balancerPoolId', 'balancerVault', 'balances'] | +| balanceIn | ['TUPLE_1', 'balancerPoolId', 'balancerVault', 'balances'] | +| balanceOut | ['TUPLE_1', 'balancerPoolId', 'balancerVault', 'balances'] | +| BalancerPriceOracle.snapshotHistory | [] | +| BalancerPriceOracle.maxSlippage | [] | +| BalancerPriceOracle.minUpdateTimePeriod | [] | +| BalancerPriceOracle.direction | ['direction'] | +| BalancerPriceOracle.nativeToken | [] | +| BalancerPriceOracle.olas | [] | +| BalancerPriceOracle.balancerVault | ['balancerVault'] | +| BalancerPriceOracle.balancerPoolId | ['balancerPoolId'] | ++-----------------------------------------+------------------------------------------------------------+ +Function updatePrice() ++-----------------------------------------+---------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------------+---------------------------------------------------------------------------------------------------+ +| | [] | +| currentPrice | [] | +| snapshot | ['averagePrice', 'block.timestamp', 'currentPrice', 'elapsedTime', 'snapshot'] | +| elapsedTime | ['block.timestamp', 'snapshot'] | +| averagePrice | ['block.timestamp', 'currentPrice', 'elapsedTime', 'snapshot'] | +| BalancerPriceOracle.snapshotHistory | ['averagePrice', 'block.timestamp', 'currentPrice', 'elapsedTime', 'snapshot', 'snapshotHistory'] | +| BalancerPriceOracle.maxSlippage | ['maxSlippage'] | +| BalancerPriceOracle.minUpdateTimePeriod | ['minUpdateTimePeriod'] | +| BalancerPriceOracle.direction | [] | +| BalancerPriceOracle.nativeToken | [] | +| BalancerPriceOracle.olas | [] | +| BalancerPriceOracle.balancerVault | [] | +| BalancerPriceOracle.balancerPoolId | [] | ++-----------------------------------------+---------------------------------------------------------------------------------------------------+ +Function validatePrice(uint256) ++-----------------------------------------+------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------------+------------------------------------------------------------------------------------------------------+ +| slippage | [] | +| | [] | +| snapshot | ['snapshot', 'snapshotHistory'] | +| elapsedTime | ['block.timestamp', 'snapshot', 'snapshotHistory'] | +| timeWeightedAverage | ['block.timestamp', 'elapsedTime', 'snapshot', 'snapshotHistory'] | +| tradePrice | [] | +| lowerBound | ['block.timestamp', 'elapsedTime', 'slippage', 'snapshot', 'snapshotHistory', 'timeWeightedAverage'] | +| upperBound | ['block.timestamp', 'elapsedTime', 'slippage', 'snapshot', 'snapshotHistory', 'timeWeightedAverage'] | +| BalancerPriceOracle.snapshotHistory | ['snapshotHistory'] | +| BalancerPriceOracle.maxSlippage | ['maxSlippage'] | +| BalancerPriceOracle.minUpdateTimePeriod | [] | +| BalancerPriceOracle.direction | [] | +| BalancerPriceOracle.nativeToken | [] | +| BalancerPriceOracle.olas | [] | +| BalancerPriceOracle.balancerVault | [] | +| BalancerPriceOracle.balancerPoolId | [] | ++-----------------------------------------+------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] [34m| +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract MemeArbitrum ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE', 'TUPLE_4', 'TUPLE_5', '_uniV3PositionManager', 'adjustedNativeAmountForAscendance', 'amount0', 'amount1', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_5', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _launchCampaign(uint256) ++------------------------------------+-----------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------+ +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------+ +Function _wrap(uint256) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract IUniswapV2 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function token0() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Function getReserves() ++---------------------+--------------+ +| Variable | Dependencies | ++---------------------+--------------+ +| _reserve0 | [] | +| _reserve1 | [] | +| _blockTimestampLast | [] | ++---------------------+--------------+ +Function price0CumulativeLast() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Function price1CumulativeLast() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +INFO:Printers: +Contract IUniswapV2 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function token0() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Function getReserves() ++---------------------+--------------+ +| Variable | Dependencies | ++---------------------+--------------+ +| _reserve0 | [] | +| _reserve1 | [] | +| _blockTimestampLast | [] | ++---------------------+--------------+ +Function price0CumulativeLast() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Function price1CumulativeLast() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract UniswapPriceOracle ++-------------+---------------------------------+ +| Variable | Dependencies | ++-------------+---------------------------------+ +| pair | ['_pair', 'pair'] | +| maxSlippage | ['_maxSlippage', 'maxSlippage'] | +| direction | ['direction'] | ++-------------+---------------------------------+ + +Function constructor(address,uint256,address) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _nativeToken | [] | +| _maxSlippage | [] | +| _pair | [] | +| token0 | ['_pair', 'pair'] | +| UniswapPriceOracle.pair | ['_pair', 'pair'] | +| UniswapPriceOracle.maxSlippage | ['_maxSlippage'] | +| UniswapPriceOracle.direction | [] | ++--------------------------------+-------------------+ +Function getPrice() ++--------------------------------+---------------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------------+ +| | [] | +| balances | ['TUPLE_0', 'balances', 'pair'] | +| balanceIn | ['TUPLE_0', 'balances', 'pair'] | +| balanceOut | ['TUPLE_0', 'balances', 'pair'] | +| UniswapPriceOracle.pair | ['pair'] | +| UniswapPriceOracle.maxSlippage | [] | +| UniswapPriceOracle.direction | ['direction'] | ++--------------------------------+---------------------------------+ +Function updatePrice() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| UniswapPriceOracle.pair | [] | +| UniswapPriceOracle.maxSlippage | [] | +| UniswapPriceOracle.direction | [] | ++--------------------------------+--------------+ +Function validatePrice(uint256) ++--------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| slippage | [] | +| | [] | +| cumulativePriceLast | ['cumulativePriceLast', 'pair'] | +| blockTimestampLast | ['TUPLE_1', 'pair'] | +| elapsedTime | ['TUPLE_1', 'block.timestamp', 'blockTimestampLast', 'pair'] | +| tradePrice | [] | +| cumulativePrice | ['TUPLE_1', 'block.timestamp', 'blockTimestampLast', 'cumulativePriceLast', 'elapsedTime', 'pair', 'tradePrice'] | +| timeWeightedAverage | ['TUPLE_1', 'block.timestamp', 'blockTimestampLast', 'cumulativePrice', 'cumulativePriceLast', 'elapsedTime', 'pair', 'tradePrice'] | +| derivation | ['TUPLE_1', 'block.timestamp', 'blockTimestampLast', 'cumulativePrice', 'cumulativePriceLast', 'derivation', 'elapsedTime', 'pair', 'timeWeightedAverage', 'tradePrice'] | +| UniswapPriceOracle.pair | ['pair'] | +| UniswapPriceOracle.maxSlippage | ['maxSlippage'] | +| UniswapPriceOracle.direction | ['direction'] | ++--------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++---------[34m-----------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _transferToLaterBurn(uint256) ++------------------------------------+-------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------+ +| amount | ['amount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['amount0', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| amount1 | ['amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------------------------------------------+ +Function _collect(address,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeAmountForOLASBurn | [] | +| adjustedNativeAmountForAscendance | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| newTokenInstance | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| memeToken | ['DECIMALS', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['DECIMALS', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | ++------------------------------------+----------------------------------------------------------------------------------------------+ +Function heartThisMeme(address) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function unleashThisMeme(address) ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| adjustedNativeAmountForAscendance | [] | +| memeTokenInstance | ['memeToken'] | +| totalSupply | ['memeToken', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeToken', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| amount | ['scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function receive() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract MemeBase ++----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['DECIMALS', 'launchCampaignTokenAddress', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| scheduledForAscendance | ['adjustedNativeAmountForAscendance', 'scheduledForAscendance'] | +| _locked | ['_locked'] | +| memeSummons | ['CONTRIBUTION_AGNT', 'DECIMALS', 'LP_PERCENTAGE', 'TUPLE_5', 'TUPLE_6', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'launchCampaignTokenAddress', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'positionId', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['DECIMALS', 'launchCampaignTokenAddress', 'memeToken', 'memeTokens', 'name', 'newTokenInstance', 'symbol', 'totalSupply'] | +| CONTRIBUTION_AGNT | ['CONTRIBUTION_AGNT'] | +| LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| launchCampaignTokenAddress | ['DECIMALS', 'launchCampaignTokenAddress'] | +| launchCampaignBalance | ['CONTRIBUTION_AGNT', 'DECIMALS', 'LIQUIDITY_AGNT', 'LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE', 'TUPLE_4', 'TUPLE_5', 'TUPLE_6', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'diff', 'heartersAmount', 'isNativeFirst', 'launchCampaignBalance', 'launchCampaignTokenAddress', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenInstance', 'msg.value', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | ++----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256,address[],uint256[]) ++-------------------------------------+--------------+ +| Variable | Dependencies | ++-------------------------------------+--------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| accounts | ['accounts'] | +| amounts | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.launchCampaignTokenAddress | [] | +| MemeBase.launchCampaignBalance | [] | ++-------------------------------------+--------------+ +Function _launchCampaignSetup(address[],uint256[]) ++-------------------------------------+----------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------------------+----------------------------------------------------------+ +| accounts | ['accounts'] | +| amounts | ['amounts'] | +| totalAmount | ['amounts', 'totalAmount'] | +| i | ['i'] | +| adjustedAmount | ['amounts', 'totalAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['DECIMALS', 'launchCampaignTokenAddress', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['CONTRIBUTION_AGNT', 'memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | ['DECIMALS', 'launchCampaignTokenAddress', 'memeTokens'] | +| MemeBase.CONTRIBUTION_AGNT | ['CONTRIBUTION_AGNT'] | +| MemeBase.LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| MemeBase.launchCampaignTokenAddress | ['DECIMALS'] | +| MemeBase.launchCampaignBalance | [] | ++-------------------------------------+----------------------------------------------------------+ +Function _MAGA() ++-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeTokenInstance | ['launchCampaignTokenAddress'] | +| totalSupply | ['launchCampaignTokenAddress', 'memeTokenInstance'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'launchCampaignTokenAddress', 'memeTokenInstance', 'totalSupply'] | +| heartersAmount | ['LP_PERCENTAGE', 'launchCampaignTokenAddress', 'memeAmountForLP', 'memeTokenInstance', 'totalSupply'] | +| positionId | ['TUPLE_6'] | +| liquidity | ['TUPLE_6'] | +| isNativeFirst | ['TUPLE_6'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_6', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'launchCampaignTokenAddress', 'memeAmountForLP', 'memeSummon', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | ['LP_PERCENTAGE', 'TUPLE_6', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'launchCampaignTokenAddress', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeTokenInstance', 'positionId', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | ['CONTRIBUTION_AGNT'] | +| MemeBase.LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| MemeBase.launchCampaignTokenAddress | ['launchCampaignTokenAddress'] | +| MemeBase.launchCampaignBalance | [] | ++-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _launchCampaign(uint256) ++-------------------------------------+--------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------------------+--------------------------------------------------------------------------------+ +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| adjustedNativeAmountForAscendance | ['LIQUIDITY_AGNT', 'diff', 'launchCampaignBalance', 'nativeAmountForOLASBurn'] | +| diff | ['LIQUIDITY_AGNT', 'launchCampaignBalance', 'nativeAmountForOLASBurn'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| MemeBase.launchCampaignTokenAddress | [] | +| MemeBase.launchCampaignBalance | ['LIQUIDITY_AGNT', 'diff', 'launchCampaignBalance', 'nativeAmountForOLASBurn'] | ++-------------------------------------+--------------------------------------------------------------------------------+ +Function _wrap(uint256) ++-------------------------------------+-------------------------------+ +| Variable | Dependencies | ++-------------------------------------+-------------------------------+ +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.launchCampaignTokenAddress | [] | +| MemeBase.launchCampaignBalance | [] | ++-------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++-------------------------------------+--------------+ +| Variable | Dependencies | ++-------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.launchCampaignTokenAddress | [] | +| MemeBase.launchCampaignBalance | [] | ++-------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++-------------------------------------+--------------+ +| Variable | Dependencies | ++-------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._locked | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.launchCampaignTokenAddress | [] | +| MemeBase.launchCampaignBalance | [] | ++-------------------------------------+--------------+ +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_full.txt b/audits/internal2/analysis/slither_full.txt new file mode 100644 index 0000000..cef4eb5 --- /dev/null +++ b/audits/internal2/analysis/slither_full.txt @@ -0,0 +1,35 @@ + +In audit +INFO:Detectors: +Contract locking ether found: + Contract MemeCelo (MemeCelo-flatten.sol#1196-1211) has payable functions: + - MemeFactory.summonThisMeme(string,string,uint256) (MemeCelo-flatten.sol#953-990) + - MemeFactory.heartThisMeme(address) (MemeCelo-flatten.sol#994-1023) + - MemeFactory.receive() (MemeCelo-flatten.sol#1190) + But does not have a function to withdraw the ether +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#contracts-that-lock-ether + +Ignore +In a function MemeFactory._createUniswapPair(address,uint256,uint256) (MemeFactory-flatten.sol#834-877) variable MemeFactory.nativeToken (MemeFactory-flatten.sol#782) is read multiple times +In a function MemeFactory._createUniswapPair(address,uint256,uint256) (MemeFactory-flatten.sol#834-877) variable MemeFactory.uniV3PositionManager (MemeFactory-flatten.sol#784) is read multiple times +Reference: https://github.com/pessimistic-io/slitherin/blob/master/docs/multiple_storage_read.md + +Ignore +INFO:Detectors: +MemeFactory._collectFees(address,uint256,bool) (MemeBase-flatten.sol#876-910) has external calls inside a loop: (amount0,amount1) = IUniswapV3(uniV3PositionManager).collect(params) (MemeBase-flatten.sol#885-886) +MemeFactory._collectFees(address,uint256,bool) (MemeBase-flatten.sol#876-910) has external calls inside a loop: IERC20(memeToken).burn(memeAmountToBurn) (MemeBase-flatten.sol#900) +MemeBase._MAGA() (MemeBase-flatten.sol#1258-1288) has external calls inside a loop: totalSupply = memeTokenInstance.totalSupply() (MemeBase-flatten.sol#1260) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#827-870) has external calls inside a loop: IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96) (MemeBase-flatten.sol#847-848) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#827-870) has external calls inside a loop: IERC20(token0).approve(uniV3PositionManager,amount0) (MemeBase-flatten.sol#851) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#827-870) has external calls inside a loop: IERC20(token1).approve(uniV3PositionManager,amount1) (MemeBase-flatten.sol#852) +MemeFactory._createUniswapPair(address,uint256,uint256) (MemeBase-flatten.sol#827-870) has external calls inside a loop: (positionId,liquidity,None,None) = IUniswapV3(uniV3PositionManager).mint(params) (MemeBase-flatten.sol#869) +MemeFactory._collect(address,uint256,uint256,uint256) (MemeBase-flatten.sol#917-936) has external calls inside a loop: memeTokenInstance.transfer(msg.sender,allocation) (MemeBase-flatten.sol#933) +Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop + +Ignore +INFO:Detectors: +In a function MemeBase._launchCampaignSetup(address[],uint256[]) (MemeBase-flatten.sol#1227-1255) variable MemeBase.launchCampaignTokenAddress (MemeBase-flatten.sol#1205) is read multiple times +In a function MemeBase._MAGA() (MemeBase-flatten.sol#1258-1288) variable MemeBase.launchCampaignTokenAddress (MemeBase-flatten.sol#1205) is read multiple times +In a function MemeBase._launchCampaign(uint256) (MemeBase-flatten.sol#1290-1310) variable MemeBase.LIQUIDITY_AGNT (MemeBase-flatten.sol#1202) is read multiple times +In a function MemeBase._launchCampaign(uint256) (MemeBase-flatten.sol#1290-1310) variable MemeBase.launchCampaignBalance (MemeBase-flatten.sol#1207) is read multiple times +Reference: https://github.com/pessimistic-io/slitherin/blob/master/docs/multiple_storage_read.md diff --git a/audits/internal2/analysis/slither_function-summary.txt b/audits/internal2/analysis/slither_function-summary.txt new file mode 100644 index 0000000..b8c2a2b --- /dev/null +++ b/audits/internal2/analysis/slither_function-summary.txt @@ -0,0 +1,1251 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +Contract IMemeFactory +Contract vars: [] +Inheritance:: [] + ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| mapAccountActivities(address) | external | [] | [] | [] | [] | [] | 2 | ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeActivityChecker +Contract vars: ['livenessRatio', 'memeFactory'] +Inheritance:: [] + ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ +| constructor(address,uint256) | public | [] | [] | ['livenessRatio', 'memeFactory'] | ['revert ZeroAddress()', 'revert ZeroValue()'] | [] | 3 | +| getMultisigNonces(address) | external | [] | ['memeFactory'] | [] | [] | ['IMemeFactory(memeFactory).mapAccountActivities(multisig)', 'new uint256[](1)'] | 1 | +| isRatioPass(uint256[],uint256[],uint256) | external | [] | ['livenessRatio'] | [] | [] | [] | 2 | ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract BuyBackBurnerProxy +Contract vars: ['BUY_BACK_BURNER_PROXY'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------------------------+---------------------------+----------------------------------------------------------------------------+----------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------------------------+---------------------------+----------------------------------------------------------------------------+----------------------------------------------------+-----------------------+ +| constructor(address,bytes) | public | [] | ['BUY_BACK_BURNER_PROXY'] | [] | ['revert InitializationFailed()', 'revert ZeroData()'] | ['implementation.delegatecall(buyBackBurnerData)'] | 4 | +| | | | | | ['revert ZeroImplementationAddress()', 'sstore(uint256,uint256)'] | | | +| fallback() | external | [] | ['BUY_BACK_BURNER_PROXY'] | [] | ['calldatacopy(uint256,uint256,uint256)', 'calldatasize()'] | [] | 2 | +| | | | | | ['delegatecall(uint256,uint256,uint256,uint256,uint256,uint256)', 'gas()'] | | | +| | | | | | ['return(uint256,uint256)', 'returndatacopy(uint256,uint256,uint256)'] | | | +| | | | | | ['returndatasize()', 'revert(uint256,uint256)'] | | | +| | | | | | ['sload(uint256)'] | | | +| slitherConstructorConstantVariables() | internal | [] | [] | ['BUY_BACK_BURNER_PROXY'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------------------------+---------------------------+----------------------------------------------------------------------------+----------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeCelo +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: ['MemeFactory'] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| constructor(address,address,address,address,uint256) | public | [] | [] | [] | ['constructor'] | [] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 1 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract BuyBackBurner +Contract vars: ['VERSION', 'BUY_BACK_BURNER_PROXY', 'OLAS_BURNER', 'owner'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+-----------------------------------------+------------------------------------------+---------------------------------------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+-----------------------------------------+------------------------------------------+---------------------------------------------------------------+----------------+-----------------------+ +| initialize() | external | [] | ['msg.sender', 'owner'] | ['owner'] | ['revert AlreadyInitialized()'] | [] | 2 | +| changeImplementation(address) | external | [] | ['BUY_BACK_BURNER_PROXY', 'msg.sender'] | [] | ['revert OwnerOnly(address,address)', 'revert ZeroAddress()'] | [] | 3 | +| | | | ['owner'] | | ['sstore(uint256,uint256)'] | | | +| changeOwner(address) | external | [] | ['msg.sender', 'owner'] | ['owner'] | ['revert OwnerOnly(address,address)', 'revert ZeroAddress()'] | [] | 3 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['BUY_BACK_BURNER_PROXY', 'OLAS_BURNER'] | [] | [] | 1 | +| | | | | ['VERSION'] | | | | ++---------------------------------------+------------+-----------+-----------------------------------------+------------------------------------------+---------------------------------------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IVault +Contract vars: [] +Inheritance:: [] + ++------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| getPoolTokens(bytes32) | external | [] | [] | [] | [] | [] | 2 | ++------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract BalancerPriceOracle +Contract vars: ['snapshotHistory', 'maxSlippage', 'minUpdateTimePeriod', 'direction', 'nativeToken', 'olas', 'balancerVault', 'balancerPoolId'] +Inheritance:: [] + ++--------------------------------------------------------------+------------+-----------+---------------------------------------+----------------------------------------+-----------------------------------------+----------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------+------------+-----------+---------------------------------------+----------------------------------------+-----------------------------------------+----------------------------------------------------------+-----------------------+ +| constructor(address,address,uint256,uint256,address,bytes32) | public | [] | ['balancerVault'] | ['balancerPoolId', 'balancerVault'] | ['require(bool,string)', 'updatePrice'] | ['IVault(balancerVault).getPoolTokens(_balancerPoolId)'] | 2 | +| | | | | ['direction', 'maxSlippage'] | | | | +| | | | | ['minUpdateTimePeriod', 'nativeToken'] | | | | +| | | | | ['olas'] | | | | +| getPrice() | public | [] | ['balancerPoolId', 'balancerVault'] | [] | [] | ['IVault(balancerVault).getPoolTokens(balancerPoolId)'] | 1 | +| | | | ['direction'] | | | | | +| updatePrice() | public | [] | ['block.timestamp', 'maxSlippage'] | ['snapshotHistory'] | ['getPrice', 'require(bool,string)'] | [] | 1 | +| | | | ['minUpdateTimePeriod', 'msg.sender'] | | | | | +| | | | ['snapshotHistory'] | | | | | +| validatePrice(uint256) | external | [] | ['block.timestamp', 'maxSlippage'] | [] | ['getPrice', 'require(bool,string)'] | [] | 1 | +| | | | ['snapshotHistory'] | | | | | ++--------------------------------------------------------------+------------+-----------+---------------------------------------+----------------------------------------+-----------------------------------------+----------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeArbitrum +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: ['MemeFactory'] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| constructor(address,address,address,address,uint256) | public | [] | [] | [] | ['constructor'] | [] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV2 +Contract vars: [] +Inheritance:: [] + ++------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| token0() | external | [] | [] | [] | [] | [] | 2 | +| getReserves() | external | [] | [] | [] | [] | [] | 2 | +| price0CumulativeLast() | external | [] | [] | [] | [] | [] | 2 | +| price1CumulativeLast() | external | [] | [] | [] | [] | [] | 2 | ++------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract UniswapPriceOracle +Contract vars: ['pair', 'maxSlippage', 'direction'] +Inheritance:: [] + ++--------------------------------------+------------+-----------+----------------------------------+------------------------------+--------------------------------------+-------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------+------------+-----------+----------------------------------+------------------------------+--------------------------------------+-------------------------------------------------------------------------------+-----------------------+ +| constructor(address,uint256,address) | public | [] | ['pair'] | ['direction', 'maxSlippage'] | [] | ['IUniswapV2(pair).token0()'] | 2 | +| | | | | ['pair'] | | | | +| getPrice() | public | [] | ['direction', 'pair'] | [] | [] | ['IUniswapV2(pair).getReserves()', 'new uint256[](2)'] | 1 | +| updatePrice() | external | [] | [] | [] | [] | [] | 1 | +| validatePrice(uint256) | external | [] | ['block.timestamp', 'direction'] | [] | ['getPrice', 'require(bool,string)'] | ['IUniswapV2(pair).getReserves()', 'IUniswapV2(pair).price0CumulativeLast()'] | 3 | +| | | | ['maxSlippage', 'pair'] | | | ['IUniswapV2(pair).price1CumulativeLast()'] | | ++--------------------------------------+------------+-----------+----------------------------------+------------------------------+--------------------------------------+-------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----[0m------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++------------------------------------------------------+------------+-----------+---------------------------------------------+----------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeBase +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_locked', 'memeSummons', 'memeHearters', 'mapAccountActivities', 'memeTokens', 'CONTRIBUTION_AGNT', 'LIQUIDITY_AGNT', 'launchCampaignTokenAddress', 'launchCampaignBalance'] +Inheritance:: ['MemeFactory'] + ++--------------------------------------------------------------------------+------------+-----------+--------------------------------------------------+------------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+--------------------------------------------------+------------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _transferToLaterBurn(uint256) | internal | [] | ['buyBackBurner', 'nativeToken'] | [] | [] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 1 | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | [] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 3 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'this'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['msg.sender', 'scheduledForAscendance'] | ['scheduledForAscendance'] | ['_launchCampaign'] | ['IERC20(memeToken).burn(memeAmountToBurn)', 'IUniswapV3(uniV3PositionManager).collect(params)'] | 2 | +| | | | ['this', 'uniV3PositionManager'] | | | ['IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| _collect(address,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['DECIMALS', 'MIN_TOTAL_SUPPLY'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokens.push(memeToken)', 'new Meme(name,symbol,DECIMALS,totalSupply)'] | 1 | +| | | | ['_locked', 'block.timestamp'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['mapAccountActivities', 'memeTokens'] | ['memeTokens', 'numTokens'] | | | | +| | | | ['minNativeTokenValue', 'msg.sender'] | | | | | +| | | | ['msg.value'] | | | | | +| heartThisMeme(address) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| unleashThisMeme(address) | external | [] | ['LP_PERCENTAGE', 'OLAS_BURN_PERCENTAGE'] | ['_locked', 'mapAccountActivities'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['UNLEASH_DELAY', '_locked'] | ['memeSummons', 'scheduledForAscendance'] | ['_launchCampaign', '_wrap'] | | | +| | | | ['block.timestamp', 'mapAccountActivities'] | | ['require(bool,string)'] | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collect', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| | | | ['this'] | | | | | +| scheduleForAscendance() | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_transferToLaterBurn', 'require(bool,string)'] | [] | 1 | +| | | | ['msg.sender', 'scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| receive() | external | [] | [] | [] | [] | [] | 1 | +| constructor(address,address,address,address,uint256,address[],uint256[]) | public | [] | [] | [] | ['_launchCampaignSetup', 'constructor'] | [] | 2 | +| _launchCampaignSetup(address[],uint256[]) | private | [] | ['CONTRIBUTION_AGNT', 'DECIMALS'] | ['launchCampaignTokenAddress', 'memeHearters'] | ['require(bool)', 'require(bool,string)'] | ['memeTokens.push(launchCampaignTokenAddress)', 'new Meme(Agent Token II,AGNT II,DECIMALS,1000000000000000000000000000)'] | 2 | +| | | | ['LIQUIDITY_AGNT', 'launchCampaignTokenAddress'] | ['memeSummons', 'memeTokens'] | | | | +| | | | ['memeTokens'] | ['numTokens'] | | | | +| _MAGA() | private | [] | ['CONTRIBUTION_AGNT', 'LIQUIDITY_AGNT'] | ['memeSummons'] | ['_collect', '_createUniswapPair'] | ['memeTokenInstance.totalSupply()'] | 3 | +| | | | ['LP_PERCENTAGE', 'block.timestamp'] | | | | | +| | | | ['launchCampaignTokenAddress', 'memeHearters'] | | | | | +| | | | ['memeSummons', 'msg.sender'] | | | | | +| _launchCampaign(uint256) | internal | [] | ['LIQUIDITY_AGNT', 'launchCampaignBalance'] | ['launchCampaignBalance'] | ['_MAGA'] | [] | 4 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_locked'] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'CONTRIBUTION_AGNT'] | [] | [] | 1 | +| | | | | ['DECIMALS', 'FEE_TIER'] | | | | +| | | | | ['LIQUIDITY_AGNT', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_TICK', 'MIN_TICK'] | | | | +| | | | | ['MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+--------------------------------------------------+------------------------------------------------+--------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_human-summary.txt b/audits/internal2/analysis/slither_human-summary.txt new file mode 100644 index 0000000..2f1c3c0 --- /dev/null +++ b/audits/internal2/analysis/slither_human-summary.txt @@ -0,0 +1,243 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 34 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 2 +Number of low issues: 0 +Number of medium issues: 0 +Number of high issues: 0 + + ++---------------------+-------------+------+------------+--------------+----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++---------------------+-------------+------+------------+--------------+----------+ +| IMemeFactory | 1 | | | No | | +| MemeActivityChecker | 3 | | | No | | ++---------------------+-------------+------+------------+--------------+----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 1 +Source lines of code (SLOC) in source files: 34 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 5 +Number of low issues: 0 +Number of medium issues: 1 +Number of high issues: 2 + ++--------------------+-------------+------+------------+--------------+--------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++--------------------+-------------+------+------------+--------------+--------------+ +| BuyBackBurnerProxy | 3 | | | No | Receive ETH | +| | | | | | Delegatecall | +| | | | | | Assembly | +| | | | | | Proxy | ++--------------------+-------------+------+------------+--------------+--------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 133 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 5 +Number of low issues: 1 +Number of medium issues: 0 +Number of high issues: 0 + +ERCs: ERC20, ERC2612 + ++------+-------------+---------------+--------------------+--------------+-----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++------+-------------+---------------+--------------------+--------------+-----------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | ++------+-------------+---------------+--------------------+--------------+-----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 7 +Source lines of code (SLOC) in source files: 642 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 43 +Number of low issues: 13 +Number of medium issues: 25 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 3 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IERC20 | 3 | | | No | | +| MemeCelo | 20 | | | No | Receive ETH | +| | | | | | Tokens interaction | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 1 +Source lines of code (SLOC) in source files: 40 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 3 +Number of low issues: 0 +Number of medium issues: 0 +Number of high issues: 1 + ++---------------+-------------+------+------------+--------------+----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++---------------+-------------+------+------------+--------------+----------+ +| BuyBackBurner | 4 | | | No | Assembly | ++---------------+-------------+------+------------+--------------+----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 89 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 5 +Number of low issues: 5 +Number of medium issues: 7 +Number of high issues: 0 + + ++---------------------+-------------+------+------------+--------------+----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++---------------------+-------------+------+------------+--------------+----------+ +| IVault | 1 | | | No | | +| BalancerPriceOracle | 4 | | | No | | ++---------------------+-------------+------+------------+--------------+----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 8 +Source lines of code (SLOC) in source files: 647 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 43 +Number of low issues: 13 +Number of medium issues: 24 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 3 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IERC20 | 3 | | | No | | +| IWETH | 1 | | | No | Receive ETH | +| MemeArbitrum | 20 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 51 +Number of assembly lines: 0 +Number of optimization issues: 1 +Number of informational issues: 3 +Number of low issues: 2 +Number of medium issues: 3 +Number of high issues: 0 + + ++--------------------+-------------+------+------------+--------------+----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++--------------------+-------------+------+------------+--------------+----------+ +| IUniswapV2 | 4 | | | No | | +| UniswapPriceOracle | 4 | | | No | | ++--------------------+-------------+------+------------+--------------+----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 6 +Source lines of code (SLOC) in source files: 629 +Number of assembly lines: 0 +Number of optimization issues: 2 +Number of informational issues: 44 +Number of low issues: 13 +Number of medium issues: 25 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 3 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IERC20 | 3 | | | No | | +| MemeFactory | 17 | | | No | Receive ETH | +| | | | | | Tokens interaction | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 8 +Source lines of code (SLOC) in source files: 706 +Number of assembly lines: 0 +Number of optimization issues: 4 +Number of informational issues: 50 +Number of low issues: 22 +Number of medium issues: 24 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 3 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IERC20 | 3 | | | No | | +| IWETH | 1 | | | No | Receive ETH | +| MemeBase | 22 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_inheritance-graph.txt b/audits/internal2/analysis/slither_inheritance-graph.txt new file mode 100644 index 0000000..d440ee8 --- /dev/null +++ b/audits/internal2/analysis/slither_inheritance-graph.txt @@ -0,0 +1,54 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers:Inheritance Graph: ./MemeActivityChecker-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./BuyBackBurnerProxy-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./Meme.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeCelo-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./BuyBackBurner-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./BalancerPriceOracle-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeArbitrum-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./UniswapPriceOracle-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeFactory-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeBase-flatten.sol.inheritance-graph.dot + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_inheritance.txt b/audits/internal2/analysis/slither_inheritance.txt new file mode 100644 index 0000000..95432ea --- /dev/null +++ b/audits/internal2/analysis/slither_inheritance.txt @@ -0,0 +1,266 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ IMemeFactory + ++ MemeActivityChecker + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ IMemeFactory + ++ MemeActivityChecker + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ BuyBackBurnerProxy + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ BuyBackBurnerProxy + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + ++ MemeCelo + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + -> MemeCelo + ++ MemeCelo + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ BuyBackBurner + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ BuyBackBurner + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ IVault + ++ BalancerPriceOracle + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ IVault + ++ BalancerPriceOracle + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + ++ IWETH + ++ MemeArbitrum + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + -> MemeArbitrum + ++ IWETH + ++ MemeArbitrum + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ IUniswapV2 + ++ UniswapPriceOracle + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ IUniswapV2 + ++ UniswapPriceOracle + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + ++ IWETH + ++ MemeBase + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IERC20 + ++ MemeFactory + -> MemeBase + ++ IWETH + ++ MemeBase + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_modifiers.txt b/audits/internal2/analysis/slither_modifiers.txt new file mode 100644 index 0000000..7946bcf --- /dev/null +++ b/audits/internal2/analysis/slither_modifiers.txt @@ -0,0 +1,468 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +Contract IMemeFactory ++----------------------+-----------+ +| Function | Modifiers | ++----------------------+-----------+ +| mapAccountActivities | [] | ++----------------------+-----------+ +INFO:Printers: +Contract MemeActivityChecker ++-------------------+-----------+ +| Function | Modifiers | ++-------------------+-----------+ +| constructor | [] | +| getMultisigNonces | [] | +| isRatioPass | [] | ++-------------------+-----------+ +INFO:Printers: +Contract BuyBackBurnerProxy ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| fallback | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeCelo ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _transferToLaterBurn | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collect | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| receive | [] | +| constructor | [] | +| _launchCampaign | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract BuyBackBurner ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| initialize | [] | +| changeImplementation | [] | +| changeOwner | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IVault ++---------------+-----------+ +| Function | Modifiers | ++---------------+-----------+ +| getPoolTokens | [] | ++---------------+-----------+ +INFO:Printers: +Contract BalancerPriceOracle ++---------------+-----------+ +| Function | Modifiers | ++---------------+-----------+ +| constructor | [] | +| getPrice | [] | +| updatePrice | [] | +| validatePrice | [] | ++---------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeArbitrum ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _transferToLaterBurn | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collect | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| receive | [] | +| constructor | [] | +| _launchCampaign | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IUniswapV2 ++----------------------+-----------+ +| Function | Modifiers | ++----------------------+-----------+ +| token0 | [] | +| getReserves | [] | +| price0CumulativeLast | [] | +| price1CumulativeLast | [] | ++----------------------+-----------+ +INFO:Printers: +Contract UniswapPriceOracle ++---------------+-----------+ +| Function | Modifiers | ++---------------+-----------+ +| constructor | [] | +| getPrice | [] | +| updatePrice | [] | +| validatePrice | [] | ++---------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeFactory ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _transferToLaterBurn | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collect | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| receive | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeBase ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _transferToLaterBurn | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collect | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| receive | [] | +| constructor | [] | +| _launchCampaignSetup | [] | +| _MAGA | [] | +| _launchCampaign | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_require.txt b/audits/internal2/analysis/slither_require.txt new file mode 100644 index 0000000..b7b7cdf --- /dev/null +++ b/audits/internal2/analysis/slither_require.txt @@ -0,0 +1,554 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +Contract IMemeFactory ++----------------------+-------------------+ +| Function | require or assert | ++----------------------+-------------------+ +| mapAccountActivities | | ++----------------------+-------------------+ +INFO:Printers: +Contract MemeActivityChecker ++-------------------+-------------------+ +| Function | require or assert | ++-------------------+-------------------+ +| constructor | | +| getMultisigNonces | | +| isRatioPass | | ++-------------------+-------------------+ +INFO:Printers: +Contract BuyBackBurnerProxy ++-------------------------------------+-------------------+ +| Function | require or assert | ++-------------------------------------+-------------------+ +| constructor | | +| fallback | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract MemeCelo ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _transferToLaterBurn | | +| _createUniswapPair | | +| _collectFees | | +| _collect | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| receive | | +| constructor | | +| _launchCampaign | | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract BuyBackBurner ++-------------------------------------+-------------------+ +| Function | require or assert | ++-------------------------------------+-------------------+ +| initialize | | +| changeImplementation | | +| changeOwner | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-------------------+ +INFO:Printers: +Contract IVault ++---------------+-------------------+ +| Function | require or assert | ++---------------+-------------------+ +| getPoolTokens | | ++---------------+-------------------+ +INFO:Printers: +Contract BalancerPriceOracle ++---------------+--------------------------------------------------------------------------+ +| Function | require or assert | ++---------------+--------------------------------------------------------------------------+ +| constructor | require(bool,string)(_maxSlippage < 100,Slippage must be less than 100%) | +| | require(bool,string)(currentPrice > 0,Price must be non-zero.) | +| getPrice | | +| updatePrice | require(bool,string)(currentPrice > 0,Price must be non-zero.) | +| validatePrice | require(bool,string)(slippage <= maxSlippage,Slippage overflow) | ++---------------+--------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract MemeArbitrum ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _transferToLaterBurn | | +| _createUniswapPair | | +| _collectFees | | +| _collect | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| receive | | +| constructor | | +| _launchCampaign | | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV2 ++----------------------+-------------------+ +| Function | require or assert | ++----------------------+-------------------+ +| token0 | | +| getReserves | | +| price0CumulativeLast | | +| price1CumulativeLast | | ++----------------------+-------------------+ +INFO:Printers: +Contract UniswapPriceOracle ++---------------+-----------------------------------------------------------------+ +| Function | require or assert | ++---------------+-----------------------------------------------------------------+ +| constructor | | +| getPrice | | +| updatePrice | | +| validatePrice | require(bool,string)(slippage <= maxSlippage,Slippage overflow) | ++---------------+-----------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract MemeFactory ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _transferToLaterBurn | | +| _createUniswapPair | | +| _collectFees | | +| _collect | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| receive | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract MemeBase ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _transferToLaterBurn | | +| _createUniswapPair | | +| _collectFees | | +| _collect | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| receive | | +| constructor | require(bool)(accounts.length == amounts.length) | +| | require(bool,string)(adjustedAmount == LIQUIDITY_AGNT,Total amount adjusted for burn allocation must match liqudity amount) | +| | require(bool,string)(totalAmount == CONTRIBUTION_AGNT,Total amount must match original contribution amount) | +| _launchCampaignSetup | require(bool)(accounts.length == amounts.length) | +| | require(bool,string)(adjustedAmount == LIQUIDITY_AGNT,Total amount adjusted for burn allocation must match liqudity amount) | +| | require(bool,string)(totalAmount == CONTRIBUTION_AGNT,Total amount must match original contribution amount) | +| _MAGA | | +| _launchCampaign | | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_variable-order.txt b/audits/internal2/analysis/slither_variable-order.txt new file mode 100644 index 0000000..724ec00 --- /dev/null +++ b/audits/internal2/analysis/slither_variable-order.txt @@ -0,0 +1,292 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +IMemeFactory: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeActivityChecker: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +INFO:Printers: +BuyBackBurnerProxy: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeCelo: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._locked | uint256 | 2 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 3 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 4 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 5 | 0 | +| MemeFactory.memeTokens | address[] | 6 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +BuyBackBurner: ++---------------------+---------+------+--------+ +| Name | Type | Slot | Offset | ++---------------------+---------+------+--------+ +| BuyBackBurner.owner | address | 0 | 0 | ++---------------------+---------+------+--------+ + +INFO:Printers: +IVault: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +BalancerPriceOracle: ++-------------------------------------+-----------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------------------------+-----------------------------------+------+--------+ +| BalancerPriceOracle.snapshotHistory | BalancerPriceOracle.PriceSnapshot | 0 | 0 | ++-------------------------------------+-----------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeArbitrum: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._locked | uint256 | 2 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 3 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 4 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 5 | 0 | +| MemeFactory.memeTokens | address[] | 6 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +IUniswapV2: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +UniswapPriceOracle: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeFactory: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._locked | uint256 | 2 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 3 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 4 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 5 | 0 | +| MemeFactory.memeTokens | address[] | 6 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeBase: ++-------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._locked | uint256 | 2 | 0 | +| MemeFactory.memeSummons | mapping(address => MemeFactory.MemeSummon) | 3 | 0 | +| MemeFactory.memeHearters | mapping(address => mapping(address => uint256)) | 4 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 5 | 0 | +| MemeFactory.memeTokens | address[] | 6 | 0 | +| MemeBase.launchCampaignTokenAddress | address | 7 | 0 | +| MemeBase.launchCampaignBalance | uint256 | 8 | 0 | ++-------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal2/analysis/slither_vars-and-auth.txt b/audits/internal2/analysis/slither_vars-and-auth.txt new file mode 100644 index 0000000..3c12753 --- /dev/null +++ b/audits/internal2/analysis/slither_vars-and-auth.txt @@ -0,0 +1,622 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./BalancerPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./UniswapPriceOracle-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal2/analysis/contracts' running +INFO:Printers: +Contract IMemeFactory ++----------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------------------+-------------------------+--------------------------+ +| mapAccountActivities | [] | [] | ++----------------------+-------------------------+--------------------------+ + +Contract MemeActivityChecker ++-------------------+----------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------+----------------------------------+--------------------------+ +| constructor | ['livenessRatio', 'memeFactory'] | [] | +| getMultisigNonces | [] | [] | +| isRatioPass | [] | [] | ++-------------------+----------------------------------+--------------------------+ + +INFO:Printers: +Contract BuyBackBurnerProxy ++-------------------------------------+---------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+---------------------------+--------------------------+ +| constructor | [] | [] | +| fallback | [] | [] | +| slitherConstructorConstantVariables | ['BUY_BACK_BURNER_PROXY'] | [] | ++-------------------------------------+---------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract MemeCelo ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract BuyBackBurner ++-------------------------------------+-----------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-----------------------------------------------------+--------------------------+ +| initialize | ['owner'] | [] | +| changeImplementation | [] | ['msg.sender != owner'] | +| changeOwner | ['owner'] | ['msg.sender != owner'] | +| slitherConstructorConstantVariables | ['BUY_BACK_BURNER_PROXY', 'OLAS_BURNER', 'VERSION'] | [] | ++-------------------------------------+-----------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract IVault ++---------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++---------------+-------------------------+--------------------------+ +| getPoolTokens | [] | [] | ++---------------+-------------------------+--------------------------+ + +Contract BalancerPriceOracle ++---------------+----------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++---------------+----------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['balancerPoolId', 'balancerVault', 'direction', 'maxSlippage', 'minUpdateTimePeriod', 'nativeToken', 'olas', 'snapshotHistory'] | [] | +| getPrice | [] | [] | +| updatePrice | ['snapshotHistory'] | [] | +| validatePrice | [] | [] | ++---------------+----------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeArbitrum ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract IUniswapV2 ++----------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------------------+-------------------------+--------------------------+ +| token0 | [] | [] | +| getReserves | [] | [] | +| price0CumulativeLast | [] | [] | +| price1CumulativeLast | [] | [] | ++----------------------+-------------------------+--------------------------+ + +Contract UniswapPriceOracle ++---------------+--------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++---------------+--------------------------------------+--------------------------+ +| constructor | ['direction', 'maxSlippage', 'pair'] | [] | +| getPrice | [] | [] | +| updatePrice | [] | [] | +| validatePrice | [] | [] | ++---------------+--------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeBase ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _transferToLaterBurn | [] | [] | +| _createUniswapPair | [] | [] | +| _collectFees | ['launchCampaignBalance', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| _collect | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| unleashThisMeme | ['_locked', 'launchCampaignBalance', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities'] | [] | +| collectFees | ['_locked', 'launchCampaignBalance', 'mapAccountActivities', 'memeHearters', 'memeSummons', 'scheduledForAscendance'] | [] | +| receive | [] | [] | +| constructor | ['buyBackBurner', 'launchCampaignTokenAddress', 'memeHearters', 'memeSummons', 'memeTokens', 'minNativeTokenValue', 'nativeToken', 'numTokens', 'olas', 'uniV3PositionManager'] | [] | +| _launchCampaignSetup | ['launchCampaignTokenAddress', 'memeHearters', 'memeSummons', 'memeTokens', 'numTokens'] | [] | +| _MAGA | ['memeHearters', 'memeSummons'] | [] | +| _launchCampaign | ['launchCampaignBalance', 'memeHearters', 'memeSummons'] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_locked'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'CONTRIBUTION_AGNT', 'DECIMALS', 'FEE_TIER', 'LIQUIDITY_AGNT', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Slither:. analyzed (39 contracts) diff --git a/audits/internal3/README.md b/audits/internal3/README.md new file mode 100644 index 0000000..801e709 --- /dev/null +++ b/audits/internal3/README.md @@ -0,0 +1,81 @@ +# meme-ooorr +The review has been performed based on the contract code in the following repository:
+`https://github.com/dvilelaf/meme-ooorr`
+commit: `9b427618db7bd233651476de9abe12c18fbd236a` or `v0.2.0-internal-audit2`
+ +## Objectives +The audit focused on Meme* contracts
+ +### Flatten version +Flatten version of contracts. [contracts](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal3/analysis/contracts) + +### Security issues +Details in [slither_full](https://github.com/dvilelaf/meme-ooorr/blob/main/audits/internal3/analysis/slither_full.txt)
+All false positive. + +## Issues +### Medium? Critical?: to discussion, sandwich attack +``` +attaсker contract => function unleashThisMeme => _createThisMeme => +bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, memeNonce)); + randomNonce = keccak256(abi.encodePacked(randomNonce)); +Can be calculated in the attacking contract (because deterministic in same block) +Can predict: memeToken := create2(0x0, add(0x20, payload), mload(payload), memeNonce) +Call before own contract: + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160((FixedPointMathLib.sqrt(priceX96) * (1 << 96)) / 1e9); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, FEE_TIER, sqrtPriceX96); +So, we must revert if pool exist at moment unleashThisMeme +``` +[x] Fixed + +### Lown issue: group internal function +``` +Internal functions are mixed with public ones, which makes it difficult to understand contracts. +``` +[x] Fixed + +### Low issue: checking name, symbol. Not requrments ERC20 +``` +function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + uint256 memeNonce = _nonce; + + // Initiate meme nonce map values + memeSummons[memeNonce] = MemeSummon(name, symbol, totalSupply, msg.value, block.timestamp, 0, 0, 0, false); + + Checking name != "" and symbol != "" + Many dApps and platforms (like Uniswap, Etherscan, etc.) expect name/symbol functions to be implemented and return meaningful values. +``` +[x] Fixed + +### Low issue: Remove block.prevrandao from randomNonce +``` +Observation: +block.prevrandao replaced block.difficulty after the Merge, as Proof-of-Stake (PoS) rendered block.difficulty meaningless. +It provides the random value from the previous block, derived from the beacon chain. + +bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, memeNonce)); +remove block.prevrandao for sure compatible with ANY evm-like networks (include rollups, non mainnet-L1) +On some L2s, block.prevrandao may return a fixed value (e.g., 0). +``` +[x] Fixed + diff --git a/audits/internal3/analysis/contracts/BuyBackBurner-flatten.sol b/audits/internal3/analysis/contracts/BuyBackBurner-flatten.sol new file mode 100644 index 0000000..3307731 --- /dev/null +++ b/audits/internal3/analysis/contracts/BuyBackBurner-flatten.sol @@ -0,0 +1,451 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: GPL-2.0-or-later AND MIT +pragma solidity ^0.8.0; + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) + external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) external payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool); + + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() external view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + function factory() external view returns (address); +} + +/// @title Math library for computing sqrt prices from ticks and vice versa +/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports +/// prices between 2**-128 and 2**128 +library TickMath { + error T(); + error R(); + + /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 + int24 internal constant MIN_TICK = -887272; + /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 + int24 internal constant MAX_TICK = -MIN_TICK; + + /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) + uint160 internal constant MIN_SQRT_RATIO = 4295128739; + /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) + uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + + /// @notice Calculates sqrt(1.0001^tick) * 2^96 + /// @dev Throws if |tick| > max tick + /// @param tick The input tick for the above formula + /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) + /// at the given tick + function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { + unchecked { + uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); + if (absTick > uint256(int256(MAX_TICK))) revert T(); + + uint256 ratio = absTick & 0x1 != 0 + ? 0xfffcb933bd6fad37aa2d162d1a594001 + : 0x100000000000000000000000000000000; + if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; + if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; + if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; + if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; + if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; + if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; + if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; + if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; + if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; + if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; + if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; + if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; + if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; + if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; + if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; + if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; + if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; + if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; + if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; + + if (tick > 0) ratio = type(uint256).max / ratio; + + // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. + // we then downcast because we know the result always fits within 160 bits due to our tick input constraint + // we round up in the division so getTickAtSqrtRatio of the output price is always consistent + sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); + } + } + + /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio + /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may + /// ever return. + /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96 + /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio + function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { + unchecked { + // second inequality must be < because the price can never reach the price at the max tick + if (!(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO)) revert R(); + uint256 ratio = uint256(sqrtPriceX96) << 32; + + uint256 r = ratio; + uint256 msb = 0; + + assembly { + let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(5, gt(r, 0xFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(4, gt(r, 0xFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(3, gt(r, 0xFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(2, gt(r, 0xF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(1, gt(r, 0x3)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := gt(r, 0x1) + msb := or(msb, f) + } + + if (msb >= 128) r = ratio >> (msb - 127); + else r = ratio << (127 - msb); + + int256 log_2 = (int256(msb) - 128) << 64; + + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(63, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(62, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(61, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(60, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(59, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(58, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(57, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(56, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(55, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(54, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(53, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(52, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(51, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(50, f)) + } + + int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number + + int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); + int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); + + tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; + } + } +} + +/// @dev Only `owner` has a privilege, but the `sender` was provided. +/// @param sender Sender address. +/// @param owner Required sender address as an owner. +error OwnerOnly(address sender, address owner); + +/// @dev Provided zero address. +error ZeroAddress(); + +/// @dev The contract is already initialized. +error AlreadyInitialized(); + +/// @title BuyBackBurner - BuyBackBurner implementation contract +contract BuyBackBurner { + event ImplementationUpdated(address indexed implementation); + event OwnerUpdated(address indexed owner); + + // Version number + string public constant VERSION = "0.0.1"; + // Code position in storage is keccak256("BUY_BACK_BURNER_PROXY") = "c6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19" + bytes32 public constant BUY_BACK_BURNER_PROXY = 0xc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19; + // L1 OLAS Burner address + address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + // Seconds ago to look back for TWAP pool values + uint32 public constant SECONDS_AGO = 1800; + + // Contract owner + address public owner; + + function _getTwapFromOracle(address pool) internal view returns (uint256 priceX96) { + // Query the pool for the current and historical tick + uint32[] memory secondsAgos = new uint32[](2); + // Start of the period + secondsAgos[0] = SECONDS_AGO; + + // Fetch the tick cumulative values from the pool + (int56[] memory tickCumulatives, ) = IUniswapV3(pool).observe(secondsAgos); + + // Calculate the average tick over the time period + int56 tickCumulativeDelta = tickCumulatives[1] - tickCumulatives[0]; + int24 averageTick = int24(tickCumulativeDelta / int56(int32(SECONDS_AGO))); + + // Convert the average tick to sqrtPriceX96 + uint160 sqrtPriceX96 = TickMath.getSqrtRatioAtTick(averageTick); + + // Calculate the price using the sqrtPriceX96 + priceX96 = (uint256(sqrtPriceX96) * uint256(sqrtPriceX96)) / (1 << 192); + } + + /// @dev BuyBackBurner initializer. + function initialize() external{ + if (owner != address(0)) { + revert AlreadyInitialized(); + } + + owner = msg.sender; + } + + /// @dev Changes the implementation contract address. + /// @param newImplementation New implementation contract address. + function changeImplementation(address newImplementation) external { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for zero address + if (newImplementation == address(0)) { + revert ZeroAddress(); + } + + // Store the implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, newImplementation) + } + + emit ImplementationUpdated(newImplementation); + } + + /// @dev Changes contract owner address. + /// @param newOwner Address of a new owner. + function changeOwner(address newOwner) external virtual { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the zero address + if (newOwner == address(0)) { + revert ZeroAddress(); + } + + owner = newOwner; + emit OwnerUpdated(newOwner); + } + + function checkPoolPrices( + address nativeToken, + address memeToken, + address uniV3PositionManager, + uint24 fee, + uint256 allowedDeviation, + bool isNativeFirst + ) external view { + // Get factory address + address factory = IUniswapV3(uniV3PositionManager).factory(); + + (address token0, address token1) = isNativeFirst ? (nativeToken, memeToken) : (memeToken, nativeToken); + + // Verify pool reserves before proceeding + address pool = IUniswapV3(factory).getPool(token0, token1, fee); + require(pool != address(0), "Pool does not exist"); + + // Get current pool reserves + (uint160 sqrtPriceX96, , , , , , ) = IUniswapV3(pool).slot0(); + + // Check TWAP or historical data + uint256 twapPrice = _getTwapFromOracle(pool); + uint256 instantPrice = (uint256(sqrtPriceX96) * uint256(sqrtPriceX96)) / (1 << 192); + + uint256 deviation; + if (twapPrice > 0) { + deviation = (instantPrice > twapPrice) ? + ((instantPrice - twapPrice) * 1e18) / twapPrice : + ((twapPrice - instantPrice) * 1e18) / twapPrice; + } + + require(deviation <= allowedDeviation, "Price deviation too high"); + } +} diff --git a/audits/internal3/analysis/contracts/BuyBackBurnerProxy-flatten.sol b/audits/internal3/analysis/contracts/BuyBackBurnerProxy-flatten.sol new file mode 100644 index 0000000..947bd31 --- /dev/null +++ b/audits/internal3/analysis/contracts/BuyBackBurnerProxy-flatten.sol @@ -0,0 +1,68 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/// @dev Zero implementation address. +error ZeroImplementationAddress(); + +/// @dev Zero data. +error ZeroData(); + +/// @dev Proxy initialization failed. +error InitializationFailed(); + +/* +* This is a BuyBackBurner proxy contract. +* Proxy implementation is created based on the Universal Upgradeable Proxy Standard (UUPS) EIP-1822. +* The implementation address must be located in a unique storage slot of the proxy contract. +* The upgrade logic must be located in the implementation contract. +* Special buyBackBurner implementation address slot is produced by hashing the "BUY_BACK_BURNER_PROXY" +* string in order to make the slot unique. +* The fallback() implementation for all the delegatecall-s is inspired by the Gnosis Safe set of contracts. +*/ + +/// @title BuyBackBurnerProxy - Smart contract for buyBackBurner proxy +contract BuyBackBurnerProxy { + // Code position in storage is keccak256("BUY_BACK_BURNER_PROXY") = "c6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19" + bytes32 public constant BUY_BACK_BURNER_PROXY = 0xc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19; + + /// @dev BuyBackBurnerProxy constructor. + /// @param implementation BuyBackBurner implementation address. + /// @param buyBackBurnerData BuyBackBurner initialization data. + constructor(address implementation, bytes memory buyBackBurnerData) { + // Check for the zero address, since the delegatecall works even with the zero one + if (implementation == address(0)) { + revert ZeroImplementationAddress(); + } + + // Check for the zero data + if (buyBackBurnerData.length == 0) { + revert ZeroData(); + } + + // Store the buyBackBurner implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, implementation) + } + // Initialize proxy storage + (bool success, ) = implementation.delegatecall(buyBackBurnerData); + if (!success) { + revert InitializationFailed(); + } + } + + /// @dev Delegatecall to all the incoming data. + fallback() external payable { + assembly { + let implementation := sload(BUY_BACK_BURNER_PROXY) + calldatacopy(0, 0, calldatasize()) + let success := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + if eq(success, 0) { + revert(0, returndatasize()) + } + return(0, returndatasize()) + } + } +} diff --git a/audits/internal3/analysis/contracts/Meme.sol b/audits/internal3/analysis/contracts/Meme.sol new file mode 100644 index 0000000..efda018 --- /dev/null +++ b/audits/internal3/analysis/contracts/Meme.sol @@ -0,0 +1,226 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} diff --git a/audits/internal3/analysis/contracts/MemeActivityChecker-flatten.sol b/audits/internal3/analysis/contracts/MemeActivityChecker-flatten.sol new file mode 100644 index 0000000..7dc0367 --- /dev/null +++ b/audits/internal3/analysis/contracts/MemeActivityChecker-flatten.sol @@ -0,0 +1,75 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +// Meme Factory interface +interface IMemeFactory { + function mapAccountActivities(address multisig) external view returns (uint256); +} + +/// @dev Zero address. +error ZeroAddress(); + +/// @dev Zero value. +error ZeroValue(); + +/// @title MemeActivityChecker - Smart contract for meme contract interaction service staking activity check +/// @author Aleksandr Kuperman - +/// @author Andrey Lebedev - +/// @author David Vilela - +contract MemeActivityChecker { + // Liveness ratio in the format of 1e18 + uint256 public immutable livenessRatio; + // Meme Factory contract address + address public immutable memeFactory; + + /// @dev StakingNativeToken initialization. + /// @param _memeFactory Meme Factory contract address. + /// @param _livenessRatio Liveness ratio in the format of 1e18. + constructor(address _memeFactory, uint256 _livenessRatio) { + // Check the zero address + if (_memeFactory == address(0)) { + revert ZeroAddress(); + } + + // Check for zero value + if (_livenessRatio == 0) { + revert ZeroValue(); + } + + memeFactory = _memeFactory; + livenessRatio = _livenessRatio; + } + + /// @dev Gets service multisig nonces. + /// @param multisig Service multisig address. + /// @return nonces Set of a single service multisig nonce. + function getMultisigNonces(address multisig) external view virtual returns (uint256[] memory nonces) { + nonces = new uint256[](1); + // The nonce is equal to the meme factory contract interaction corresponding to a multisig activity + nonces[0] = IMemeFactory(memeFactory).mapAccountActivities(multisig); + } + + /// @dev Checks if the service multisig liveness ratio passes the defined liveness threshold. + /// @notice The formula for calculating the ratio is the following: + /// currentNonce - service multisig nonce at time now (block.timestamp); + /// lastNonce - service multisig nonce at the previous checkpoint or staking time (tsStart); + /// ratio = (currentNonce - lastNonce) / (block.timestamp - tsStart). + /// @param curNonces Current service multisig set of a single nonce. + /// @param lastNonces Last service multisig set of a single nonce. + /// @param ts Time difference between current and last timestamps. + /// @return ratioPass True, if the liveness ratio passes the check. + function isRatioPass( + uint256[] memory curNonces, + uint256[] memory lastNonces, + uint256 ts + ) external view virtual returns (bool ratioPass) { + // If the checkpoint was called in the exact same block, the ratio is zero + // If the current nonce is not greater than the last nonce, the ratio is zero + if (ts > 0 && curNonces[0] > lastNonces[0]) { + uint256 ratio = ((curNonces[0] - lastNonces[0]) * 1e18) / ts; + ratioPass = (ratio >= livenessRatio); + } + } +} diff --git a/audits/internal3/analysis/contracts/MemeArbitrum-flatten.sol b/audits/internal3/analysis/contracts/MemeArbitrum-flatten.sol new file mode 100644 index 0000000..52b3a80 --- /dev/null +++ b/audits/internal3/analysis/contracts/MemeArbitrum-flatten.sol @@ -0,0 +1,1314 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) + external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) external payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool); + + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() external view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + function factory() external view returns (address); +} + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + +interface IBuyBackBurner { + function checkPoolPrices(address nativeToken, address memeToken, address uniV3PositionManager, uint24 fee, + uint256 allowedDeviation, bool isNativeFirst) external view; +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, uint256 indexed memeNonce, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, uint256 indexed memeNonce, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Meme token name + string name; + // Meme token symbol + string symbol; + // Meme token total supply + uint256 totalSupply; + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Max allowed price deviation for TWAP pool values (100 = 1%) in 1e18 format + uint256 public constant MAX_ALLOWED_DEVIATION = 1e16; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Nonce + uint256 internal _nonce = 1; + // Reentrancy lock + uint256 internal _locked = 1; + // Launch tracker + uint256 internal _launched = 1; + + // Map of meme nonce => Meme summon struct + mapping(uint256 => MemeSummon) public memeSummons; + // Map of mem nonce => (map of hearter => native token balance) + mapping(uint256 => mapping(address => uint256)) public memeHearters; + // Map of meme token address => Meme nonce + mapping(address => uint256) public memeTokenNonces; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160((FixedPointMathLib.sqrt(priceX96) * (1 << 96)) / 1e9); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, amount0, amount1) = IUniswapV3(uniV3PositionManager).mint(params); + + // Schedule for ascendance leftovers from native token + // Note that meme token leftovers will be purged via purgeThisMeme + uint256 nativeLeftovers = isNativeFirst ? (nativeTokenAmount - amount0) : (nativeTokenAmount - amount1); + if (nativeLeftovers > 0) { + scheduledForAscendance += nativeLeftovers; + } + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + // Check current pool prices + IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken, memeToken, uniV3PositionManager, FEE_TIER, + MAX_ALLOWED_DEVIATION, isNativeFirst); + + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += nativeAmountForOLASBurn; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param memeNonce Meme nonce. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collectMemeToken( + address memeToken, + uint256 memeNonce, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeNonce][msg.sender] = 0; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal virtual returns (uint256 adjustedAmount); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + uint256 memeNonce = _nonce; + + // Initiate meme nonce map values + memeSummons[memeNonce] = MemeSummon(name, symbol, totalSupply, msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeNonce][msg.sender] = msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Update nonce + _nonce = memeNonce + 1; + + emit Summoned(msg.sender, memeNonce, msg.value); + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeNonce Meme token nonce. + function heartThisMeme(uint256 memeNonce) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeNonce][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Create a new meme token. + function _createThisMeme( + uint256 memeNonce, + string memory name, + string memory symbol, + uint256 totalSupply + ) internal returns (address memeToken) { + bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, memeNonce)); + randomNonce = keccak256(abi.encodePacked(randomNonce)); + bytes memory payload = abi.encodePacked(type(Meme).creationCode, abi.encode(name, symbol, DECIMALS, totalSupply)); + // solhint-disable-next-line no-inline-assembly + assembly { + memeToken := create2(0x0, add(0x20, payload), mload(payload), memeNonce) // revert to randomNonce + } + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function unleashThisMeme(uint256 memeNonce) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + // Schedule native token amount for ascendance + // uint256 adjustedNativeAmountForAscendance = _updateLaunchCampaignBalance(nativeAmountForOLASBurn); + scheduledForAscendance += nativeAmountForOLASBurn; + + _unleashThisMeme(memeNonce, memeSummon, nativeAmountForLP, totalNativeTokenCommitted, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function _unleashThisMeme(uint256 memeNonce, MemeSummon storage memeSummon, uint256 nativeAmountForLP, uint256 totalNativeTokenCommitted, uint256 nativeAmountForOLASBurn) internal { + + // Calculate LP token allocation according to LP percentage and distribution to supporters + uint256 memeAmountForLP = (memeSummon.totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = memeSummon.totalSupply - memeAmountForLP; + + // Create new meme token + address memeToken = _createThisMeme(memeNonce, memeSummon.name, memeSummon.symbol, memeSummon.totalSupply); + + // Record meme token address + memeTokenNonces[memeToken] = memeNonce; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + if (hearterContribution > 0) { + _collectMemeToken(memeToken, memeNonce, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collectMemeToken(memeToken, memeNonce, memeSummon.heartersAmount, hearterContribution, + memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = _launched > 0 ? scheduledForAscendance : _launchCampaign(); + require(amount > 0, "Nothing to send"); + + scheduledForAscendance = 0; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + if (amount > 0) { + // Transfers native token to be later converted to OLAS for burn. + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + // Get meme nonce + uint256 memeNonce = memeTokenNonces[tokens[i]]; + // Get meme summon struct + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Collect fees + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } +} + +interface IWETH { + function deposit() external payable; +} + +// @title MemeArbitrum - a smart contract factory for Meme Token creation on Arbitrum. +contract MemeArbitrum is MemeFactory { + /// @dev MemeArbitrum constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override view returns (uint256) { + return scheduledForAscendance; + } + + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } +} diff --git a/audits/internal3/analysis/contracts/MemeBase-flatten.sol b/audits/internal3/analysis/contracts/MemeBase-flatten.sol new file mode 100644 index 0000000..bd3ab5f --- /dev/null +++ b/audits/internal3/analysis/contracts/MemeBase-flatten.sol @@ -0,0 +1,1392 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + + +// File contracts/Meme.sol + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) + external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) external payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool); + + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() external view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + function factory() external view returns (address); +} + + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + + +interface IBuyBackBurner { + function checkPoolPrices(address nativeToken, address memeToken, address uniV3PositionManager, uint24 fee, + uint256 allowedDeviation, bool isNativeFirst) external view; +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, uint256 indexed memeNonce, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, uint256 indexed memeNonce, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Meme token name + string name; + // Meme token symbol + string symbol; + // Meme token total supply + uint256 totalSupply; + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Max allowed price deviation for TWAP pool values (100 = 1%) in 1e18 format + uint256 public constant MAX_ALLOWED_DEVIATION = 1e16; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Nonce + uint256 internal _nonce = 1; + // Reentrancy lock + uint256 internal _locked = 1; + // Launch tracker + uint256 internal _launched = 1; + + // Map of meme nonce => Meme summon struct + mapping(uint256 => MemeSummon) public memeSummons; + // Map of mem nonce => (map of hearter => native token balance) + mapping(uint256 => mapping(address => uint256)) public memeHearters; + // Map of meme token address => Meme nonce + mapping(address => uint256) public memeTokenNonces; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160((FixedPointMathLib.sqrt(priceX96) * (1 << 96)) / 1e9); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, amount0, amount1) = IUniswapV3(uniV3PositionManager).mint(params); + + // Schedule for ascendance leftovers from native token + // Note that meme token leftovers will be purged via purgeThisMeme + uint256 nativeLeftovers = isNativeFirst ? (nativeTokenAmount - amount0) : (nativeTokenAmount - amount1); + if (nativeLeftovers > 0) { + scheduledForAscendance += nativeLeftovers; + } + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + // Check current pool prices + IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken, memeToken, uniV3PositionManager, FEE_TIER, + MAX_ALLOWED_DEVIATION, isNativeFirst); + + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += nativeAmountForOLASBurn; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param memeNonce Meme nonce. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collectMemeToken( + address memeToken, + uint256 memeNonce, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeNonce][msg.sender] = 0; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal virtual returns (uint256 adjustedAmount); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + uint256 memeNonce = _nonce; + + // Initiate meme nonce map values + memeSummons[memeNonce] = MemeSummon(name, symbol, totalSupply, msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeNonce][msg.sender] = msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Update nonce + _nonce = memeNonce + 1; + + emit Summoned(msg.sender, memeNonce, msg.value); + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeNonce Meme token nonce. + function heartThisMeme(uint256 memeNonce) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeNonce][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Create a new meme token. + function _createThisMeme( + uint256 memeNonce, + string memory name, + string memory symbol, + uint256 totalSupply + ) internal returns (address memeToken) { + bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, memeNonce)); + randomNonce = keccak256(abi.encodePacked(randomNonce)); + bytes memory payload = abi.encodePacked(type(Meme).creationCode, abi.encode(name, symbol, DECIMALS, totalSupply)); + // solhint-disable-next-line no-inline-assembly + assembly { + memeToken := create2(0x0, add(0x20, payload), mload(payload), memeNonce) // revert to randomNonce + } + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function unleashThisMeme(uint256 memeNonce) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + // Schedule native token amount for ascendance + // uint256 adjustedNativeAmountForAscendance = _updateLaunchCampaignBalance(nativeAmountForOLASBurn); + scheduledForAscendance += nativeAmountForOLASBurn; + + _unleashThisMeme(memeNonce, memeSummon, nativeAmountForLP, totalNativeTokenCommitted, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function _unleashThisMeme(uint256 memeNonce, MemeSummon storage memeSummon, uint256 nativeAmountForLP, uint256 totalNativeTokenCommitted, uint256 nativeAmountForOLASBurn) internal { + + // Calculate LP token allocation according to LP percentage and distribution to supporters + uint256 memeAmountForLP = (memeSummon.totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = memeSummon.totalSupply - memeAmountForLP; + + // Create new meme token + address memeToken = _createThisMeme(memeNonce, memeSummon.name, memeSummon.symbol, memeSummon.totalSupply); + + // Record meme token address + memeTokenNonces[memeToken] = memeNonce; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + if (hearterContribution > 0) { + _collectMemeToken(memeToken, memeNonce, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collectMemeToken(memeToken, memeNonce, memeSummon.heartersAmount, hearterContribution, + memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = _launched > 0 ? scheduledForAscendance : _launchCampaign(); + require(amount > 0, "Nothing to send"); + + scheduledForAscendance = 0; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + if (amount > 0) { + // Transfers native token to be later converted to OLAS for burn. + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + // Get meme nonce + uint256 memeNonce = memeTokenNonces[tokens[i]]; + // Get meme summon struct + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Collect fees + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } +} + +interface IWETH { + function deposit() external payable; +} + +/// @title MemeBase - a smart contract factory for Meme Token creation on Base. +contract MemeBase is MemeFactory { + // AGNT data: + // https://basescan.org/address/0x42156841253f428cb644ea1230d4fddfb70f8891#readContract#F17 + // Previous token address: 0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9 + // Full collected amount: 141569842100000000000 + uint256 public constant CONTRIBUTION_AGNT = 141569842100000000000; + // Liquidity amount: collected amount - 10% for burn = 127412857890000000000 + uint256 public constant LIQUIDITY_AGNT = 127412857890000000000; + // Block time of original summon + uint256 public constant SUMMON_AGNT = 22902993; + + // Launch campaign nonce + uint256 public immutable launchCampaignNonce; + + /// @dev MemeBase constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue, + address[] memory accounts, + uint256[] memory amounts + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) { + if (accounts.length > 0) { + launchCampaignNonce = _nonce; + _launchCampaignSetup(accounts, amounts); + _nonce = launchCampaignNonce + 1; + _launched = 0; + } + } + + /// @dev Launch campaign initialization function. + /// @param accounts Original accounts. + /// @param amounts Corresponding original amounts (without subtraction for burn). + function _launchCampaignSetup(address[] memory accounts, uint256[] memory amounts) private { + require(accounts.length == amounts.length); + + // Initiate meme token map values + // unleashTime is set to 1 such that no one is able to heart this token + memeSummons[launchCampaignNonce] = MemeSummon("Agent Token II", "AGNT II", 1_000_000_000 ether, + CONTRIBUTION_AGNT, SUMMON_AGNT, 1, 0, 0, false); + + // To match original summon events (purposefully placed here to match order of original events) + emit Summoned(accounts[0], launchCampaignNonce, amounts[0]); + + // Record all the accounts and amounts + uint256 totalAmount; + for (uint256 i = 0; i < accounts.length; ++i) { + totalAmount += amounts[i]; + memeHearters[launchCampaignNonce][accounts[i]] = amounts[i]; + // to match original hearter events + emit Hearted(accounts[i], launchCampaignNonce, amounts[i]); + } + require(totalAmount == CONTRIBUTION_AGNT, "Total amount must match original contribution amount"); + // Adjust amount for already collected burned tokens + uint256 adjustedAmount = (totalAmount * 9) / 10; + require(adjustedAmount == LIQUIDITY_AGNT, "Total amount adjusted for burn allocation must match liquidity amount"); + } + + /// @dev AGNT token launch campaign unleash. + /// @notice Make Agents.Fun Great Again. + /// Unleashes a new version of AGNT, called `AGNT II`, that has the same + /// LP setup (same amount of AGNT II and ETH), as the original AGN was meant to have. + /// Hearters of the original AGNT now have 24 hours to collect their `AGNT II`. + function _MAGA() private { + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[launchCampaignNonce]; + + // Unleash the token + _unleashThisMeme(launchCampaignNonce, memeSummon, LIQUIDITY_AGNT, CONTRIBUTION_AGNT, 0); + + } + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override returns (uint256 adjustedAmount) { + require(scheduledForAscendance >= LIQUIDITY_AGNT, "Not enough to cover launch campaign"); + + // Unleash the campaign token + _MAGA(); + + // scheduledForAscendance might also increase during the pool creation + adjustedAmount = scheduledForAscendance - LIQUIDITY_AGNT; + + _launched = 1; + } + + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } +} diff --git a/audits/internal3/analysis/contracts/MemeCelo-flatten.sol b/audits/internal3/analysis/contracts/MemeCelo-flatten.sol new file mode 100644 index 0000000..b67e220 --- /dev/null +++ b/audits/internal3/analysis/contracts/MemeCelo-flatten.sol @@ -0,0 +1,1312 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) + external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) external payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool); + + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() external view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + function factory() external view returns (address); +} + + + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + + +interface IBuyBackBurner { + function checkPoolPrices(address nativeToken, address memeToken, address uniV3PositionManager, uint24 fee, + uint256 allowedDeviation, bool isNativeFirst) external view; +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, uint256 indexed memeNonce, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, uint256 indexed memeNonce, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Meme token name + string name; + // Meme token symbol + string symbol; + // Meme token total supply + uint256 totalSupply; + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Max allowed price deviation for TWAP pool values (100 = 1%) in 1e18 format + uint256 public constant MAX_ALLOWED_DEVIATION = 1e16; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Nonce + uint256 internal _nonce = 1; + // Reentrancy lock + uint256 internal _locked = 1; + // Launch tracker + uint256 internal _launched = 1; + + // Map of meme nonce => Meme summon struct + mapping(uint256 => MemeSummon) public memeSummons; + // Map of mem nonce => (map of hearter => native token balance) + mapping(uint256 => mapping(address => uint256)) public memeHearters; + // Map of meme token address => Meme nonce + mapping(address => uint256) public memeTokenNonces; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160((FixedPointMathLib.sqrt(priceX96) * (1 << 96)) / 1e9); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, amount0, amount1) = IUniswapV3(uniV3PositionManager).mint(params); + + // Schedule for ascendance leftovers from native token + // Note that meme token leftovers will be purged via purgeThisMeme + uint256 nativeLeftovers = isNativeFirst ? (nativeTokenAmount - amount0) : (nativeTokenAmount - amount1); + if (nativeLeftovers > 0) { + scheduledForAscendance += nativeLeftovers; + } + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + // Check current pool prices + IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken, memeToken, uniV3PositionManager, FEE_TIER, + MAX_ALLOWED_DEVIATION, isNativeFirst); + + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += nativeAmountForOLASBurn; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param memeNonce Meme nonce. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collectMemeToken( + address memeToken, + uint256 memeNonce, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeNonce][msg.sender] = 0; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal virtual returns (uint256 adjustedAmount); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + uint256 memeNonce = _nonce; + + // Initiate meme nonce map values + memeSummons[memeNonce] = MemeSummon(name, symbol, totalSupply, msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeNonce][msg.sender] = msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Update nonce + _nonce = memeNonce + 1; + + emit Summoned(msg.sender, memeNonce, msg.value); + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeNonce Meme token nonce. + function heartThisMeme(uint256 memeNonce) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeNonce][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Create a new meme token. + function _createThisMeme( + uint256 memeNonce, + string memory name, + string memory symbol, + uint256 totalSupply + ) internal returns (address memeToken) { + bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, memeNonce)); + randomNonce = keccak256(abi.encodePacked(randomNonce)); + bytes memory payload = abi.encodePacked(type(Meme).creationCode, abi.encode(name, symbol, DECIMALS, totalSupply)); + // solhint-disable-next-line no-inline-assembly + assembly { + memeToken := create2(0x0, add(0x20, payload), mload(payload), memeNonce) // revert to randomNonce + } + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function unleashThisMeme(uint256 memeNonce) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + // Schedule native token amount for ascendance + // uint256 adjustedNativeAmountForAscendance = _updateLaunchCampaignBalance(nativeAmountForOLASBurn); + scheduledForAscendance += nativeAmountForOLASBurn; + + _unleashThisMeme(memeNonce, memeSummon, nativeAmountForLP, totalNativeTokenCommitted, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function _unleashThisMeme(uint256 memeNonce, MemeSummon storage memeSummon, uint256 nativeAmountForLP, uint256 totalNativeTokenCommitted, uint256 nativeAmountForOLASBurn) internal { + + // Calculate LP token allocation according to LP percentage and distribution to supporters + uint256 memeAmountForLP = (memeSummon.totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = memeSummon.totalSupply - memeAmountForLP; + + // Create new meme token + address memeToken = _createThisMeme(memeNonce, memeSummon.name, memeSummon.symbol, memeSummon.totalSupply); + + // Record meme token address + memeTokenNonces[memeToken] = memeNonce; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + if (hearterContribution > 0) { + _collectMemeToken(memeToken, memeNonce, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collectMemeToken(memeToken, memeNonce, memeSummon.heartersAmount, hearterContribution, + memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = _launched > 0 ? scheduledForAscendance : _launchCampaign(); + require(amount > 0, "Nothing to send"); + + scheduledForAscendance = 0; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + if (amount > 0) { + // Transfers native token to be later converted to OLAS for burn. + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + // Get meme nonce + uint256 memeNonce = memeTokenNonces[tokens[i]]; + // Get meme summon struct + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Collect fees + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } +} + + + + +/// @title MemeCelo - a smart contract factory for Meme Token creation on Celo. +contract MemeCelo is MemeFactory { + /// @dev MemeBase constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override view returns (uint256) { + return scheduledForAscendance; + } + + function _wrap(uint256) internal virtual override {} +} diff --git a/audits/internal3/analysis/contracts/MemeFactory-flatten.sol b/audits/internal3/analysis/contracts/MemeFactory-flatten.sol new file mode 100644 index 0000000..9fe8b29 --- /dev/null +++ b/audits/internal3/analysis/contracts/MemeFactory-flatten.sol @@ -0,0 +1,1291 @@ +// Sources flattened with hardhat v2.22.15 https://hardhat.org + +// SPDX-License-Identifier: MIT + + +pragma solidity >=0.8.0; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract Meme is ERC20 { + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } +} + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) + external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) external payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool); + + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() external view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + function factory() external view returns (address); +} + + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + function powWad(int256 x, int256 y) internal pure returns (int256) { + // Equivalent to x to the power of y because x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y) + return expWad((lnWad(x) * y) / int256(WAD)); // Using ln(x) means x must be greater than 0. + } + + function expWad(int256 x) internal pure returns (int256 r) { + unchecked { + // When the result is < 0.5 we return zero. This happens when + // x <= floor(log(0.5e18) * 1e18) ~ -42e18 + if (x <= -42139678854452767551) return 0; + + // When the result is > (2**255 - 1) / 1e18 we can not represent it as an + // int. This happens when x >= floor(log((2**255 - 1) / 1e18) * 1e18) ~ 135. + if (x >= 135305999368893231589) revert("EXP_OVERFLOW"); + + // x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96 + // for more intermediate precision and a binary basis. This base conversion + // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78. + x = (x << 78) / 5**18; + + // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers + // of two such that exp(x) = exp(x') * 2**k, where k is an integer. + // Solving this gives k = round(x / log(2)) and x' = x - k * log(2). + int256 k = ((x << 96) / 54916777467707473351141471128 + 2**95) >> 96; + x = x - k * 54916777467707473351141471128; + + // k is in the range [-61, 195]. + + // Evaluate using a (6, 7)-term rational approximation. + // p is made monic, we'll multiply by a scale factor later. + int256 y = x + 1346386616545796478920950773328; + y = ((y * x) >> 96) + 57155421227552351082224309758442; + int256 p = y + x - 94201549194550492254356042504812; + p = ((p * y) >> 96) + 28719021644029726153956944680412240; + p = p * x + (4385272521454847904659076985693276 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + int256 q = x - 2855989394907223263936484059900; + q = ((q * x) >> 96) + 50020603652535783019961831881945; + q = ((q * x) >> 96) - 533845033583426703283633433725380; + q = ((q * x) >> 96) + 3604857256930695427073651918091429; + q = ((q * x) >> 96) - 14423608567350463180887372962807573; + q = ((q * x) >> 96) + 26449188498355588339934803723976023; + + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial won't have zeros in the domain as all its roots are complex. + // No scaling is necessary because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r should be in the range (0.09, 0.25) * 2**96. + + // We now need to multiply r by: + // * the scale factor s = ~6.031367120. + // * the 2**k factor from the range reduction. + // * the 1e18 / 2**96 factor for base conversion. + // We do this all at once, with an intermediate result in 2**213 + // basis, so the final right shift is always by a positive amount. + r = int256((uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)); + } + } + + function lnWad(int256 x) internal pure returns (int256 r) { + unchecked { + require(x > 0, "UNDEFINED"); + + // We want to convert x from 10**18 fixed point to 2**96 fixed point. + // We do this by multiplying by 2**96 / 10**18. But since + // ln(x * C) = ln(x) + ln(C), we can simply do nothing here + // and add ln(2**96 / 10**18) at the end. + + // Reduce range of x to (1, 2) * 2**96 + // ln(2^k * x) = k * ln(2) + ln(x) + int256 k = int256(log2(uint256(x))) - 96; + x <<= uint256(159 - k); + x = int256(uint256(x) >> 159); + + // Evaluate using a (8, 8)-term rational approximation. + // p is made monic, we will multiply by a scale factor later. + int256 p = x + 3273285459638523848632254066296; + p = ((p * x) >> 96) + 24828157081833163892658089445524; + p = ((p * x) >> 96) + 43456485725739037958740375743393; + p = ((p * x) >> 96) - 11111509109440967052023855526967; + p = ((p * x) >> 96) - 45023709667254063763336534515857; + p = ((p * x) >> 96) - 14706773417378608786704636184526; + p = p * x - (795164235651350426258249787498 << 96); + + // We leave p in 2**192 basis so we don't need to scale it back up for the division. + // q is monic by convention. + int256 q = x + 5573035233440673466300451813936; + q = ((q * x) >> 96) + 71694874799317883764090561454958; + q = ((q * x) >> 96) + 283447036172924575727196451306956; + q = ((q * x) >> 96) + 401686690394027663651624208769553; + q = ((q * x) >> 96) + 204048457590392012362485061816622; + q = ((q * x) >> 96) + 31853899698501571402653359427138; + q = ((q * x) >> 96) + 909429971244387300277376558375; + assembly { + // Div in assembly because solidity adds a zero check despite the unchecked. + // The q polynomial is known not to have zeros in the domain. + // No scaling required because p is already 2**96 too large. + r := sdiv(p, q) + } + + // r is in the range (0, 0.125) * 2**96 + + // Finalization, we need to: + // * multiply by the scale factor s = 5.549… + // * add ln(2**96 / 10**18) + // * add k * ln(2) + // * multiply by 10**18 / 2**96 = 5**18 >> 78 + + // mul s * 5e18 * 2**96, base is now 5**18 * 2**192 + r *= 1677202110996718588342820967067443963516166; + // add ln(2) * k * 5e18 * 2**192 + r += 16597577552685614221487285958193947469193820559219878177908093499208371 * k; + // add ln(2**96 / 10**18) * 5e18 * 2**192 + r += 600920179829731861736702779321621459595472258049074101567377883020018308; + // base conversion: mul 2**18 / 2**192 + r >>= 174; + } + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function log2(uint256 x) internal pure returns (uint256 r) { + require(x > 0, "UNDEFINED"); + + assembly { + r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) + r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) + r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) + r := or(r, shl(4, lt(0xffff, shr(r, x)))) + r := or(r, shl(3, lt(0xff, shr(r, x)))) + r := or(r, shl(2, lt(0xf, shr(r, x)))) + r := or(r, shl(1, lt(0x3, shr(r, x)))) + r := or(r, lt(0x1, shr(r, x))) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // z will equal 0 if y is 0, unlike in Solidity where it will revert. + z := div(x, y) + } + } + + /// @dev Will return 0 instead of reverting if y is zero. + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + + + +interface IBuyBackBurner { + function checkPoolPrices(address nativeToken, address memeToken, address uniV3PositionManager, uint24 fee, + uint256 allowedDeviation, bool isNativeFirst) external view; +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; +} + +/// @title MemeFactory - a smart contract factory for Meme Token creation +/// @dev This contract let's: +/// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). +/// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). +/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for +/// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their +/// contributions. +/// 4) After the meme is being unleashed any hearter can collect their share of the meme token. +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH contributed to a meme gets retained upon unleashing of the meme, that can later be +/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) +/// is contributed to an LP, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// guaranteeing lasting liquidity in the meme token. +/// +/// Example: +/// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH +/// - Agent Brown would heartThisMeme with $250 worth of ETH +/// - Agent Jones would heartThisMeme with $250 worth of ETH +/// - Any agent, let's say Brown, would call unleashThisMeme. This would: +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH +/// - schedule $100 worth of OLAS for burning on Ethereum mainnet +/// - Brown would receive 125_000_000 worth of $SMTH +/// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH +/// - Agent Jones would forget to collectThisMeme +/// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of +/// $SMTH to be burned. +abstract contract MemeFactory { + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, uint256 indexed memeNonce, uint256 nativeTokenContributed); + event Hearted(address indexed hearter, uint256 indexed memeNonce, uint256 amount); + event Unleashed(address indexed unleasher, address indexed memeToken, uint256 indexed lpTokenId, + uint256 liquidity, uint256 nativeAmountForOLASBurn); + event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); + event Purged(address indexed memeToken, uint256 remainingAmount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); + + // Meme Summon struct + struct MemeSummon { + // Meme token name + string name; + // Meme token symbol + string symbol; + // Meme token total supply + uint256 totalSupply; + // Native token contributed to the meme launch + uint256 nativeTokenContributed; + // Summon timestamp + uint256 summonTime; + // Unleash timestamp + uint256 unleashTime; + // Finalized hearters amount + uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; + } + + // Version number + string public constant VERSION = "0.2.0"; + // Total supply minimum value + uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; + // Unleash delay after token summoning + uint256 public constant UNLEASH_DELAY = 24 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; + // Percentage of OLAS to burn (10%) + uint256 public constant OLAS_BURN_PERCENTAGE = 10; + // Percentage of initial supply for liquidity pool (50%) + uint256 public constant LP_PERCENTAGE = 50; + // Max allowed price deviation for TWAP pool values (100 = 1%) in 1e18 format + uint256 public constant MAX_ALLOWED_DEVIATION = 1e16; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// @dev The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// @dev The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; + // Meme token decimals + uint8 public constant DECIMALS = 18; + + // Minimum value of native token deposit + uint256 public immutable minNativeTokenValue; + // OLAS token address + address public immutable olas; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; + + // Number of meme tokens + uint256 public numTokens; + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance + uint256 public scheduledForAscendance; + // Nonce + uint256 internal _nonce = 1; + // Reentrancy lock + uint256 internal _locked = 1; + // Launch tracker + uint256 internal _launched = 1; + + // Map of meme nonce => Meme summon struct + mapping(uint256 => MemeSummon) public memeSummons; + // Map of mem nonce => (map of hearter => native token balance) + mapping(uint256 => mapping(address => uint256)) public memeHearters; + // Map of meme token address => Meme nonce + mapping(address => uint256) public memeTokenNonces; + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + // Set of all meme tokens created by this contract + address[] public memeTokens; + + /// @dev MemeFactory constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + /// @dev Creates native token + meme token LP and adds liquidity. + /// @param memeToken Meme token address. + /// @param nativeTokenAmount Native token amount. + /// @param memeTokenAmount Meme token amount. + /// @return positionId LP position token Id. + /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. + function _createUniswapPair( + address memeToken, + uint256 nativeTokenAmount, + uint256 memeTokenAmount + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160((FixedPointMathLib.sqrt(priceX96) * (1 << 96)) / 1e9); + + // Create a pool + IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, FEE_TIER, sqrtPriceX96); + + // Approve tokens for router + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, amount0, amount1) = IUniswapV3(uniV3PositionManager).mint(params); + + // Schedule for ascendance leftovers from native token + // Note that meme token leftovers will be purged via purgeThisMeme + uint256 nativeLeftovers = isNativeFirst ? (nativeTokenAmount - amount0) : (nativeTokenAmount - amount1); + if (nativeLeftovers > 0) { + scheduledForAscendance += nativeLeftovers; + } + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + // Check current pool prices + IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken, memeToken, uniV3PositionManager, FEE_TIER, + MAX_ALLOWED_DEVIATION, isNativeFirst); + + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = IUniswapV3(uniV3PositionManager).collect(params); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += nativeAmountForOLASBurn; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + /// @param memeNonce Meme nonce. + /// @param heartersAmount Total hearters meme token amount. + /// @param hearterContribution Hearter contribution. + /// @param totalNativeTokenCommitted Total native token contributed for the token launch. + function _collectMemeToken( + address memeToken, + uint256 memeNonce, + uint256 heartersAmount, + uint256 hearterContribution, + uint256 totalNativeTokenCommitted + ) internal { + // Allocate corresponding meme token amount to the hearter + uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; + + // Zero the allocation + memeHearters[memeNonce][msg.sender] = 0; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Transfer meme token amount to the msg.sender + memeTokenInstance.transfer(msg.sender, allocation); + + emit Collected(msg.sender, memeToken, allocation); + } + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal virtual returns (uint256 adjustedAmount); + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + + /// @dev Summons meme token. + /// @param name Token name. + /// @param symbol Token symbol. + /// @param totalSupply Token total supply. + function summonThisMeme( + string memory name, + string memory symbol, + uint256 totalSupply + ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for minimum native token value + require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); + // Check for minimum total supply + require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); + + uint256 memeNonce = _nonce; + + // Initiate meme nonce map values + memeSummons[memeNonce] = MemeSummon(name, symbol, totalSupply, msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeNonce][msg.sender] = msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Update nonce + _nonce = memeNonce + 1; + + emit Summoned(msg.sender, memeNonce, msg.value); + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Hearts the meme token with native token contribution. + /// @param memeNonce Meme token nonce. + function heartThisMeme(uint256 memeNonce) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for zero value + require(msg.value > 0, "Native token amount must be greater than zero"); + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check that the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + + // Update meme token map values + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + totalNativeTokenCommitted += msg.value; + memeSummon.nativeTokenContributed = totalNativeTokenCommitted; + memeHearters[memeNonce][msg.sender] += msg.value; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + emit Hearted(msg.sender, memeNonce, msg.value); + + _locked = 1; + } + + /// @dev Create a new meme token. + function _createThisMeme( + uint256 memeNonce, + string memory name, + string memory symbol, + uint256 totalSupply + ) internal returns (address memeToken) { + bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, memeNonce)); + randomNonce = keccak256(abi.encodePacked(randomNonce)); + bytes memory payload = abi.encodePacked(type(Meme).creationCode, abi.encode(name, symbol, DECIMALS, totalSupply)); + // solhint-disable-next-line no-inline-assembly + assembly { + memeToken := create2(0x0, add(0x20, payload), mload(payload), memeNonce) // revert to randomNonce + } + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function unleashThisMeme(uint256 memeNonce) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check if the meme has been summoned + require(memeSummon.summonTime > 0, "Meme not summoned"); + // Check the unleash timestamp + require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); + + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); + + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; + + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; + + // Schedule native token amount for ascendance + // uint256 adjustedNativeAmountForAscendance = _updateLaunchCampaignBalance(nativeAmountForOLASBurn); + scheduledForAscendance += nativeAmountForOLASBurn; + + _unleashThisMeme(memeNonce, memeSummon, nativeAmountForLP, totalNativeTokenCommitted, nativeAmountForOLASBurn); + + _locked = 1; + } + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + function _unleashThisMeme(uint256 memeNonce, MemeSummon storage memeSummon, uint256 nativeAmountForLP, uint256 totalNativeTokenCommitted, uint256 nativeAmountForOLASBurn) internal { + + // Calculate LP token allocation according to LP percentage and distribution to supporters + uint256 memeAmountForLP = (memeSummon.totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = memeSummon.totalSupply - memeAmountForLP; + + // Create new meme token + address memeToken = _createThisMeme(memeNonce, memeSummon.name, memeSummon.symbol, memeSummon.totalSupply); + + // Record meme token address + memeTokenNonces[memeToken] = memeNonce; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + if (hearterContribution > 0) { + _collectMemeToken(memeToken, memeNonce, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeToken, positionId, liquidity, nativeAmountForOLASBurn); + } + + /// @dev Collects meme token allocation. + /// @param memeToken Meme token address. + function collectThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if the meme can be collected + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); + + // Get hearter contribution + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + // Check for zero value + require(hearterContribution > 0, "No token allocation"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Collect the token + _collectMemeToken(memeToken, memeNonce, memeSummon.heartersAmount, hearterContribution, + memeSummon.nativeTokenContributed); + + _locked = 1; + } + + /// @dev Purges uncollected meme token allocation. + /// @param memeToken Meme token address. + function purgeThisMeme(address memeToken) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been summoned + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Burn all remaining tokens in this contract + uint256 remainingBalance = memeTokenInstance.balanceOf(address(this)); + // Check the remaining balance is positive + require(remainingBalance > 0, "Has been purged or nothing to purge"); + // Burn the remaining balance + memeTokenInstance.burn(remainingBalance); + + emit Purged(memeToken, remainingBalance); + + _locked = 1; + } + + /// @dev Transfers native token to later be converted to OLAS for burn. + function scheduleForAscendance() external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + uint256 amount = _launched > 0 ? scheduledForAscendance : _launchCampaign(); + require(amount > 0, "Nothing to send"); + + scheduledForAscendance = 0; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + if (amount > 0) { + // Transfers native token to be later converted to OLAS for burn. + IERC20(nativeToken).transfer(buyBackBurner, amount); + + emit OLASJourneyToAscendance(amount); + } + + _locked = 1; + } + + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) external { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + // Get meme nonce + uint256 memeNonce = memeTokenNonces[tokens[i]]; + // Get meme summon struct + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Collect fees + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } +} diff --git a/audits/internal3/analysis/contracts/script.sh b/audits/internal3/analysis/contracts/script.sh new file mode 100755 index 0000000..286784b --- /dev/null +++ b/audits/internal3/analysis/contracts/script.sh @@ -0,0 +1,20 @@ +#!/bin/bash + + slither_options=("call-graph" "constructor-calls" "contract-summary" "data-dependency" "function-summary" + "human-summary" "inheritance" "inheritance-graph" "modifiers" "require" "variable-order" "vars-and-auth") + echo -e "\nRunning slither routines ..." + for so in "${slither_options[@]}"; do + echo -e "\t$so" + slither . --print ${so} &> "slither_$so.txt" + done + echo -e "\tfull report" + slither . &> "slither_full.txt" + + # moving generated .dot files to the audit folder + count=`ls -1 *.dot 2>/dev/null | wc -l` + echo -e "\tgenerated $count .dot files" + for _filename in *.dot; do + filename="${_filename%.*}" + cat $_filename | dot -Tpng > slither_$filename.png + done + rm *.dot diff --git a/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.png b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.png new file mode 100644 index 0000000..4f7daab Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.IUniswapV3.call-graph.png b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..41e94fc Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.TickMath.call-graph.png b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.TickMath.call-graph.png new file mode 100644 index 0000000..e151ebd Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.TickMath.call-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..0b5e1b6 Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..1bb7409 Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurner-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.png b/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.png new file mode 100644 index 0000000..1f0549e Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..2b79d02 Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..fd2227c Binary files /dev/null and b/audits/internal3/analysis/slither_BuyBackBurnerProxy-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_Meme.sol.Meme.call-graph.png b/audits/internal3/analysis/slither_Meme.sol.Meme.call-graph.png new file mode 100644 index 0000000..0e99cd5 Binary files /dev/null and b/audits/internal3/analysis/slither_Meme.sol.Meme.call-graph.png differ diff --git a/audits/internal3/analysis/slither_Meme.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_Meme.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..2c7f1f7 Binary files /dev/null and b/audits/internal3/analysis/slither_Meme.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_Meme.sol.inheritance-graph.png b/audits/internal3/analysis/slither_Meme.sol.inheritance-graph.png new file mode 100644 index 0000000..c37b609 Binary files /dev/null and b/audits/internal3/analysis/slither_Meme.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png new file mode 100644 index 0000000..901f9f9 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png new file mode 100644 index 0000000..b02af4c Binary files /dev/null and b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..f4cdae5 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..c6ab2d1 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeActivityChecker-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..7a72147 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IBuyBackBurner.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IBuyBackBurner.call-graph.png new file mode 100644 index 0000000..283eca1 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IBuyBackBurner.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IERC20.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d41b332 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IUniswapV3.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..7d0df46 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IWETH.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.Meme.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..0e99cd5 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.png new file mode 100644 index 0000000..4663a88 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..a02ab5d Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..ab5dc7d Binary files /dev/null and b/audits/internal3/analysis/slither_MemeArbitrum-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..7a72147 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.IBuyBackBurner.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IBuyBackBurner.call-graph.png new file mode 100644 index 0000000..283eca1 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IBuyBackBurner.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d41b332 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.IUniswapV3.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..7d0df46 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png new file mode 100644 index 0000000..ca54b08 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.IWETH.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..0e99cd5 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png new file mode 100644 index 0000000..ff4fa71 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.MemeBase.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..8cc1e70 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..e067439 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeBase-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..7a72147 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IBuyBackBurner.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IBuyBackBurner.call-graph.png new file mode 100644 index 0000000..283eca1 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IBuyBackBurner.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d41b332 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IUniswapV3.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..7d0df46 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..0e99cd5 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png new file mode 100644 index 0000000..28bbd07 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.MemeCelo.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..2241dc0 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..88b0cd7 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeCelo-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.FixedPointMathLib.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.FixedPointMathLib.call-graph.png new file mode 100644 index 0000000..7a72147 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.FixedPointMathLib.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IBuyBackBurner.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IBuyBackBurner.call-graph.png new file mode 100644 index 0000000..283eca1 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IBuyBackBurner.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png new file mode 100644 index 0000000..d41b332 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IERC20.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IUniswapV3.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IUniswapV3.call-graph.png new file mode 100644 index 0000000..7d0df46 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.IUniswapV3.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png new file mode 100644 index 0000000..0e99cd5 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.Meme.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png new file mode 100644 index 0000000..f376a33 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.MemeFactory.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000..ec9571d Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.all_contracts.call-graph.png differ diff --git a/audits/internal3/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png new file mode 100644 index 0000000..b45b571 Binary files /dev/null and b/audits/internal3/analysis/slither_MemeFactory-flatten.sol.inheritance-graph.png differ diff --git a/audits/internal3/analysis/slither_call-graph.txt b/audits/internal3/analysis/slither_call-graph.txt new file mode 100644 index 0000000..e521348 --- /dev/null +++ b/audits/internal3/analysis/slither_call-graph.txt @@ -0,0 +1,103 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers:Call Graph: ./MemeActivityChecker-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeActivityChecker-flatten.sol.IMemeFactory.call-graph.dot +Call Graph: ./MemeActivityChecker-flatten.sol.MemeActivityChecker.call-graph.dot + +INFO:Printers:Call Graph: ./BuyBackBurnerProxy-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./BuyBackBurnerProxy-flatten.sol.BuyBackBurnerProxy.call-graph.dot + +INFO:Printers:Call Graph: ./Meme.sol.all_contracts.call-graph.dot +Call Graph: ./Meme.sol.Meme.call-graph.dot + +INFO:Printers:Call Graph: ./MemeCelo-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IBuyBackBurner.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeCelo-flatten.sol.MemeCelo.call-graph.dot + +INFO:Printers:Call Graph: ./BuyBackBurner-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./BuyBackBurner-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./BuyBackBurner-flatten.sol.TickMath.call-graph.dot +Call Graph: ./BuyBackBurner-flatten.sol.BuyBackBurner.call-graph.dot + +INFO:Printers:Call Graph: ./MemeArbitrum-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IBuyBackBurner.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeArbitrum-flatten.sol.MemeArbitrum.call-graph.dot + +INFO:Printers:Call Graph: ./MemeFactory-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IBuyBackBurner.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeFactory-flatten.sol.MemeFactory.call-graph.dot + +INFO:Printers:Call Graph: ./MemeBase-flatten.sol.all_contracts.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.Meme.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IUniswapV3.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.FixedPointMathLib.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IBuyBackBurner.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IERC20.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.IWETH.call-graph.dot +Call Graph: ./MemeBase-flatten.sol.MemeBase.call-graph.dot + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_constructor-calls.txt b/audits/internal3/analysis/slither_constructor-calls.txt new file mode 100644 index 0000000..d724f76 --- /dev/null +++ b/audits/internal3/analysis/slither_constructor-calls.txt @@ -0,0 +1,457 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +################################### +####### MemeActivityChecker ####### +################################### + +## Constructor Call Sequence + - MemeActivityChecker + +## Constructor Definitions + +### MemeActivityChecker + + constructor(address _memeFactory, uint256 _livenessRatio) { + // Check the zero address + if (_memeFactory == address(0)) { + revert ZeroAddress(); + } + + // Check for zero value + if (_livenessRatio == 0) { + revert ZeroValue(); + } + + memeFactory = _memeFactory; + livenessRatio = _livenessRatio; + } + +INFO:Printers: +################################## +####### BuyBackBurnerProxy ####### +################################## + +## Constructor Call Sequence + - BuyBackBurnerProxy + +## Constructor Definitions + +### BuyBackBurnerProxy + + constructor(address implementation, bytes memory buyBackBurnerData) { + // Check for the zero address, since the delegatecall works even with the zero one + if (implementation == address(0)) { + revert ZeroImplementationAddress(); + } + + // Check for the zero data + if (buyBackBurnerData.length == 0) { + revert ZeroData(); + } + + // Store the buyBackBurner implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, implementation) + } + // Initialize proxy storage + (bool success, ) = implementation.delegatecall(buyBackBurnerData); + if (!success) { + revert InitializationFailed(); + } + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +######################## +####### MemeCelo ####### +######################## + +## Constructor Call Sequence + - MemeFactory + - MemeCelo + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +### MemeCelo + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + + +INFO:Printers: +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +############################ +####### MemeArbitrum ####### +############################ + +## Constructor Call Sequence + - MemeFactory + - MemeArbitrum + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +### MemeArbitrum + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +########################### +####### MemeFactory ####### +########################### + +## Constructor Call Sequence + - MemeFactory + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +INFO:Printers: +#################### +####### Meme ####### +#################### + +## Constructor Call Sequence + - ERC20 + - Meme + +## Constructor Definitions + +### ERC20 + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + +### Meme + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _totalSupply + ) ERC20(_name, _symbol, _decimals) { + _mint(msg.sender, _totalSupply); + } + +######################## +####### MemeBase ####### +######################## + +## Constructor Call Sequence + - MemeFactory + - MemeBase + +## Constructor Definitions + +### MemeFactory + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) { + olas = _olas; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; + minNativeTokenValue = _minNativeTokenValue; + } + + + +### MemeBase + + tructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue, + address[] memory accounts, + uint256[] memory amounts + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) { + if (accounts.length > 0) { + launchCampaignNonce = _nonce; + _launchCampaignSetup(accounts, amounts); + _nonce = launchCampaignNonce + 1; + _launched = 0; + } + } + + + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_contract-summary.txt b/audits/internal3/analysis/slither_contract-summary.txt new file mode 100644 index 0000000..dec4bfa --- /dev/null +++ b/audits/internal3/analysis/slither_contract-summary.txt @@ -0,0 +1,527 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: ++ Contract IMemeFactory (Most derived contract) + - From IMemeFactory + - mapAccountActivities(address) (external) + ++ Contract MemeActivityChecker (Most derived contract) + - From MemeActivityChecker + - constructor(address,uint256) (public) + - getMultisigNonces(address) (external) + - isRatioPass(uint256[],uint256[],uint256) (external) + +INFO:Printers: ++ Contract BuyBackBurnerProxy (Upgradeable Proxy) (Most derived contract) + - From BuyBackBurnerProxy + - constructor(address,bytes) (public) + - fallback() (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - factory() (external) + - getPool(address,address,uint24) (external) + - mint(IUniswapV3.MintParams) (external) + - observe(uint32[]) (external) + - slot0() (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IBuyBackBurner (Most derived contract) + - From IBuyBackBurner + - checkPoolPrices(address,address,address,uint24,uint256,bool) (external) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign() (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + ++ Contract MemeCelo (Most derived contract) + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + - From MemeCelo + - _launchCampaign() (internal) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256) (public) + +INFO:Printers: ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - factory() (external) + - getPool(address,address,uint24) (external) + - mint(IUniswapV3.MintParams) (external) + - observe(uint32[]) (external) + - slot0() (external) + ++ Contract TickMath (Most derived contract) + - From TickMath + - getSqrtRatioAtTick(int24) (internal) + - getTickAtSqrtRatio(uint160) (internal) + ++ Contract BuyBackBurner (Most derived contract) + - From BuyBackBurner + - _getTwapFromOracle(address) (internal) + - changeImplementation(address) (external) + - changeOwner(address) (external) + - checkPoolPrices(address,address,address,uint24,uint256,bool) (external) + - initialize() (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - factory() (external) + - getPool(address,address,uint24) (external) + - mint(IUniswapV3.MintParams) (external) + - observe(uint32[]) (external) + - slot0() (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IBuyBackBurner (Most derived contract) + - From IBuyBackBurner + - checkPoolPrices(address,address,address,uint24,uint256,bool) (external) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign() (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract MemeArbitrum (Most derived contract) + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + - From MemeArbitrum + - _launchCampaign() (internal) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256) (public) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - factory() (external) + - getPool(address,address,uint24) (external) + - mint(IUniswapV3.MintParams) (external) + - observe(uint32[]) (external) + - slot0() (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IBuyBackBurner (Most derived contract) + - From IBuyBackBurner + - checkPoolPrices(address,address,address,uint24,uint256,bool) (external) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory (Most derived contract) + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign() (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + +INFO:Printers: ++ Contract ERC20 + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + ++ Contract Meme (Most derived contract) + - From ERC20 + - DOMAIN_SEPARATOR() (public) + - _burn(address,uint256) (internal) + - _mint(address,uint256) (internal) + - approve(address,uint256) (public) + - computeDomainSeparator() (internal) + - constructor(string,string,uint8) (internal) + - permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (public) + - transfer(address,uint256) (public) + - transferFrom(address,address,uint256) (public) + - From Meme + - burn(uint256) (external) + - constructor(string,string,uint8,uint256) (public) + ++ Contract IUniswapV3 (Most derived contract) + - From IUniswapV3 + - collect(IUniswapV3.CollectParams) (external) + - createAndInitializePoolIfNecessary(address,address,uint24,uint160) (external) + - factory() (external) + - getPool(address,address,uint24) (external) + - mint(IUniswapV3.MintParams) (external) + - observe(uint32[]) (external) + - slot0() (external) + ++ Contract FixedPointMathLib (Most derived contract) + - From FixedPointMathLib + - divWadDown(uint256,uint256) (internal) + - divWadUp(uint256,uint256) (internal) + - expWad(int256) (internal) + - lnWad(int256) (internal) + - log2(uint256) (internal) + - mulDivDown(uint256,uint256,uint256) (internal) + - mulDivUp(uint256,uint256,uint256) (internal) + - mulWadDown(uint256,uint256) (internal) + - mulWadUp(uint256,uint256) (internal) + - powWad(int256,int256) (internal) + - rpow(uint256,uint256,uint256) (internal) + - sqrt(uint256) (internal) + - unsafeDiv(uint256,uint256) (internal) + - unsafeDivUp(uint256,uint256) (internal) + - unsafeMod(uint256,uint256) (internal) + ++ Contract IBuyBackBurner (Most derived contract) + - From IBuyBackBurner + - checkPoolPrices(address,address,address,uint24,uint256,bool) (external) + ++ Contract IERC20 (Most derived contract) + - From IERC20 + - approve(address,uint256) (external) + - burn(uint256) (external) + - transfer(address,uint256) (external) + ++ Contract MemeFactory + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _launchCampaign() (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - _wrap(uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + ++ Contract IWETH (Most derived contract) + - From IWETH + - deposit() (external) + ++ Contract MemeBase (Most derived contract) + - From MemeFactory + - _collectFees(address,uint256,bool) (internal) + - _collectMemeToken(address,uint256,uint256,uint256,uint256) (internal) + - _createThisMeme(uint256,string,string,uint256) (internal) + - _createUniswapPair(address,uint256,uint256) (internal) + - _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) (internal) + - collectFees(address[]) (external) + - collectThisMeme(address) (external) + - constructor(address,address,address,address,uint256) (internal) + - heartThisMeme(uint256) (external) + - purgeThisMeme(address) (external) + - scheduleForAscendance() (external) + - summonThisMeme(string,string,uint256) (external) + - unleashThisMeme(uint256) (external) + - From MemeBase + - _MAGA() (private) + - _launchCampaign() (internal) + - _launchCampaignSetup(address[],uint256[]) (private) + - _wrap(uint256) (internal) + - constructor(address,address,address,address,uint256,address[],uint256[]) (public) + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_data-dependency.txt b/audits/internal3/analysis/slither_data-dependency.txt new file mode 100644 index 0000000..472a153 --- /dev/null +++ b/audits/internal3/analysis/slither_data-dependency.txt @@ -0,0 +1,20043 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +Contract IMemeFactory ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function mapAccountActivities(address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| multisig | [] | +| | [] | ++----------+--------------+ +INFO:Printers: +Contract IMemeFactory ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function mapAccountActivities(address) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| multisig | [] | +| | [] | ++----------+--------------+ +Contract MemeActivityChecker ++---------------+-------------------------------------+ +| Variable | Dependencies | ++---------------+-------------------------------------+ +| livenessRatio | ['_livenessRatio', 'livenessRatio'] | +| memeFactory | ['_memeFactory', 'memeFactory'] | ++---------------+-------------------------------------+ + +Function constructor(address,uint256) ++-----------------------------------+--------------------+ +| Variable | Dependencies | ++-----------------------------------+--------------------+ +| _memeFactory | [] | +| _livenessRatio | [] | +| MemeActivityChecker.livenessRatio | ['_livenessRatio'] | +| MemeActivityChecker.memeFactory | ['_memeFactory'] | ++-----------------------------------+--------------------+ +Function getMultisigNonces(address) ++-----------------------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------------------+---------------------------------------+ +| multisig | [] | +| nonces | ['memeFactory', 'multisig', 'nonces'] | +| MemeActivityChecker.livenessRatio | [] | +| MemeActivityChecker.memeFactory | ['memeFactory'] | ++-----------------------------------+---------------------------------------+ +Function isRatioPass(uint256[],uint256[],uint256) ++-----------------------------------+-------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------------------+-------------------------------------------------------------+ +| curNonces | ['curNonces'] | +| lastNonces | ['lastNonces'] | +| ts | [] | +| ratioPass | ['curNonces', 'lastNonces', 'livenessRatio', 'ratio', 'ts'] | +| ratio | ['curNonces', 'lastNonces', 'ts'] | +| MemeActivityChecker.livenessRatio | ['livenessRatio'] | +| MemeActivityChecker.memeFactory | [] | ++-----------------------------------+-------------------------------------------------------------+ +INFO:Printers: +Contract BuyBackBurnerProxy ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | ++-----------------------+---------------------------+ + +Function constructor(address,bytes) ++------------------------------------------+----------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------------+----------------------------------------------------+ +| implementation | [] | +| buyBackBurnerData | ['buyBackBurnerData'] | +| success | ['TUPLE_0', 'buyBackBurnerData', 'implementation'] | +| BuyBackBurnerProxy.BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | ++------------------------------------------+----------------------------------------------------+ +Function fallback() ++------------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------------+---------------------------+ +| BuyBackBurnerProxy.BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | ++------------------------------------------+---------------------------+ +Function slitherConstructorConstantVariables() ++------------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------------+--------------+ +| BuyBackBurnerProxy.BUY_BACK_BURNER_PROXY | [] | ++------------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract MemeCelo ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_3', 'TUPLE_4', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _launchCampaign() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +INFO:Printers: +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract TickMath ++----------------+--------------------+ +| Variable | Dependencies | ++----------------+--------------------+ +| MIN_TICK | [] | +| MAX_TICK | ['MAX_TICK'] | +| MIN_SQRT_RATIO | ['MIN_SQRT_RATIO'] | +| MAX_SQRT_RATIO | ['MAX_SQRT_RATIO'] | ++----------------+--------------------+ + +Function getSqrtRatioAtTick(int24) ++-------------------------+-------------------------------+ +| Variable | Dependencies | ++-------------------------+-------------------------------+ +| tick | ['tickHi'] | +| sqrtPriceX96 | ['ratio'] | +| absTick | ['absTick', 'tick', 'tickHi'] | +| ratio | ['ratio'] | +| TickMath.MIN_TICK | [] | +| TickMath.MAX_TICK | ['MAX_TICK'] | +| TickMath.MIN_SQRT_RATIO | [] | +| TickMath.MAX_SQRT_RATIO | [] | ++-------------------------+-------------------------------+ +Function getTickAtSqrtRatio(uint160) ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| sqrtPriceX96 | [] | +| tick | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'log_sqrt10001', 'msb', 'r', 'ratio', 'sqrtPriceX96', 'tickHi', 'tickLow'] | +| ratio | ['sqrtPriceX96'] | +| r | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| msb | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| log_2 | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| log_sqrt10001 | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| tickLow | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'log_sqrt10001', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| tickHi | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'log_sqrt10001', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| TickMath.MIN_TICK | [] | +| TickMath.MAX_TICK | [] | +| TickMath.MIN_SQRT_RATIO | ['MIN_SQRT_RATIO'] | +| TickMath.MAX_SQRT_RATIO | ['MAX_SQRT_RATIO'] | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function slitherConstructorConstantVariables() ++-------------------------+--------------+ +| Variable | Dependencies | ++-------------------------+--------------+ +| TickMath.MIN_TICK | [] | +| TickMath.MAX_TICK | [] | +| TickMath.MIN_SQRT_RATIO | [] | +| TickMath.MAX_SQRT_RATIO | [] | ++-------------------------+--------------+ +INFO:Printers: +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract TickMath ++----------------+--------------------+ +| Variable | Dependencies | ++----------------+--------------------+ +| MIN_TICK | [] | +| MAX_TICK | ['MAX_TICK'] | +| MIN_SQRT_RATIO | ['MIN_SQRT_RATIO'] | +| MAX_SQRT_RATIO | ['MAX_SQRT_RATIO'] | ++----------------+--------------------+ + +Function getSqrtRatioAtTick(int24) ++-------------------------+-------------------------------+ +| Variable | Dependencies | ++-------------------------+-------------------------------+ +| tick | ['tickHi'] | +| sqrtPriceX96 | ['ratio'] | +| absTick | ['absTick', 'tick', 'tickHi'] | +| ratio | ['ratio'] | +| TickMath.MIN_TICK | [] | +| TickMath.MAX_TICK | ['MAX_TICK'] | +| TickMath.MIN_SQRT_RATIO | [] | +| TickMath.MAX_SQRT_RATIO | [] | ++-------------------------+-------------------------------+ +Function getTickAtSqrtRatio(uint160) ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| sqrtPriceX96 | [] | +| tick | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'log_sqrt10001', 'msb', 'r', 'ratio', 'sqrtPriceX96', 'tickHi', 'tickLow'] | +| ratio | ['sqrtPriceX96'] | +| r | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| msb | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| log_2 | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| log_sqrt10001 | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| tickLow | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'log_sqrt10001', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| tickHi | ['f_getTickAtSqrtRatio_asm_0', 'f_getTickAtSqrtRatio_asm_1', 'f_getTickAtSqrtRatio_asm_10', 'f_getTickAtSqrtRatio_asm_11', 'f_getTickAtSqrtRatio_asm_12', 'f_getTickAtSqrtRatio_asm_13', 'f_getTickAtSqrtRatio_asm_14', 'f_getTickAtSqrtRatio_asm_15', 'f_getTickAtSqrtRatio_asm_16', 'f_getTickAtSqrtRatio_asm_17', 'f_getTickAtSqrtRatio_asm_18', 'f_getTickAtSqrtRatio_asm_19', 'f_getTickAtSqrtRatio_asm_2', 'f_getTickAtSqrtRatio_asm_20', 'f_getTickAtSqrtRatio_asm_21', 'f_getTickAtSqrtRatio_asm_3', 'f_getTickAtSqrtRatio_asm_4', 'f_getTickAtSqrtRatio_asm_5', 'f_getTickAtSqrtRatio_asm_6', 'f_getTickAtSqrtRatio_asm_7', 'f_getTickAtSqrtRatio_asm_8', 'f_getTickAtSqrtRatio_asm_9', 'log_2', 'log_sqrt10001', 'msb', 'r', 'ratio', 'sqrtPriceX96'] | +| TickMath.MIN_TICK | [] | +| TickMath.MAX_TICK | [] | +| TickMath.MIN_SQRT_RATIO | ['MIN_SQRT_RATIO'] | +| TickMath.MAX_SQRT_RATIO | ['MAX_SQRT_RATIO'] | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function slitherConstructorConstantVariables() ++-------------------------+--------------+ +| Variable | Dependencies | ++-------------------------+--------------+ +| TickMath.MIN_TICK | [] | +| TickMath.MAX_TICK | [] | +| TickMath.MIN_SQRT_RATIO | [] | +| TickMath.MAX_SQRT_RATIO | [] | ++-------------------------+--------------+ +Contract BuyBackBurner ++-----------------------+-------------------------------------+ +| Variable | Dependencies | ++-----------------------+-------------------------------------+ +| VERSION | [] | +| BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | +| OLAS_BURNER | [] | +| SECONDS_AGO | ['SECONDS_AGO'] | +| owner | ['msg.sender', 'newOwner', 'owner'] | ++-----------------------+-------------------------------------+ + +Function _getTwapFromOracle(address) ++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ +| pool | ['pool'] | +| priceX96 | ['SECONDS_AGO', 'TUPLE_0', 'TickMath', 'averageTick', 'pool', 'secondsAgos', 'sqrtPriceX96', 'tickCumulativeDelta', 'tickCumulatives'] | +| secondsAgos | ['SECONDS_AGO', 'secondsAgos'] | +| tickCumulatives | ['SECONDS_AGO', 'TUPLE_0', 'pool', 'secondsAgos', 'tickCumulatives'] | +| tickCumulativeDelta | ['SECONDS_AGO', 'TUPLE_0', 'pool', 'secondsAgos', 'tickCumulatives'] | +| averageTick | ['SECONDS_AGO', 'TUPLE_0', 'pool', 'secondsAgos', 'tickCumulativeDelta', 'tickCumulatives'] | +| sqrtPriceX96 | ['SECONDS_AGO', 'TUPLE_0', 'TickMath', 'averageTick', 'pool', 'secondsAgos', 'tickCumulativeDelta', 'tickCumulatives'] | +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.SECONDS_AGO | ['SECONDS_AGO'] | +| BuyBackBurner.owner | [] | ++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ +Function initialize() ++-------------------------------------+-------------------------+ +| Variable | Dependencies | ++-------------------------------------+-------------------------+ +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.SECONDS_AGO | [] | +| BuyBackBurner.owner | ['msg.sender', 'owner'] | ++-------------------------------------+-------------------------+ +Function changeImplementation(address) ++-------------------------------------+---------------------------+ +| Variable | Dependencies | ++-------------------------------------+---------------------------+ +| newImplementation | [] | +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | ['BUY_BACK_BURNER_PROXY'] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.SECONDS_AGO | [] | +| BuyBackBurner.owner | ['owner'] | ++-------------------------------------+---------------------------+ +Function changeOwner(address) ++-------------------------------------+-----------------------+ +| Variable | Dependencies | ++-------------------------------------+-----------------------+ +| newOwner | [] | +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.SECONDS_AGO | [] | +| BuyBackBurner.owner | ['newOwner', 'owner'] | ++-------------------------------------+-----------------------+ +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | +| factory | ['uniV3PositionManager'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| pool | ['factory', 'fee', 'memeToken', 'nativeToken', 'token0', 'token1', 'uniV3PositionManager'] | +| sqrtPriceX96 | ['TUPLE_1', 'factory', 'fee', 'memeToken', 'nativeToken', 'pool', 'token0', 'token1', 'uniV3PositionManager'] | +| twapPrice | [] | +| instantPrice | ['TUPLE_1', 'factory', 'fee', 'memeToken', 'nativeToken', 'pool', 'sqrtPriceX96', 'token0', 'token1', 'uniV3PositionManager'] | +| deviation | ['TUPLE_1', 'deviation', 'factory', 'fee', 'instantPrice', 'memeToken', 'nativeToken', 'pool', 'sqrtPriceX96', 'token0', 'token1', 'twapPrice', 'uniV3PositionManager'] | +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.SECONDS_AGO | [] | +| BuyBackBurner.owner | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function slitherConstructorConstantVariables() ++-------------------------------------+--------------+ +| Variable | Dependencies | ++-------------------------------------+--------------+ +| BuyBackBurner.VERSION | [] | +| BuyBackBurner.BUY_BACK_BURNER_PROXY | [] | +| BuyBackBurner.OLAS_BURNER | [] | +| BuyBackBurner.SECONDS_AGO | [] | +| BuyBackBurner.owner | [] | ++-------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++-------------------[0m-------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract MemeArbitrum ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_3', 'TUPLE_4', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _launchCampaign() ++------------------------------------+----------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------+ +| | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------+ +Function _wrap(uint256) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++----------------------------[34m----+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +INFO:Printers: +Contract ERC20 ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['amount', 'totalSupply'] | +| balanceOf | ['amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8) ++--------------------------------+-------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------+ +| _name | ['_name'] | +| _symbol | ['_symbol'] | +| _decimals | ['_decimals'] | +| ERC20.name | ['_name'] | +| ERC20.symbol | ['_symbol'] | +| ERC20.decimals | ['_decimals'] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['block.chainid'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------+ +Function approve(address,uint256) ++--------------------------------+---------------+ +| Variable | Dependencies | ++--------------------------------+---------------+ +| spender | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------+ +Function transfer(address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| to | [] | +| amount | [] | +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function transferFrom(address,address,uint256) ++--------------------------------+-------------------------+ +| Variable | Dependencies | ++--------------------------------+-------------------------+ +| from | [] | +| to | [] | +| amount | [] | +| | [] | +| allowed | ['allowance'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+-------------------------+ +Function permit(address,address,uint256,uint256,uint8,bytes32,bytes32) ++--------------------------------+------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------------------------------------------------------------------------+ +| owner | [] | +| spender | [] | +| value | [] | +| deadline | [] | +| v | [] | +| r | [] | +| s | [] | +| recoveredAddress | ['INITIAL_DOMAIN_SEPARATOR', 'deadline', 'nonces', 'owner', 'r', 's', 'spender', 'v', 'value'] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | ['allowance'] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | ['nonces'] | ++--------------------------------+------------------------------------------------------------------------------------------------+ +Function DOMAIN_SEPARATOR() ++--------------------------------+------------------------------+ +| Variable | Dependencies | ++--------------------------------+------------------------------+ +| | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID'] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR'] | +| ERC20.nonces | [] | ++--------------------------------+------------------------------+ +Function computeDomainSeparator() ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| | [] | +| ERC20.name | ['name'] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function _mint(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| to | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Function _burn(address,uint256) ++--------------------------------+---------------------------+ +| Variable | Dependencies | ++--------------------------------+---------------------------+ +| from | [] | +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | ['amount', 'totalSupply'] | +| ERC20.balanceOf | ['amount', 'balanceOf'] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+---------------------------+ +Contract Meme ++--------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++--------------------------+------------------------------------------------------------------------+ +| name | ['_name', 'name'] | +| symbol | ['_symbol'] | +| decimals | ['_decimals'] | +| totalSupply | ['_totalSupply', 'amount', 'totalSupply'] | +| balanceOf | ['_totalSupply', 'amount', 'balanceOf'] | +| allowance | ['allowance'] | +| INITIAL_CHAIN_ID | ['INITIAL_CHAIN_ID', 'block.chainid'] | +| INITIAL_DOMAIN_SEPARATOR | ['INITIAL_DOMAIN_SEPARATOR', '_name', 'block.chainid', 'name', 'this'] | +| nonces | ['nonces'] | ++--------------------------+------------------------------------------------------------------------+ + +Function constructor(string,string,uint8,uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| _name | [] | +| _symbol | [] | +| _decimals | [] | +| _totalSupply | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Function burn(uint256) ++--------------------------------+--------------+ +| Variable | Dependencies | ++--------------------------------+--------------+ +| amount | [] | +| ERC20.name | [] | +| ERC20.symbol | [] | +| ERC20.decimals | [] | +| ERC20.totalSupply | [] | +| ERC20.balanceOf | [] | +| ERC20.allowance | [] | +| ERC20.INITIAL_CHAIN_ID | [] | +| ERC20.INITIAL_DOMAIN_SEPARATOR | [] | +| ERC20.nonces | [] | ++--------------------------------+--------------+ +Contract IUniswapV3 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function createAndInitializePoolIfNecessary(address,address,uint24,uint160) ++--------------+--------------+ +| Variable | Dependencies | ++--------------+--------------+ +| token0 | [] | +| token1 | [] | +| fee | [] | +| sqrtPriceX96 | [] | +| pool | [] | ++--------------+--------------+ +Function mint(IUniswapV3.MintParams) ++-----------+--------------+ +| Variable | Dependencies | ++-----------+--------------+ +| params | [] | +| tokenId | [] | +| liquidity | [] | +| amount0 | [] | +| amount1 | [] | ++-----------+--------------+ +Function collect(IUniswapV3.CollectParams) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| params | [] | +| amount0 | [] | +| amount1 | [] | ++----------+--------------+ +Function getPool(address,address,uint24) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| tokenA | [] | +| tokenB | [] | +| fee | [] | +| pool | [] | ++----------+--------------+ +Function slot0() ++----------------------------+--------------+ +| Variable | Dependencies | ++----------------------------+--------------+ +| sqrtPriceX96 | [] | +| tick | [] | +| observationIndex | [] | +| observationCardinality | [] | +| observationCardinalityNext | [] | +| feeProtocol | [] | +| unlocked | [] | ++----------------------------+--------------+ +Function observe(uint32[]) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| secondsAgos | [] | +| tickCumulatives | [] | +| secondsPerLiquidityCumulativeX128s | [] | ++------------------------------------+--------------+ +Function factory() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| | [] | ++----------+--------------+ +Contract FixedPointMathLib ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| WAD | ['WAD'] | ++----------+--------------+ + +Function mulWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function mulWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadDown(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function divWadUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function powWad(int256,int256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| | [] | +| FixedPointMathLib.WAD | ['WAD'] | ++-----------------------+--------------+ +Function expWad(int256) ++-----------------------+--------------------------------+ +| Variable | Dependencies | ++-----------------------+--------------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x', 'y'] | +| k | ['x'] | +| y | ['k', 'x', 'y'] | +| p | ['k', 'p', 'x', 'y'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------------------------+ +Function lnWad(int256) ++-----------------------+---------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------+ +| x | ['k', 'x'] | +| r | ['k', 'p', 'q', 'r', 'x'] | +| k | [] | +| p | ['k', 'p', 'x'] | +| q | ['k', 'q', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------+ +Function mulDivDown(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function mulDivUp(uint256,uint256,uint256) ++-----------------------+---------------------------------------+ +| Variable | Dependencies | ++-----------------------+---------------------------------------+ +| x | ['x'] | +| y | ['WAD', 'y'] | +| denominator | ['WAD', 'y'] | +| z | ['WAD', 'denominator', 'x', 'y', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+---------------------------------------+ +Function rpow(uint256,uint256,uint256) ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +| x | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0'] | +| n | ['n'] | +| scalar | [] | +| z | ['half_rpow_asm_0', 'scalar', 'x', 'xxRound_rpow_asm_0', 'xx_rpow_asm_0', 'z', 'zxRound_rpow_asm_0', 'zx_rpow_asm_0'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+-----------------------------------------------------------------------------------------------------------------------+ +Function sqrt(uint256) ++-----------------------+----------------------------+ +| Variable | Dependencies | ++-----------------------+----------------------------+ +| x | [] | +| z | ['x', 'y_sqrt_asm_0', 'z'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+----------------------------+ +Function log2(uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| r | ['r', 'x'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeMod(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDiv(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function unsafeDivUp(uint256,uint256) ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| x | [] | +| y | [] | +| z | ['x', 'y'] | +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Function slitherConstructorConstantVariables() ++-----------------------+--------------+ +| Variable | Dependencies | ++-----------------------+--------------+ +| FixedPointMathLib.WAD | [] | ++-----------------------+--------------+ +Contract IBuyBackBurner ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function checkPoolPrices(address,address,address,uint24,uint256,bool) ++----------------------+--------------+ +| Variable | Dependencies | ++----------------------+--------------+ +| nativeToken | [] | +| memeToken | [] | +| uniV3PositionManager | [] | +| fee | [] | +| allowedDeviation | [] | +| isNativeFirst | [] | ++----------------------+--------------+ +Contract IERC20 ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function approve(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| spender | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function transfer(address,uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| to | [] | +| amount | [] | +| | [] | ++----------+--------------+ +Function burn(uint256) ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ +| amount | [] | ++----------+--------------+ +Contract MemeFactory ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['FEE_TIER', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'TUPLE_0', 'TUPLE_1', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256) ++------------------------------------+---------------------------+ +| Variable | Dependencies | ++------------------------------------+---------------------------+ +| _olas | ['_olas'] | +| _nativeToken | ['_nativeToken'] | +| _uniV3PositionManager | ['_uniV3PositionManager'] | +| _buyBackBurner | ['_buyBackBurner'] | +| _minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['_minNativeTokenValue'] | +| MemeFactory.olas | ['_olas'] | +| MemeFactory.nativeToken | ['_nativeToken'] | +| MemeFactory.uniV3PositionManager | ['_uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['_buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+---------------------------+ +Function _createUniswapPair(address,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| nativeTokenAmount | ['nativeAmountForLP'] | +| memeTokenAmount | ['memeAmountForLP'] | +| positionId | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| liquidity | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| isNativeFirst | ['isNativeFirst'] | +| token0 | ['memeToken', 'nativeToken', 'token0'] | +| token1 | ['memeToken', 'nativeToken', 'token1'] | +| amount0 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| amount1 | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| priceX96 | ['amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount'] | +| sqrtPriceX96 | ['FixedPointMathLib', 'amount0', 'amount1', 'memeAmountForLP', 'memeTokenAmount', 'nativeAmountForLP', 'nativeTokenAmount', 'priceX96'] | +| params | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeToken', 'nativeTokenAmount', 'this', 'token0', 'token1'] | +| nativeLeftovers | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | ['MIN_TICK'] | +| MemeFactory.MAX_TICK | ['MAX_TICK'] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['FEE_TIER', 'MAX_TICK', 'MIN_TICK', 'TUPLE_0', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeToken', 'memeTokenAmount', 'nativeAmountForLP', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'scheduledForAscendance', 'this', 'token0', 'token1', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectFees(address,uint256,bool) ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +| memeToken | [] | +| positionId | [] | +| isNativeFirst | [] | +| params | ['positionId', 'this'] | +| amount0 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| amount1 | ['TUPLE_1', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| nativeAmountForOLASBurn | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| memeAmountToBurn | ['TUPLE_1', 'amount0', 'amount1', 'memeAmountToBurn', 'params', 'positionId', 'this', 'uniV3PositionManager'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| MemeFactory.FEE_TIER | ['FEE_TIER'] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | ['uniV3PositionManager'] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['TUPLE_1', 'amount0', 'amount1', 'nativeAmountForOLASBurn', 'params', 'positionId', 'scheduledForAscendance', 'this', 'uniV3PositionManager'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ +Function _collectMemeToken(address,uint256,uint256,uint256,uint256) ++------------------------------------+------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+------------------------------------------------------------------------+ +| memeToken | ['memeToken'] | +| memeNonce | ['memeNonce'] | +| heartersAmount | ['heartersAmount'] | +| hearterContribution | ['hearterContribution'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| allocation | ['hearterContribution', 'heartersAmount', 'totalNativeTokenCommitted'] | +| memeTokenInstance | ['memeToken'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+------------------------------------------------------------------------+ +Function _launchCampaign() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| adjustedAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function _wrap(uint256) ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| nativeTokenAmount | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function summonThisMeme(string,string,uint256) ++------------------------------------+----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------------------------------------------+ +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeNonce | ['_nonce'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | ['minNativeTokenValue'] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'memeNonce'] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['block.timestamp', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+----------------------------------------------------------------------------------+ +Function heartThisMeme(uint256) ++------------------------------------+-------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| totalNativeTokenCommitted | ['memeSummon', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummon', 'memeSummons', 'msg.value', 'totalNativeTokenCommitted'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------------------------------------------------+ +Function _createThisMeme(uint256,string,string,uint256) ++------------------------------------+-----------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| name | [] | +| symbol | [] | +| totalSupply | [] | +| memeToken | ['DECIMALS', 'memeNonce', 'name', 'payload', 'symbol', 'totalSupply'] | +| randomNonce | ['block.prevrandao', 'block.timestamp', 'memeNonce', 'msg.sender', 'randomNonce'] | +| payload | ['DECIMALS', 'name', 'symbol', 'totalSupply'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | ['DECIMALS'] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-----------------------------------------------------------------------------------+ +Function unleashThisMeme(uint256) ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | [] | +| memeSummon | ['memeSummon'] | +| totalNativeTokenCommitted | ['memeSummon'] | +| nativeAmountForOLASBurn | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'totalNativeTokenCommitted'] | +| nativeAmountForLP | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['OLAS_BURN_PERCENTAGE', 'memeSummon', 'nativeAmountForOLASBurn', 'scheduledForAscendance', 'totalNativeTokenCommitted'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------------------------------------------------------------------------------------+ +Function _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| memeNonce | ['memeNonce'] | +| memeSummon | ['LP_PERCENTAGE', 'TUPLE_2', 'block.timestamp', 'heartersAmount', 'isNativeFirst', 'memeAmountForLP', 'memeSummon', 'positionId'] | +| nativeAmountForLP | ['nativeAmountForLP'] | +| totalNativeTokenCommitted | ['totalNativeTokenCommitted'] | +| nativeAmountForOLASBurn | ['nativeAmountForOLASBurn'] | +| memeAmountForLP | ['LP_PERCENTAGE', 'memeSummon'] | +| heartersAmount | ['LP_PERCENTAGE', 'memeAmountForLP', 'memeSummon'] | +| memeToken | [] | +| positionId | ['TUPLE_2'] | +| liquidity | ['TUPLE_2'] | +| isNativeFirst | ['TUPLE_2'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | ['memeToken', 'memeTokens'] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeNonce', 'memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | ['memeToken', 'memeTokens'] | ++------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +Function collectThisMeme(address) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| hearterContribution | ['memeHearters'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function purgeThisMeme(address) ++------------------------------------+--------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------------+ +| memeToken | [] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| memeTokenInstance | ['memeToken'] | +| remainingBalance | ['memeToken', 'memeTokenInstance', 'this'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | ['COLLECT_DELAY'] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------------+ +Function scheduleForAscendance() ++------------------------------------+--------------------------------------+ +| Variable | Dependencies | ++------------------------------------+--------------------------------------+ +| amount | ['amount', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | ['buyBackBurner'] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | ['_launched'] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------------------------------+ +Function collectFees(address[]) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| tokens | ['tokens'] | +| i | ['i'] | +| memeNonce | ['memeTokenNonces'] | +| memeSummon | ['memeSummon', 'memeSummons'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | ['_locked'] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | ['memeTokenNonces'] | +| MemeFactory.mapAccountActivities | ['mapAccountActivities'] | +| MemeFactory.memeTokens | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | ++------------------------------------+--------------+ +Contract IWETH ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ + +Function deposit() ++----------+--------------+ +| Variable | Dependencies | ++----------+--------------+ ++----------+--------------+ +Contract MemeBase ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable | Dependencies | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| VERSION | [] | +| MIN_TOTAL_SUPPLY | ['MIN_TOTAL_SUPPLY'] | +| UNLEASH_DELAY | ['UNLEASH_DELAY'] | +| COLLECT_DELAY | ['COLLECT_DELAY'] | +| OLAS_BURN_PERCENTAGE | ['OLAS_BURN_PERCENTAGE'] | +| LP_PERCENTAGE | ['LP_PERCENTAGE'] | +| MAX_ALLOWED_DEVIATION | ['MAX_ALLOWED_DEVIATION'] | +| FEE_TIER | ['FEE_TIER'] | +| MIN_TICK | ['MIN_TICK'] | +| MAX_TICK | ['MAX_TICK'] | +| DECIMALS | ['DECIMALS'] | +| minNativeTokenValue | ['_minNativeTokenValue', 'minNativeTokenValue'] | +| olas | ['_olas'] | +| nativeToken | ['_nativeToken', 'nativeToken'] | +| uniV3PositionManager | ['_uniV3PositionManager', 'uniV3PositionManager'] | +| buyBackBurner | ['_buyBackBurner', 'buyBackBurner'] | +| numTokens | ['memeToken', 'memeTokens'] | +| scheduledForAscendance | ['CONTRIBUTION_AGNT', 'FEE_TIER', 'LIQUIDITY_AGNT', 'LP_PERCENTAGE', 'MAX_TICK', 'MIN_TICK', 'OLAS_BURN_PERCENTAGE', 'SUMMON_AGNT', 'TUPLE_3', 'TUPLE_4', '_nativeToken', '_uniV3PositionManager', 'amount0', 'amount1', 'block.timestamp', 'memeAmountForLP', 'memeSummon', 'memeSummons', 'memeToken', 'memeTokenAmount', 'msg.value', 'name', 'nativeAmountForLP', 'nativeAmountForOLASBurn', 'nativeLeftovers', 'nativeToken', 'nativeTokenAmount', 'params', 'positionId', 'scheduledForAscendance', 'symbol', 'this', 'token0', 'token1', 'totalNativeTokenCommitted', 'totalSupply', 'uniV3PositionManager'] | +| _nonce | ['_nonce', 'launchCampaignNonce', 'memeNonce'] | +| _locked | ['_locked'] | +| _launched | ['_launched'] | +| memeSummons | ['CONTRIBUTION_AGNT', 'SUMMON_AGNT', 'block.timestamp', 'memeSummon', 'memeSummons', 'msg.value', 'name', 'symbol', 'totalNativeTokenCommitted', 'totalSupply'] | +| memeHearters | ['memeHearters'] | +| memeTokenNonces | ['launchCampaignNonce', 'memeNonce', 'memeTokenNonces'] | +| mapAccountActivities | ['mapAccountActivities'] | +| memeTokens | ['memeToken', 'memeTokens'] | +| CONTRIBUTION_AGNT | ['CONTRIBUTION_AGNT'] | +| LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| SUMMON_AGNT | ['SUMMON_AGNT'] | +| launchCampaignNonce | ['_nonce', 'launchCampaignNonce'] | ++------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Function constructor(address,address,address,address,uint256,address[],uint256[]) ++------------------------------------+-----------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------+ +| _olas | [] | +| _nativeToken | [] | +| _uniV3PositionManager | [] | +| _buyBackBurner | [] | +| _minNativeTokenValue | [] | +| accounts | ['accounts'] | +| amounts | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | ['_nonce', 'launchCampaignNonce'] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.SUMMON_AGNT | [] | +| MemeBase.launchCampaignNonce | ['_nonce'] | ++------------------------------------+-----------------------------------+ +Function _launchCampaignSetup(address[],uint256[]) ++------------------------------------+-----------------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+-----------------------------------------------------+ +| accounts | ['accounts'] | +| amounts | ['amounts'] | +| totalAmount | ['amounts', 'totalAmount'] | +| i | ['i'] | +| adjustedAmount | ['amounts', 'totalAmount'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['CONTRIBUTION_AGNT', 'SUMMON_AGNT', 'memeSummons'] | +| MemeFactory.memeHearters | ['memeHearters'] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | ['CONTRIBUTION_AGNT'] | +| MemeBase.LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| MemeBase.SUMMON_AGNT | ['SUMMON_AGNT'] | +| MemeBase.launchCampaignNonce | ['launchCampaignNonce'] | ++------------------------------------+-----------------------------------------------------+ +Function _MAGA() ++------------------------------------+-------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------+ +| memeSummon | [] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | ['memeSummons'] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | ['CONTRIBUTION_AGNT'] | +| MemeBase.LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| MemeBase.SUMMON_AGNT | [] | +| MemeBase.launchCampaignNonce | ['launchCampaignNonce'] | ++------------------------------------+-------------------------+ +Function _launchCampaign() ++------------------------------------+----------------------------------------------+ +| Variable | Dependencies | ++------------------------------------+----------------------------------------------+ +| adjustedAmount | ['LIQUIDITY_AGNT', 'scheduledForAscendance'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | ['scheduledForAscendance'] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | ['LIQUIDITY_AGNT'] | +| MemeBase.SUMMON_AGNT | [] | +| MemeBase.launchCampaignNonce | [] | ++------------------------------------+----------------------------------------------+ +Function _wrap(uint256) ++------------------------------------+-------------------------------+ +| Variable | Dependencies | ++------------------------------------+-------------------------------+ +| nativeTokenAmount | ['totalNativeTokenCommitted'] | +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | ['nativeToken'] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.SUMMON_AGNT | [] | +| MemeBase.launchCampaignNonce | [] | ++------------------------------------+-------------------------------+ +Function slitherConstructorVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.SUMMON_AGNT | [] | +| MemeBase.launchCampaignNonce | [] | ++------------------------------------+--------------+ +Function slitherConstructorConstantVariables() ++------------------------------------+--------------+ +| Variable | Dependencies | ++------------------------------------+--------------+ +| MemeFactory.VERSION | [] | +| MemeFactory.MIN_TOTAL_SUPPLY | [] | +| MemeFactory.UNLEASH_DELAY | [] | +| MemeFactory.COLLECT_DELAY | [] | +| MemeFactory.OLAS_BURN_PERCENTAGE | [] | +| MemeFactory.LP_PERCENTAGE | [] | +| MemeFactory.MAX_ALLOWED_DEVIATION | [] | +| MemeFactory.FEE_TIER | [] | +| MemeFactory.MIN_TICK | [] | +| MemeFactory.MAX_TICK | [] | +| MemeFactory.DECIMALS | [] | +| MemeFactory.minNativeTokenValue | [] | +| MemeFactory.olas | [] | +| MemeFactory.nativeToken | [] | +| MemeFactory.uniV3PositionManager | [] | +| MemeFactory.buyBackBurner | [] | +| MemeFactory.numTokens | [] | +| MemeFactory.scheduledForAscendance | [] | +| MemeFactory._nonce | [] | +| MemeFactory._locked | [] | +| MemeFactory._launched | [] | +| MemeFactory.memeSummons | [] | +| MemeFactory.memeHearters | [] | +| MemeFactory.memeTokenNonces | [] | +| MemeFactory.mapAccountActivities | [] | +| MemeFactory.memeTokens | [] | +| MemeBase.CONTRIBUTION_AGNT | [] | +| MemeBase.LIQUIDITY_AGNT | [] | +| MemeBase.SUMMON_AGNT | [] | +| MemeBase.launchCampaignNonce | [] | ++------------------------------------+--------------+ +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_full.txt b/audits/internal3/analysis/slither_full.txt new file mode 100644 index 0000000..867f70c --- /dev/null +++ b/audits/internal3/analysis/slither_full.txt @@ -0,0 +1,2 @@ +Removed all false positive + diff --git a/audits/internal3/analysis/slither_function-summary.txt b/audits/internal3/analysis/slither_function-summary.txt new file mode 100644 index 0000000..65814e9 --- /dev/null +++ b/audits/internal3/analysis/slither_function-summary.txt @@ -0,0 +1,1375 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +Contract IMemeFactory +Contract vars: [] +Inheritance:: [] + ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| mapAccountActivities(address) | external | [] | [] | [] | [] | [] | 2 | ++-------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeActivityChecker +Contract vars: ['livenessRatio', 'memeFactory'] +Inheritance:: [] + ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ +| constructor(address,uint256) | public | [] | [] | ['livenessRatio', 'memeFactory'] | ['revert ZeroAddress()', 'revert ZeroValue()'] | [] | 3 | +| getMultisigNonces(address) | external | [] | ['memeFactory'] | [] | [] | ['IMemeFactory(memeFactory).mapAccountActivities(multisig)', 'new uint256[](1)'] | 1 | +| isRatioPass(uint256[],uint256[],uint256) | external | [] | ['livenessRatio'] | [] | [] | [] | 2 | ++------------------------------------------+------------+-----------+-------------------+----------------------------------+------------------------------------------------+----------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract BuyBackBurnerProxy +Contract vars: ['BUY_BACK_BURNER_PROXY'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------------------------+---------------------------+----------------------------------------------------------------------------+----------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------------------------+---------------------------+----------------------------------------------------------------------------+----------------------------------------------------+-----------------------+ +| constructor(address,bytes) | public | [] | ['BUY_BACK_BURNER_PROXY'] | [] | ['revert InitializationFailed()', 'revert ZeroData()'] | ['implementation.delegatecall(buyBackBurnerData)'] | 4 | +| | | | | | ['revert ZeroImplementationAddress()', 'sstore(uint256,uint256)'] | | | +| fallback() | external | [] | ['BUY_BACK_BURNER_PROXY'] | [] | ['calldatacopy(uint256,uint256,uint256)', 'calldatasize()'] | [] | 2 | +| | | | | | ['delegatecall(uint256,uint256,uint256,uint256,uint256,uint256)', 'gas()'] | | | +| | | | | | ['return(uint256,uint256)', 'returndatacopy(uint256,uint256,uint256)'] | | | +| | | | | | ['returndatasize()', 'revert(uint256,uint256)'] | | | +| | | | | | ['sload(uint256)'] | | | +| slitherConstructorConstantVariables() | internal | [] | [] | ['BUY_BACK_BURNER_PROXY'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------------------------+---------------------------+----------------------------------------------------------------------------+----------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | +| getPool(address,address,uint24) | external | [] | [] | [] | [] | [] | 2 | +| slot0() | external | [] | [] | [] | [] | [] | 2 | +| observe(uint32[]) | external | [] | [] | [] | [] | [] | 2 | +| factory() | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBuyBackBurner +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| checkPoolPrices(address,address,address,uint24,uint256,bool) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeCelo +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens'] +Inheritance:: ['MemeFactory'] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| constructor(address,address,address,address,uint256) | public | [] | [] | [] | ['constructor'] | [] | 1 | +| _launchCampaign() | internal | [] | ['scheduledForAscendance'] | [] | [] | [] | 1 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | +| getPool(address,address,uint24) | external | [] | [] | [] | [] | [] | 2 | +| slot0() | external | [] | [] | [] | [] | [] | 2 | +| observe(uint32[]) | external | [] | [] | [] | [] | [] | 2 | +| factory() | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract TickMath +Contract vars: ['MIN_TICK', 'MAX_TICK', 'MIN_SQRT_RATIO', 'MAX_SQRT_RATIO'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+--------------------------------------+--------------------------------+--------------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+--------------------------------------+--------------------------------+--------------------------------------+----------------+-----------------------+ +| getSqrtRatioAtTick(int24) | internal | [] | ['MAX_TICK'] | [] | ['revert T()'] | [] | 25 | +| getTickAtSqrtRatio(uint160) | internal | [] | ['MAX_SQRT_RATIO', 'MIN_SQRT_RATIO'] | [] | ['getSqrtRatioAtTick', 'revert R()'] | [] | 5 | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['MAX_SQRT_RATIO', 'MAX_TICK'] | [] | [] | 1 | +| | | | | ['MIN_SQRT_RATIO', 'MIN_TICK'] | | | | ++---------------------------------------+------------+-----------+--------------------------------------+--------------------------------+--------------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract BuyBackBurner +Contract vars: ['VERSION', 'BUY_BACK_BURNER_PROXY', 'OLAS_BURNER', 'SECONDS_AGO', 'owner'] +Inheritance:: [] + ++--------------------------------------------------------------+------------+-----------+-----------------------------------------+------------------------------------------+---------------------------------------------------------------+---------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------+------------+-----------+-----------------------------------------+------------------------------------------+---------------------------------------------------------------+---------------------------------------------------------------------------------------+-----------------------+ +| _getTwapFromOracle(address) | internal | [] | ['SECONDS_AGO'] | [] | [] | ['IUniswapV3(pool).observe(secondsAgos)', 'TickMath.getSqrtRatioAtTick(averageTick)'] | 1 | +| | | | | | | ['new uint32[](2)'] | | +| initialize() | external | [] | ['msg.sender', 'owner'] | ['owner'] | ['revert AlreadyInitialized()'] | [] | 2 | +| changeImplementation(address) | external | [] | ['BUY_BACK_BURNER_PROXY', 'msg.sender'] | [] | ['revert OwnerOnly(address,address)', 'revert ZeroAddress()'] | [] | 3 | +| | | | ['owner'] | | ['sstore(uint256,uint256)'] | | | +| changeOwner(address) | external | [] | ['msg.sender', 'owner'] | ['owner'] | ['revert OwnerOnly(address,address)', 'revert ZeroAddress()'] | [] | 3 | +| checkPoolPrices(address,address,address,uint24,uint256,bool) | external | [] | [] | [] | ['_getTwapFromOracle', 'require(bool,string)'] | ['IUniswapV3(factory).getPool(token0,token1,fee)', 'IUniswapV3(pool).slot0()'] | 4 | +| | | | | | | ['IUniswapV3(uniV3PositionManager).factory()'] | | +| slitherConstructorConstantVariables() | internal | [] | [] | ['BUY_BACK_BURNER_PROXY', 'OLAS_BURNER'] | [] | [] | 1 | +| | | | | ['SECONDS_AGO', 'VERSION'] | | | | ++--------------------------------------------------------------+------------+-----------+-----------------------------------------+------------------------------------------+---------------------------------------------------------------+---------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | +| getPool(address,address,uint24) | external | [] | [] | [] | [] | [] | 2 | +| slot0() | external | [] | [] | [] | [] | [] | 2 | +| observe(uint32[]) | external | [] | [] | [] | [] | [] | 2 | +| factory() | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBuyBackBurner +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| checkPoolPrices(address,address,address,uint24,uint256,bool) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeArbitrum +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens'] +Inheritance:: ['MemeFactory'] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| constructor(address,address,address,address,uint256) | public | [] | [] | [] | ['constructor'] | [] | 1 | +| _launchCampaign() | internal | [] | ['scheduledForAscendance'] | [] | [] | [] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------[0m------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | +| getPool(address,address,uint24) | external | [] | [] | [] | [] | [] | 2 | +| slot0() | external | [] | [] | [] | [] | [] | 2 | +| observe(uint32[]) | external | [] | [] | [] | [] | [] | 2 | +| factory() | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBuyBackBurner +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| checkPoolPrices(address,address,address,uint24,uint256,bool) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract ERC20 +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: [] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract Meme +Contract vars: ['name', 'symbol', 'decimals', 'totalSupply', 'balanceOf', 'allowance', 'INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'nonces'] +Inheritance:: ['ERC20'] + ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(string,string,uint8) | internal | [] | ['block.chainid'] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | ['computeDomainSeparator'] | [] | 1 | +| | | | | ['decimals', 'name'] | | | | +| | | | | ['symbol'] | | | | +| approve(address,uint256) | public | [] | ['msg.sender'] | ['allowance'] | [] | [] | 1 | +| transfer(address,uint256) | public | [] | ['balanceOf', 'msg.sender'] | ['balanceOf'] | [] | [] | 1 | +| transferFrom(address,address,uint256) | public | [] | ['allowance', 'balanceOf'] | ['allowance', 'balanceOf'] | [] | [] | 2 | +| | | | ['msg.sender'] | | | | | +| permit(address,address,uint256,uint256,uint8,bytes32,bytes32) | public | [] | ['block.timestamp', 'nonces'] | ['allowance', 'nonces'] | ['DOMAIN_SEPARATOR', 'abi.encode()'] | ['abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)', 'abi.encodePacked(\x19\x01,DOMAIN_SEPARATOR(),keccak256(bytes)(abi.encode(keccak256(bytes)(Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)),owner,spender,value,nonces[owner] ++,deadline)))'] | 1 | +| | | | | | ['abi.encodePacked()', 'ecrecover(bytes32,uint8,bytes32,bytes32)'] | | | +| | | | | | ['keccak256(bytes)', 'require(bool,string)'] | | | +| DOMAIN_SEPARATOR() | public | [] | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR'] | [] | ['computeDomainSeparator'] | [] | 1 | +| | | | ['block.chainid'] | | | | | +| computeDomainSeparator() | internal | [] | ['block.chainid', 'name'] | [] | ['abi.encode()', 'keccak256(bytes)'] | ['abi.encode(keccak256(bytes)(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)),keccak256(bytes)(bytes(name)),keccak256(bytes)(1),block.chainid,address(this))'] | 1 | +| | | | ['this'] | | | | | +| _mint(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| _burn(address,uint256) | internal | [] | ['balanceOf', 'totalSupply'] | ['balanceOf', 'totalSupply'] | [] | [] | 1 | +| constructor(string,string,uint8,uint256) | public | [] | ['msg.sender'] | [] | ['_mint', 'constructor'] | [] | 1 | +| burn(uint256) | external | [] | ['msg.sender'] | [] | ['_burn'] | [] | 1 | ++---------------------------------------------------------------+------------+-----------+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IUniswapV3 +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| createAndInitializePoolIfNecessary(address,address,uint24,uint160) | external | [] | [] | [] | [] | [] | 2 | +| mint(IUniswapV3.MintParams) | external | [] | [] | [] | [] | [] | 2 | +| collect(IUniswapV3.CollectParams) | external | [] | [] | [] | [] | [] | 2 | +| getPool(address,address,uint24) | external | [] | [] | [] | [] | [] | 2 | +| slot0() | external | [] | [] | [] | [] | [] | 2 | +| observe(uint32[]) | external | [] | [] | [] | [] | [] | 2 | +| factory() | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract FixedPointMathLib +Contract vars: ['WAD'] +Inheritance:: [] + ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ +| mulWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| mulWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| divWadDown(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivDown'] | [] | 1 | +| divWadUp(uint256,uint256) | internal | [] | ['WAD'] | [] | ['mulDivUp'] | [] | 1 | +| powWad(int256,int256) | internal | [] | ['WAD'] | [] | ['expWad', 'lnWad'] | [] | 1 | +| expWad(int256) | internal | [] | [] | [] | ['revert(string)'] | [] | 2 | +| lnWad(int256) | internal | [] | [] | [] | ['log2', 'require(bool,string)'] | [] | 1 | +| mulDivDown(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| mulDivUp(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 2 | +| rpow(uint256,uint256,uint256) | internal | [] | [] | [] | ['revert(uint256,uint256)'] | [] | 11 | +| sqrt(uint256) | internal | [] | [] | [] | [] | [] | 5 | +| log2(uint256) | internal | [] | [] | [] | ['require(bool,string)'] | [] | 1 | +| unsafeMod(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDiv(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| unsafeDivUp(uint256,uint256) | internal | [] | [] | [] | [] | [] | 1 | +| slitherConstructorConstantVariables() | internal | [] | [] | ['WAD'] | [] | [] | 1 | ++---------------------------------------+------------+-----------+---------+---------+----------------------------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IBuyBackBurner +Contract vars: [] +Inheritance:: [] + ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| checkPoolPrices(address,address,address,uint24,uint256,bool) | external | [] | [] | [] | [] | [] | 2 | ++--------------------------------------------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IERC20 +Contract vars: [] +Inheritance:: [] + ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| approve(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| transfer(address,uint256) | external | [] | [] | [] | [] | [] | 2 | +| burn(uint256) | external | [] | [] | [] | [] | [] | 2 | ++---------------------------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeFactory +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens'] +Inheritance:: [] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'DECIMALS'] | [] | [] | 1 | +| | | | | ['FEE_TIER', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | | | | +| | | | | ['VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract IWETH +Contract vars: [] +Inheritance:: [] + ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ +| deposit() | external | [] | [] | [] | [] | [] | 2 | ++-----------+------------+-----------+------+-------+----------------+----------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Printers: +Contract MemeBase +Contract vars: ['VERSION', 'MIN_TOTAL_SUPPLY', 'UNLEASH_DELAY', 'COLLECT_DELAY', 'OLAS_BURN_PERCENTAGE', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'FEE_TIER', 'MIN_TICK', 'MAX_TICK', 'DECIMALS', 'minNativeTokenValue', 'olas', 'nativeToken', 'uniV3PositionManager', 'buyBackBurner', 'numTokens', 'scheduledForAscendance', '_nonce', '_locked', '_launched', 'memeSummons', 'memeHearters', 'memeTokenNonces', 'mapAccountActivities', 'memeTokens', 'CONTRIBUTION_AGNT', 'LIQUIDITY_AGNT', 'SUMMON_AGNT', 'launchCampaignNonce'] +Inheritance:: ['MemeFactory'] + ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| Function | Visibility | Modifiers | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ +| constructor(address,address,address,address,uint256) | internal | [] | [] | ['buyBackBurner', 'minNativeTokenValue'] | [] | [] | 1 | +| | | | | ['nativeToken', 'olas'] | | | | +| | | | | ['uniV3PositionManager'] | | | | +| _createUniswapPair(address,uint256,uint256) | internal | [] | ['FEE_TIER', 'MAX_TICK'] | ['scheduledForAscendance'] | [] | ['FixedPointMathLib.sqrt(priceX96)', 'IERC20(token0).approve(uniV3PositionManager,amount0)'] | 5 | +| | | | ['MIN_TICK', 'block.timestamp'] | | | ['IERC20(token1).approve(uniV3PositionManager,amount1)', 'IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0,token1,FEE_TIER,sqrtPriceX96)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | ['IUniswapV3(uniV3PositionManager).mint(params)', 'IUniswapV3.MintParams(token0,token1,FEE_TIER,MIN_TICK,MAX_TICK,amount0,amount1,0,0,address(this),block.timestamp)'] | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectFees(address,uint256,bool) | internal | [] | ['FEE_TIER', 'MAX_ALLOWED_DEVIATION'] | ['scheduledForAscendance'] | [] | ['IBuyBackBurner(buyBackBurner).checkPoolPrices(nativeToken,memeToken,uniV3PositionManager,FEE_TIER,MAX_ALLOWED_DEVIATION,isNativeFirst)', 'IERC20(memeToken).burn(memeAmountToBurn)'] | 2 | +| | | | ['buyBackBurner', 'msg.sender'] | | | ['IUniswapV3(uniV3PositionManager).collect(params)', 'IUniswapV3.CollectParams(positionId,address(this),type()(uint128).max,type()(uint128).max)'] | | +| | | | ['nativeToken', 'scheduledForAscendance'] | | | | | +| | | | ['this', 'uniV3PositionManager'] | | | | | +| _collectMemeToken(address,uint256,uint256,uint256,uint256) | internal | [] | ['msg.sender'] | ['memeHearters'] | [] | ['memeTokenInstance.transfer(msg.sender,allocation)'] | 1 | +| _launchCampaign() | internal | [] | [] | [] | [] | [] | 2 | +| _wrap(uint256) | internal | [] | [] | [] | [] | [] | 2 | +| summonThisMeme(string,string,uint256) | external | [] | ['MIN_TOTAL_SUPPLY', '_locked'] | ['_locked', '_nonce'] | ['require(bool,string)'] | [] | 1 | +| | | | ['_nonce', 'block.timestamp'] | ['mapAccountActivities', 'memeHearters'] | | | | +| | | | ['mapAccountActivities', 'minNativeTokenValue'] | ['memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| heartThisMeme(uint256) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | [] | 1 | +| | | | ['memeHearters', 'memeSummons'] | ['memeHearters', 'memeSummons'] | | | | +| | | | ['msg.sender', 'msg.value'] | | | | | +| _createThisMeme(uint256,string,string,uint256) | internal | [] | ['DECIMALS', 'block.prevrandao'] | [] | ['abi.encode()', 'abi.encodePacked()'] | ['abi.encode(name,symbol,DECIMALS,totalSupply)', 'abi.encodePacked(block.timestamp,block.prevrandao,msg.sender,memeNonce)'] | 1 | +| | | | ['block.timestamp', 'msg.sender'] | | ['create2(uint256,uint256,uint256,uint256)', 'keccak256(bytes)'] | ['abi.encodePacked(randomNonce)', 'abi.encodePacked(type()(Meme).creationCode,abi.encode(name,symbol,DECIMALS,totalSupply))'] | | +| | | | | | ['mload(uint256)', 'require(bool,string)'] | | | +| | | | | | ['type()'] | | | +| unleashThisMeme(uint256) | external | [] | ['OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY'] | ['_locked', 'scheduledForAscendance'] | ['_unleashThisMeme', '_wrap'] | [] | 1 | +| | | | ['_locked', 'block.timestamp'] | | ['require(bool,string)'] | | | +| | | | ['memeSummons', 'scheduledForAscendance'] | | | | | +| _unleashThisMeme(uint256,MemeFactory.MemeSummon,uint256,uint256,uint256) | internal | [] | ['LP_PERCENTAGE', 'block.timestamp'] | ['mapAccountActivities', 'memeTokenNonces'] | ['_collectMemeToken', '_createThisMeme'] | ['memeTokens.push(memeToken)'] | 3 | +| | | | ['mapAccountActivities', 'memeHearters'] | ['memeTokens', 'numTokens'] | ['_createUniswapPair'] | | | +| | | | ['memeTokens', 'msg.sender'] | | | | | +| collectThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_collectMemeToken', 'require(bool,string)'] | [] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeHearters', 'memeSummons'] | | | | | +| | | | ['memeTokenNonces', 'msg.sender'] | | | | | +| purgeThisMeme(address) | external | [] | ['COLLECT_DELAY', '_locked'] | ['_locked', 'mapAccountActivities'] | ['require(bool,string)'] | ['memeTokenInstance.balanceOf(address(this))', 'memeTokenInstance.burn(remainingBalance)'] | 1 | +| | | | ['block.timestamp', 'mapAccountActivities'] | | | | | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender', 'this'] | | | | | +| scheduleForAscendance() | external | [] | ['_launched', '_locked'] | ['_locked', 'mapAccountActivities'] | ['_launchCampaign', 'require(bool,string)'] | ['IERC20(nativeToken).transfer(buyBackBurner,amount)'] | 3 | +| | | | ['buyBackBurner', 'mapAccountActivities'] | ['scheduledForAscendance'] | | | | +| | | | ['msg.sender', 'nativeToken'] | | | | | +| | | | ['scheduledForAscendance'] | | | | | +| collectFees(address[]) | external | [] | ['_locked', 'mapAccountActivities'] | ['_locked', 'mapAccountActivities'] | ['_collectFees', 'require(bool,string)'] | [] | 2 | +| | | | ['memeSummons', 'memeTokenNonces'] | | | | | +| | | | ['msg.sender'] | | | | | +| constructor(address,address,address,address,uint256,address[],uint256[]) | public | [] | ['_nonce', 'launchCampaignNonce'] | ['_launched', '_nonce'] | ['_launchCampaignSetup', 'constructor'] | [] | 2 | +| | | | | ['launchCampaignNonce'] | | | | +| _launchCampaignSetup(address[],uint256[]) | private | [] | ['CONTRIBUTION_AGNT', 'LIQUIDITY_AGNT'] | ['memeHearters', 'memeSummons'] | ['require(bool)', 'require(bool,string)'] | [] | 2 | +| | | | ['SUMMON_AGNT', 'launchCampaignNonce'] | | | | | +| _MAGA() | private | [] | ['CONTRIBUTION_AGNT', 'LIQUIDITY_AGNT'] | [] | ['_unleashThisMeme'] | [] | 1 | +| | | | ['launchCampaignNonce', 'memeSummons'] | | | | | +| _launchCampaign() | internal | [] | ['LIQUIDITY_AGNT', 'scheduledForAscendance'] | ['_launched'] | ['_MAGA', 'require(bool,string)'] | [] | 1 | +| _wrap(uint256) | internal | [] | ['nativeToken'] | [] | [] | ['IWETH(nativeToken).deposit{value: nativeTokenAmount}()'] | 1 | +| slitherConstructorVariables() | internal | [] | [] | ['_launched', '_locked'] | [] | [] | 1 | +| | | | | ['_nonce'] | | | | +| slitherConstructorConstantVariables() | internal | [] | ['MIN_TICK'] | ['COLLECT_DELAY', 'CONTRIBUTION_AGNT'] | [] | [] | 1 | +| | | | | ['DECIMALS', 'FEE_TIER'] | | | | +| | | | | ['LIQUIDITY_AGNT', 'LP_PERCENTAGE'] | | | | +| | | | | ['MAX_ALLOWED_DEVIATION', 'MAX_TICK'] | | | | +| | | | | ['MIN_TICK', 'MIN_TOTAL_SUPPLY'] | | | | +| | | | | ['OLAS_BURN_PERCENTAGE', 'SUMMON_AGNT'] | | | | +| | | | | ['UNLEASH_DELAY', 'VERSION'] | | | | ++--------------------------------------------------------------------------+------------+-----------+-------------------------------------------------+---------------------------------------------+------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+ + ++-----------+------------+------+-------+----------------+----------------+-----------------------+ +| Modifiers | Visibility | Read | Write | Internal Calls | External Calls | Cyclomatic Complexity | ++-----------+------------+------+-------+----------------+----------------+-----------------------+ ++-----------+------------+------+-------+----------------+----------------+-----------------------+ + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_human-summary.txt b/audits/internal3/analysis/slither_human-summary.txt new file mode 100644 index 0000000..be66b22 --- /dev/null +++ b/audits/internal3/analysis/slither_human-summary.txt @@ -0,0 +1,237 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 34 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 2 +Number of low issues: 0 +Number of medium issues: 0 +Number of high issues: 0 + + ++---------------------+-------------+------+------------+--------------+----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++---------------------+-------------+------+------------+--------------+----------+ +| IMemeFactory | 1 | | | No | | +| MemeActivityChecker | 3 | | | No | | ++---------------------+-------------+------+------------+--------------+----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 1 +Source lines of code (SLOC) in source files: 34 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 5 +Number of low issues: 0 +Number of medium issues: 1 +Number of high issues: 2 + ++--------------------+-------------+------+------------+--------------+--------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++--------------------+-------------+------+------------+--------------+--------------+ +| BuyBackBurnerProxy | 3 | | | No | Receive ETH | +| | | | | | Delegatecall | +| | | | | | Assembly | +| | | | | | Proxy | ++--------------------+-------------+------+------------+--------------+--------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 2 +Source lines of code (SLOC) in source files: 133 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 5 +Number of low issues: 1 +Number of medium issues: 0 +Number of high issues: 0 + +ERCs: ERC20, ERC2612 + ++------+-------------+---------------+--------------------+--------------+-----------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++------+-------------+---------------+--------------------+--------------+-----------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | ++------+-------------+---------------+--------------------+--------------+-----------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 8 +Source lines of code (SLOC) in source files: 683 +Number of assembly lines: 0 +Number of optimization issues: 1 +Number of informational issues: 48 +Number of low issues: 17 +Number of medium issues: 23 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 7 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IBuyBackBurner | 1 | | | No | | +| IERC20 | 3 | | | No | | +| MemeCelo | 20 | | | No | Receive ETH | +| | | | | | Tokens interaction | +| | | | | | Assembly | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 3 +Source lines of code (SLOC) in source files: 293 +Number of assembly lines: 0 +Number of optimization issues: 0 +Number of informational issues: 10 +Number of low issues: 0 +Number of medium issues: 6 +Number of high issues: 1 + ++---------------+-------------+------+------------+--------------+-------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++---------------+-------------+------+------------+--------------+-------------+ +| IUniswapV3 | 7 | | | No | Receive ETH | +| TickMath | 3 | | | Yes | Assembly | +| BuyBackBurner | 6 | | | No | Assembly | ++---------------+-------------+------+------------+--------------+-------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 9 +Source lines of code (SLOC) in source files: 688 +Number of assembly lines: 0 +Number of optimization issues: 1 +Number of informational issues: 48 +Number of low issues: 17 +Number of medium issues: 22 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 7 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IBuyBackBurner | 1 | | | No | | +| IERC20 | 3 | | | No | | +| IWETH | 1 | | | No | Receive ETH | +| MemeArbitrum | 20 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | +| | | | | | Assembly | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 7 +Source lines of code (SLOC) in source files: 670 +Number of assembly lines: 0 +Number of optimization issues: 3 +Number of informational issues: 49 +Number of low issues: 17 +Number of medium issues: 23 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 7 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IBuyBackBurner | 1 | | | No | | +| IERC20 | 3 | | | No | | +| MemeFactory | 17 | | | No | Receive ETH | +| | | | | | Tokens interaction | +| | | | | | Assembly | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Printers: +Compiled with solc +Total number of contracts in source files: 9 +Source lines of code (SLOC) in source files: 723 +Number of assembly lines: 0 +Number of optimization issues: 1 +Number of informational issues: 52 +Number of low issues: 19 +Number of medium issues: 22 +Number of high issues: 2 +ERCs: ERC20, ERC2612 + ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Name | # functions | ERCS | ERC20 info | Complex code | Features | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +| Meme | 11 | ERC20,ERC2612 | No Minting | No | Ecrecover | +| | | | Approve Race Cond. | | | +| | | | | | | +| IUniswapV3 | 7 | | | No | Receive ETH | +| FixedPointMathLib | 16 | | | Yes | Assembly | +| IBuyBackBurner | 1 | | | No | | +| IERC20 | 3 | | | No | | +| IWETH | 1 | | | No | Receive ETH | +| MemeBase | 22 | | | No | Receive ETH | +| | | | | | Send ETH | +| | | | | | Tokens interaction | +| | | | | | Assembly | ++-------------------+-------------+---------------+--------------------+--------------+--------------------+ +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_inheritance-graph.txt b/audits/internal3/analysis/slither_inheritance-graph.txt new file mode 100644 index 0000000..c62a2b1 --- /dev/null +++ b/audits/internal3/analysis/slither_inheritance-graph.txt @@ -0,0 +1,70 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers:Inheritance Graph: ./MemeActivityChecker-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./BuyBackBurnerProxy-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./Meme.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeCelo-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./BuyBackBurner-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeArbitrum-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeFactory-flatten.sol.inheritance-graph.dot + +INFO:Printers:Inheritance Graph: ./MemeBase-flatten.sol.inheritance-graph.dot + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_inheritance.txt b/audits/internal3/analysis/slither_inheritance.txt new file mode 100644 index 0000000..fc1669d --- /dev/null +++ b/audits/internal3/analysis/slither_inheritance.txt @@ -0,0 +1,282 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ IMemeFactory + ++ MemeActivityChecker + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ IMemeFactory + ++ MemeActivityChecker + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ BuyBackBurnerProxy + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ BuyBackBurnerProxy + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + ++ MemeCelo + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + -> MemeCelo + ++ MemeCelo + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ IUniswapV3 + ++ TickMath + ++ BuyBackBurner + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ IUniswapV3 + ++ TickMath + ++ BuyBackBurner + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + ++ IWETH + ++ MemeArbitrum + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + -> MemeArbitrum + ++ IWETH + ++ MemeArbitrum + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + +INFO:Printers:Inheritance +Child_Contract -> Immediate_Base_Contracts [Not_Immediate_Base_Contracts] ++ ERC20 + ++ Meme + -> ERC20 + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + ++ IWETH + ++ MemeBase + -> MemeFactory + + +Base_Contract -> Immediate_Child_Contracts + [Not_Immediate_Child_Contracts] + ++ ERC20 + -> Meme + ++ Meme + ++ IUniswapV3 + ++ FixedPointMathLib + ++ IBuyBackBurner + ++ IERC20 + ++ MemeFactory + -> MemeBase + ++ IWETH + ++ MemeBase + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_modifiers.txt b/audits/internal3/analysis/slither_modifiers.txt new file mode 100644 index 0000000..ec8d890 --- /dev/null +++ b/audits/internal3/analysis/slither_modifiers.txt @@ -0,0 +1,519 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +Contract IMemeFactory ++----------------------+-----------+ +| Function | Modifiers | ++----------------------+-----------+ +| mapAccountActivities | [] | ++----------------------+-----------+ +INFO:Printers: +Contract MemeActivityChecker ++-------------------+-----------+ +| Function | Modifiers | ++-------------------+-----------+ +| constructor | [] | +| getMultisigNonces | [] | +| isRatioPass | [] | ++-------------------+-----------+ +INFO:Printers: +Contract BuyBackBurnerProxy ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| fallback | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | +| getPool | [] | +| slot0 | [] | +| observe | [] | +| factory | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-----------+ +| Function | Modifiers | ++-----------------+-----------+ +| checkPoolPrices | [] | ++-----------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeCelo ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collectMemeToken | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| _createThisMeme | [] | +| unleashThisMeme | [] | +| _unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| constructor | [] | +| _launchCampaign | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | +| getPool | [] | +| slot0 | [] | +| observe | [] | +| factory | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract TickMath ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| getSqrtRatioAtTick | [] | +| getTickAtSqrtRatio | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract BuyBackBurner ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| _getTwapFromOracle | [] | +| initialize | [] | +| changeImplementation | [] | +| changeOwner | [] | +| checkPoolPrices | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | +| getPool | [] | +| slot0 | [] | +| observe | [] | +| factory | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-----------+ +| Function | Modifiers | ++-----------------+-----------+ +| checkPoolPrices | [] | ++-----------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeArbitrum ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collectMemeToken | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| _createThisMeme | [] | +| unleashThisMeme | [] | +| _unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| constructor | [] | +| _launchCampaign | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | +| getPool | [] | +| slot0 | [] | +| observe | [] | +| factory | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-----------+ +| Function | Modifiers | ++-----------------+-----------+ +| checkPoolPrices | [] | ++-----------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeFactory ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collectMemeToken | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| _createThisMeme | [] | +| unleashThisMeme | [] | +| _unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract Meme ++------------------------+-----------+ +| Function | Modifiers | ++------------------------+-----------+ +| constructor | [] | +| approve | [] | +| transfer | [] | +| transferFrom | [] | +| permit | [] | +| DOMAIN_SEPARATOR | [] | +| computeDomainSeparator | [] | +| _mint | [] | +| _burn | [] | +| constructor | [] | +| burn | [] | ++------------------------+-----------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-----------+ +| Function | Modifiers | ++------------------------------------+-----------+ +| createAndInitializePoolIfNecessary | [] | +| mint | [] | +| collect | [] | +| getPool | [] | +| slot0 | [] | +| observe | [] | +| factory | [] | ++------------------------------------+-----------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| mulWadDown | [] | +| mulWadUp | [] | +| divWadDown | [] | +| divWadUp | [] | +| powWad | [] | +| expWad | [] | +| lnWad | [] | +| mulDivDown | [] | +| mulDivUp | [] | +| rpow | [] | +| sqrt | [] | +| log2 | [] | +| unsafeMod | [] | +| unsafeDiv | [] | +| unsafeDivUp | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-----------+ +| Function | Modifiers | ++-----------------+-----------+ +| checkPoolPrices | [] | ++-----------------+-----------+ +INFO:Printers: +Contract IERC20 ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| approve | [] | +| transfer | [] | +| burn | [] | ++----------+-----------+ +INFO:Printers: +Contract IWETH ++----------+-----------+ +| Function | Modifiers | ++----------+-----------+ +| deposit | [] | ++----------+-----------+ +INFO:Printers: +Contract MemeBase ++-------------------------------------+-----------+ +| Function | Modifiers | ++-------------------------------------+-----------+ +| constructor | [] | +| _createUniswapPair | [] | +| _collectFees | [] | +| _collectMemeToken | [] | +| _launchCampaign | [] | +| _wrap | [] | +| summonThisMeme | [] | +| heartThisMeme | [] | +| _createThisMeme | [] | +| unleashThisMeme | [] | +| _unleashThisMeme | [] | +| collectThisMeme | [] | +| purgeThisMeme | [] | +| scheduleForAscendance | [] | +| collectFees | [] | +| constructor | [] | +| _launchCampaignSetup | [] | +| _MAGA | [] | +| _launchCampaign | [] | +| _wrap | [] | +| slitherConstructorVariables | [] | +| slitherConstructorConstantVariables | [] | ++-------------------------------------+-----------+ +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_require.txt b/audits/internal3/analysis/slither_require.txt new file mode 100644 index 0000000..158837b --- /dev/null +++ b/audits/internal3/analysis/slither_require.txt @@ -0,0 +1,608 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +Contract IMemeFactory ++----------------------+-------------------+ +| Function | require or assert | ++----------------------+-------------------+ +| mapAccountActivities | | ++----------------------+-------------------+ +INFO:Printers: +Contract MemeActivityChecker ++-------------------+-------------------+ +| Function | require or assert | ++-------------------+-------------------+ +| constructor | | +| getMultisigNonces | | +| isRatioPass | | ++-------------------+-------------------+ +INFO:Printers: +Contract BuyBackBurnerProxy ++-------------------------------------+-------------------+ +| Function | require or assert | ++-------------------------------------+-------------------+ +| constructor | | +| fallback | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | +| getPool | | +| slot0 | | +| observe | | +| factory | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-------------------+ +| Function | require or assert | ++-----------------+-------------------+ +| checkPoolPrices | | ++-----------------+-------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract MemeCelo ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _createUniswapPair | | +| _collectFees | | +| _collectMemeToken | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| _createThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| _unleashThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| constructor | | +| _launchCampaign | | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | +| getPool | | +| slot0 | | +| observe | | +| factory | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract TickMath ++-------------------------------------+-------------------+ +| Function | require or assert | ++-------------------------------------+-------------------+ +| getSqrtRatioAtTick | | +| getTickAtSqrtRatio | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-------------------+ +INFO:Printers: +Contract BuyBackBurner ++-------------------------------------+------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+------------------------------------------------------------------------------+ +| _getTwapFromOracle | | +| initialize | | +| changeImplementation | | +| changeOwner | | +| checkPoolPrices | require(bool,string)(deviation <= allowedDeviation,Price deviation too high) | +| | require(bool,string)(pool != address(0),Pool does not exist) | +| slitherConstructorConstantVariables | | ++-------------------------------------+------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | +| getPool | | +| slot0 | | +| observe | | +| factory | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-------------------+ +| Function | require or assert | ++-----------------+-------------------+ +| checkPoolPrices | | ++-----------------+-------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract MemeArbitrum ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _createUniswapPair | | +| _collectFees | | +| _collectMemeToken | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| _createThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| _unleashThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| constructor | | +| _launchCampaign | | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | +| getPool | | +| slot0 | | +| observe | | +| factory | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-------------------+ +| Function | require or assert | ++-----------------+-------------------+ +| checkPoolPrices | | ++-----------------+-------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract MemeFactory ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _createUniswapPair | | +| _collectFees | | +| _collectMemeToken | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| _createThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| _unleashThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract Meme ++------------------------+--------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++------------------------+--------------------------------------------------------------------------------------------------+ +| constructor | | +| approve | | +| transfer | | +| transferFrom | | +| permit | require(bool,string)(deadline >= block.timestamp,PERMIT_DEADLINE_EXPIRED) | +| | require(bool,string)(recoveredAddress != address(0) && recoveredAddress == owner,INVALID_SIGNER) | +| DOMAIN_SEPARATOR | | +| computeDomainSeparator | | +| _mint | | +| _burn | | +| constructor | | +| burn | | ++------------------------+--------------------------------------------------------------------------------------------------+ +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------+ +| Function | require or assert | ++------------------------------------+-------------------+ +| createAndInitializePoolIfNecessary | | +| mint | | +| collect | | +| getPool | | +| slot0 | | +| observe | | +| factory | | ++------------------------------------+-------------------+ +INFO:Printers: +Contract FixedPointMathLib ++-------------------------------------+---------------------------------------+ +| Function | require or assert | ++-------------------------------------+---------------------------------------+ +| mulWadDown | | +| mulWadUp | | +| divWadDown | | +| divWadUp | | +| powWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| expWad | | +| lnWad | require(bool,string)(x > 0,UNDEFINED) | +| | require(bool,string)(x > 0,UNDEFINED) | +| mulDivDown | | +| mulDivUp | | +| rpow | | +| sqrt | | +| log2 | require(bool,string)(x > 0,UNDEFINED) | +| unsafeMod | | +| unsafeDiv | | +| unsafeDivUp | | +| slitherConstructorConstantVariables | | ++-------------------------------------+---------------------------------------+ +INFO:Printers: +Contract IBuyBackBurner ++-----------------+-------------------+ +| Function | require or assert | ++-----------------+-------------------+ +| checkPoolPrices | | ++-----------------+-------------------+ +INFO:Printers: +Contract IERC20 ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| approve | | +| transfer | | +| burn | | ++----------+-------------------+ +INFO:Printers: +Contract IWETH ++----------+-------------------+ +| Function | require or assert | ++----------+-------------------+ +| deposit | | ++----------+-------------------+ +INFO:Printers: +Contract MemeBase ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| Function | require or assert | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| constructor | | +| _createUniswapPair | | +| _collectFees | | +| _collectMemeToken | | +| _launchCampaign | | +| _wrap | | +| summonThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(msg.value >= minNativeTokenValue,Minimum native token value is required to summon) | +| | require(bool,string)(totalSupply < type()(uint128).max,Maximum total supply overflow) | +| | require(bool,string)(totalSupply >= MIN_TOTAL_SUPPLY,Minimum total supply is not met) | +| heartThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not yet summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(msg.value > 0,Native token amount must be greater than zero) | +| _createThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| unleashThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY,Cannot unleash yet) | +| | require(bool,string)(memeSummon.summonTime > 0,Meme not summoned) | +| | require(bool,string)(memeSummon.unleashTime == 0,Meme already unleashed) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| _unleashThisMeme | require(bool,string)(memeToken != address(0),Token creation failed) | +| collectThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY,Collect only allowed until 24 hours after unleash) | +| | require(bool,string)(hearterContribution > 0,No token allocation) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| purgeThisMeme | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY,Purge only allowed from 24 hours after unleash) | +| | require(bool,string)(memeSummon.unleashTime > 0,Meme not unleashed) | +| | require(bool,string)(remainingBalance > 0,Has been purged or nothing to purge) | +| scheduleForAscendance | require(bool,string)(_locked == 1,Reentrancy guard) | +| | require(bool,string)(amount > 0,Nothing to send) | +| | require(bool,string)(memeToken != address(0),Token creation failed) | +| | require(bool,string)(scheduledForAscendance >= LIQUIDITY_AGNT,Not enough to cover launch campaign) | +| collectFees | require(bool,string)(_locked == 1,Reentrancy guard) | +| constructor | require(bool)(accounts.length == amounts.length) | +| | require(bool,string)(adjustedAmount == LIQUIDITY_AGNT,Total amount adjusted for burn allocation must match liquidity amount) | +| | require(bool,string)(totalAmount == CONTRIBUTION_AGNT,Total amount must match original contribution amount) | +| _launchCampaignSetup | require(bool)(accounts.length == amounts.length) | +| | require(bool,string)(adjustedAmount == LIQUIDITY_AGNT,Total amount adjusted for burn allocation must match liquidity amount) | +| | require(bool,string)(totalAmount == CONTRIBUTION_AGNT,Total amount must match original contribution amount) | +| _MAGA | require(bool,string)(memeToken != address(0),Token creation failed) | +| _launchCampaign | require(bool,string)(memeToken != address(0),Token creation failed) | +| | require(bool,string)(scheduledForAscendance >= LIQUIDITY_AGNT,Not enough to cover launch campaign) | +| _wrap | | +| slitherConstructorVariables | | +| slitherConstructorConstantVariables | | ++-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+ +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_variable-order.txt b/audits/internal3/analysis/slither_variable-order.txt new file mode 100644 index 0000000..2042b74 --- /dev/null +++ b/audits/internal3/analysis/slither_variable-order.txt @@ -0,0 +1,331 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +IMemeFactory: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeActivityChecker: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +INFO:Printers: +BuyBackBurnerProxy: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBuyBackBurner: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeCelo: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._nonce | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory._launched | uint256 | 4 | 0 | +| MemeFactory.memeSummons | mapping(uint256 => MemeFactory.MemeSummon) | 5 | 0 | +| MemeFactory.memeHearters | mapping(uint256 => mapping(address => uint256)) | 6 | 0 | +| MemeFactory.memeTokenNonces | mapping(address => uint256) | 7 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 8 | 0 | +| MemeFactory.memeTokens | address[] | 9 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +TickMath: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +BuyBackBurner: ++---------------------+---------+------+--------+ +| Name | Type | Slot | Offset | ++---------------------+---------+------+--------+ +| BuyBackBurner.owner | address | 0 | 0 | ++---------------------+---------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBuyBackBurner: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeArbitrum: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._nonce | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory._launched | uint256 | 4 | 0 | +| MemeFactory.memeSummons | mapping(uint256 => MemeFactory.MemeSummon) | 5 | 0 | +| MemeFactory.memeHearters | mapping(uint256 => mapping(address => uint256)) | 6 | 0 | +| MemeFactory.memeTokenNonces | mapping(address => uint256) | 7 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 8 | 0 | +| MemeFactory.memeTokens | address[] | 9 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBuyBackBurner: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeFactory: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._nonce | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory._launched | uint256 | 4 | 0 | +| MemeFactory.memeSummons | mapping(uint256 => MemeFactory.MemeSummon) | 5 | 0 | +| MemeFactory.memeHearters | mapping(uint256 => mapping(address => uint256)) | 6 | 0 | +| MemeFactory.memeTokenNonces | mapping(address => uint256) | 7 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 8 | 0 | +| MemeFactory.memeTokens | address[] | 9 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Printers: +Meme: ++-------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++-------------------+-------------------------------------------------+------+--------+ +| ERC20.name | string | 0 | 0 | +| ERC20.symbol | string | 1 | 0 | +| ERC20.totalSupply | uint256 | 2 | 0 | +| ERC20.balanceOf | mapping(address => uint256) | 3 | 0 | +| ERC20.allowance | mapping(address => mapping(address => uint256)) | 4 | 0 | +| ERC20.nonces | mapping(address => uint256) | 5 | 0 | ++-------------------+-------------------------------------------------+------+--------+ + +IUniswapV3: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +FixedPointMathLib: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IBuyBackBurner: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IERC20: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +IWETH: ++------+------+------+--------+ +| Name | Type | Slot | Offset | ++------+------+------+--------+ ++------+------+------+--------+ + +MemeBase: ++------------------------------------+-------------------------------------------------+------+--------+ +| Name | Type | Slot | Offset | ++------------------------------------+-------------------------------------------------+------+--------+ +| MemeFactory.numTokens | uint256 | 0 | 0 | +| MemeFactory.scheduledForAscendance | uint256 | 1 | 0 | +| MemeFactory._nonce | uint256 | 2 | 0 | +| MemeFactory._locked | uint256 | 3 | 0 | +| MemeFactory._launched | uint256 | 4 | 0 | +| MemeFactory.memeSummons | mapping(uint256 => MemeFactory.MemeSummon) | 5 | 0 | +| MemeFactory.memeHearters | mapping(uint256 => mapping(address => uint256)) | 6 | 0 | +| MemeFactory.memeTokenNonces | mapping(address => uint256) | 7 | 0 | +| MemeFactory.mapAccountActivities | mapping(address => uint256) | 8 | 0 | +| MemeFactory.memeTokens | address[] | 9 | 0 | ++------------------------------------+-------------------------------------------------+------+--------+ + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal3/analysis/slither_vars-and-auth.txt b/audits/internal3/analysis/slither_vars-and-auth.txt new file mode 100644 index 0000000..302e5a7 --- /dev/null +++ b/audits/internal3/analysis/slither_vars-and-auth.txt @@ -0,0 +1,671 @@ +'solc --version' running +'solc ./MemeActivityChecker-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./BuyBackBurnerProxy-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./BuyBackBurnerProxy-flatten.sol: +Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function. + --> BuyBackBurnerProxy-flatten.sol:26:1: + | +26 | contract BuyBackBurnerProxy { + | ^ (Relevant source part starts here and spans across multiple lines). +Note: The payable fallback function is defined here. + --> BuyBackBurnerProxy-flatten.sol:56:5: + | +56 | fallback() external payable { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./Meme.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeCelo-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeCelo-flatten.sol: +Warning: Contract code size is 25822 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeCelo-flatten.sol:1295:1: + | +1295 | contract MemeCelo is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./BuyBackBurner-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeArbitrum-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeArbitrum-flatten.sol: +Warning: Contract code size is 25947 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeArbitrum-flatten.sol:1294:1: + | +1294 | contract MemeArbitrum is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +'solc --version' running +'solc ./MemeFactory-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +'solc --version' running +'solc ./MemeBase-flatten.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --allow-paths .,/home/andrey/valory/meme-ooorr/audits/internal3/analysis/contracts' running +Compilation warnings/errors on ./MemeBase-flatten.sol: +Warning: Contract code size is 26603 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. + --> MemeBase-flatten.sol:1300:1: + | +1300 | contract MemeBase is MemeFactory { + | ^ (Relevant source part starts here and spans across multiple lines). + + +INFO:Printers: +Contract IMemeFactory ++----------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------------------+-------------------------+--------------------------+ +| mapAccountActivities | [] | [] | ++----------------------+-------------------------+--------------------------+ + +Contract MemeActivityChecker ++-------------------+----------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------+----------------------------------+--------------------------+ +| constructor | ['livenessRatio', 'memeFactory'] | [] | +| getMultisigNonces | [] | [] | +| isRatioPass | [] | [] | ++-------------------+----------------------------------+--------------------------+ + +INFO:Printers: +Contract BuyBackBurnerProxy ++-------------------------------------+---------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+---------------------------+--------------------------+ +| constructor | [] | [] | +| fallback | [] | [] | +| slitherConstructorConstantVariables | ['BUY_BACK_BURNER_PROXY'] | [] | ++-------------------------------------+---------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | +| getPool | [] | [] | +| slot0 | [] | [] | +| observe | [] | [] | +| factory | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IBuyBackBurner ++-----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------+-------------------------+--------------------------+ +| checkPoolPrices | [] | [] | ++-----------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract MemeCelo ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | +| getPool | [] | [] | +| slot0 | [] | [] | +| observe | [] | [] | +| factory | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract TickMath ++-------------------------------------+--------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+--------------------------------------------------------------+--------------------------+ +| getSqrtRatioAtTick | [] | [] | +| getTickAtSqrtRatio | [] | [] | +| slitherConstructorConstantVariables | ['MAX_SQRT_RATIO', 'MAX_TICK', 'MIN_SQRT_RATIO', 'MIN_TICK'] | [] | ++-------------------------------------+--------------------------------------------------------------+--------------------------+ + +Contract BuyBackBurner ++-------------------------------------+--------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+--------------------------------------------------------------------+--------------------------+ +| _getTwapFromOracle | [] | [] | +| initialize | ['owner'] | [] | +| changeImplementation | [] | ['msg.sender != owner'] | +| changeOwner | ['owner'] | ['msg.sender != owner'] | +| checkPoolPrices | [] | [] | +| slitherConstructorConstantVariables | ['BUY_BACK_BURNER_PROXY', 'OLAS_BURNER', 'SECONDS_AGO', 'VERSION'] | [] | ++-------------------------------------+--------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | +| getPool | [] | [] | +| slot0 | [] | [] | +| observe | [] | [] | +| factory | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IBuyBackBurner ++-----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------+-------------------------+--------------------------+ +| checkPoolPrices | [] | [] | ++-----------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeArbitrum ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | +| getPool | [] | [] | +| slot0 | [] | [] | +| observe | [] | [] | +| factory | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IBuyBackBurner ++-----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------+-------------------------+--------------------------+ +| checkPoolPrices | [] | [] | ++-----------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Printers: +Contract ERC20 ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+--------------------------------------------------------------------------------+--------------------------+ + +Contract Meme ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'decimals', 'name', 'symbol'] | [] | +| approve | ['allowance'] | [] | +| transfer | ['balanceOf'] | [] | +| transferFrom | ['allowance', 'balanceOf'] | [] | +| permit | ['allowance', 'nonces'] | [] | +| DOMAIN_SEPARATOR | [] | [] | +| computeDomainSeparator | [] | [] | +| _mint | ['balanceOf', 'totalSupply'] | [] | +| _burn | ['balanceOf', 'totalSupply'] | [] | +| constructor | ['INITIAL_CHAIN_ID', 'INITIAL_DOMAIN_SEPARATOR', 'balanceOf', 'decimals', 'name', 'symbol', 'totalSupply'] | [] | +| burn | ['balanceOf', 'totalSupply'] | [] | ++------------------------+------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IUniswapV3 ++------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++------------------------------------+-------------------------+--------------------------+ +| createAndInitializePoolIfNecessary | [] | [] | +| mint | [] | [] | +| collect | [] | [] | +| getPool | [] | [] | +| slot0 | [] | [] | +| observe | [] | [] | +| factory | [] | [] | ++------------------------------------+-------------------------+--------------------------+ + +Contract FixedPointMathLib ++-------------------------------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------+--------------------------+ +| mulWadDown | [] | [] | +| mulWadUp | [] | [] | +| divWadDown | [] | [] | +| divWadUp | [] | [] | +| powWad | [] | [] | +| expWad | [] | [] | +| lnWad | [] | [] | +| mulDivDown | [] | [] | +| mulDivUp | [] | [] | +| rpow | [] | [] | +| sqrt | [] | [] | +| log2 | [] | [] | +| unsafeMod | [] | [] | +| unsafeDiv | [] | [] | +| unsafeDivUp | [] | [] | +| slitherConstructorConstantVariables | ['WAD'] | [] | ++-------------------------------------+-------------------------+--------------------------+ + +Contract IBuyBackBurner ++-----------------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-----------------+-------------------------+--------------------------+ +| checkPoolPrices | [] | [] | ++-----------------+-------------------------+--------------------------+ + +Contract IERC20 ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| approve | [] | [] | +| transfer | [] | [] | +| burn | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeFactory ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'DECIMALS', 'FEE_TIER', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +Contract IWETH ++----------+-------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++----------+-------------------------+--------------------------+ +| deposit | [] | [] | ++----------+-------------------------+--------------------------+ + +Contract MemeBase ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| Function | State variables written | Conditions on msg.sender | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ +| constructor | ['buyBackBurner', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _createUniswapPair | ['scheduledForAscendance'] | [] | +| _collectFees | ['scheduledForAscendance'] | [] | +| _collectMemeToken | ['memeHearters'] | [] | +| _launchCampaign | [] | [] | +| _wrap | [] | [] | +| summonThisMeme | ['_locked', '_nonce', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| heartThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeSummons'] | [] | +| _createThisMeme | [] | [] | +| unleashThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _unleashThisMeme | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectThisMeme | ['_locked', 'mapAccountActivities', 'memeHearters'] | [] | +| purgeThisMeme | ['_locked', 'mapAccountActivities'] | [] | +| scheduleForAscendance | ['_launched', '_locked', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| collectFees | ['_locked', 'mapAccountActivities', 'scheduledForAscendance'] | [] | +| constructor | ['_launched', '_nonce', 'buyBackBurner', 'launchCampaignNonce', 'memeHearters', 'memeSummons', 'minNativeTokenValue', 'nativeToken', 'olas', 'uniV3PositionManager'] | [] | +| _launchCampaignSetup | ['memeHearters', 'memeSummons'] | [] | +| _MAGA | ['mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _launchCampaign | ['_launched', 'mapAccountActivities', 'memeHearters', 'memeTokenNonces', 'memeTokens', 'numTokens', 'scheduledForAscendance'] | [] | +| _wrap | [] | [] | +| slitherConstructorVariables | ['_launched', '_locked', '_nonce'] | [] | +| slitherConstructorConstantVariables | ['COLLECT_DELAY', 'CONTRIBUTION_AGNT', 'DECIMALS', 'FEE_TIER', 'LIQUIDITY_AGNT', 'LP_PERCENTAGE', 'MAX_ALLOWED_DEVIATION', 'MAX_TICK', 'MIN_TICK', 'MIN_TOTAL_SUPPLY', 'OLAS_BURN_PERCENTAGE', 'SUMMON_AGNT', 'UNLEASH_DELAY', 'VERSION'] | [] | ++-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------+ + +INFO:Slither:. analyzed (41 contracts) diff --git a/audits/internal4/README.md b/audits/internal4/README.md new file mode 100644 index 0000000..46d7bd1 --- /dev/null +++ b/audits/internal4/README.md @@ -0,0 +1,48 @@ +# meme-ooorr +The review has been performed based on the contract code in the following repository:
+`https://github.com/dvilelaf/meme-ooorr`
+commit: `3c7c861ec774e2cc4efb2daeeb48343e2a927499` or `v0.2.0-internal-audit3`
+ +## Objectives +The audit focused on Meme* contracts
+ +## Issue +Not new issue in https://github.com/dvilelaf/meme-ooorr/pull/22/commits/9d725bf5ad9df14e537b97a98ccc05ae031b2843 + +### Notes +``` +Double testing + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; +``` +[x] Verified + +## Fixing TODO +``` +int24 public constant MIN_TICK = -887200; // TODO: double check + +Solution: +Uniswap v3 pools have a tick range from a minimum of -887272 to a maximum of 887272. +Let Fee tier % = 1% +Then Tick-spacing = 200 (* table in https://support.uniswap.org/hc/en-us/articles/21069524840589-What-is-a-tick-when-providing-liquidity) +Formula 1: +tick % Tick-spacing = 0 (* By definition: Tick spacing sets the minimum distance between ticks for adding or removing liquidity.) +We need to find x that satisfies two equations: +a) x % 200 = 0 +b) x < 887272 +x = 887200 +For full range: +MIN_TICK = -|x| +MAX_TICK = |x| + +Refences: +https://support.uniswap.org/hc/en-us/articles/21069524840589-What-is-a-tick-when-providing-liquidity +https://support.uniswap.org/hc/en-us/articles/7423663459597-Why-does-the-price-input-automatically-round +https://medium.com/@jaysojitra1011/uniswap-v3-deep-dive-visualizing-ticks-and-liquidity-provisioning-part-3-081db166243b +``` +[x] Confirmed, does not need update diff --git a/audits/internal5/README.md b/audits/internal5/README.md new file mode 100644 index 0000000..162d47b --- /dev/null +++ b/audits/internal5/README.md @@ -0,0 +1,77 @@ +# meme-ooorr +The review has been performed based on the contract code in the following repository:
+`https://github.com/dvilelaf/meme-ooorr`
+commit: `c6e6b55012c3bc18f8b7d848f4e6243f4b3881bd` or `v0.2.0-internal-audit4`
+ +## Objectives +The audit focused on Meme* contracts
+ +## Issue medium? low? +### olasLeftovers It's not clear what happens to them next. +``` + function _bridgeAndBurn( + uint256 olasAmount, + uint256, + bytes memory + ) internal virtual override returns (uint256 leftovers) { + // Get OLAS leftovers from previous transfers and adjust the amount to transfer + olasAmount += olasLeftovers; + + // Round transfer amount to the cutoff value + uint256 transferAmount = olasAmount / WORMHOLE_BRIDGING_CUTOFF; + transferAmount *= WORMHOLE_BRIDGING_CUTOFF; + + // Check for zero value + require(transferAmount > 0, "Amount is too small for bridging"); + + // Update OLAS leftovers + olasLeftovers = olasAmount - transferAmount; +``` +[x] Discussed, all fine + +### Low, CEI - Check before interaction +``` + // Apply slippage protection + require(IOracle(oracle).validatePrice(maxSlippage), "Slippage limit is breached"); move to top +``` +[x] Fixed + +### To discussion UniswapPriceOracle. IMO no change code +``` + /// @dev Validates the current price against a TWAP according to slippage tolerance. + /// @param slippage the acceptable slippage tolerance + function validatePrice(uint256 slippage) external view returns (bool) { + require(slippage <= maxSlippage, "Slippage overflow"); + + // Compute time-weighted average price + // Fetch the cumulative prices from the pair + uint256 cumulativePriceLast; + if (direction == 0) { + cumulativePriceLast = IUniswapV2(pair).price1CumulativeLast(); + } else { + cumulativePriceLast = IUniswapV2(pair).price0CumulativeLast(); + } + + // Fetch the reserves and the last block timestamp + (, , uint256 blockTimestampLast) = IUniswapV2(pair).getReserves(); + + // Require at least one block since last update + if (block.timestamp == blockTimestampLast) { + return false; + } + uint256 elapsedTime = block.timestamp - blockTimestampLast; + + ??? elapsedTime > minElapsedTime - Current logic allows any time interval. + On the other hand, if we put a barrier, we will create a trap for ourselves, that any price update through swap will block it. + IMO: better code as is. +``` +[x] Noted + +## Notes to TODO +``` +Let Oracle (Balancer) update independently. No needed + // TODO Check if needed + // Update prices in oracle + //IOracle(oracle).updatePrice(); +``` +[x] Fixed \ No newline at end of file diff --git a/audits/internal6/README.md b/audits/internal6/README.md new file mode 100644 index 0000000..3425bb3 --- /dev/null +++ b/audits/internal6/README.md @@ -0,0 +1,71 @@ +# meme-ooorr +The review has been performed based on the contract code in the following repository:
+`https://github.com/dvilelaf/meme-ooorr`
+commit: `c2d85cf3279c5a50b4367df75f03cb39106867b32` or `v0.2.0-internal-audit5`
+ +## Objectives +The audit focused on BBB* contracts
+ +## Issue +### Medium: inf activity from nothing for UniswapPriceOracle. +``` +mapAccountActivities[msg.sender]++; +remove updatePrice or return false. + + /// @dev Triggers oracle price update. + function updateOraclePrice() external { + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Update price + bool success = IOracle(oracle).updatePrice(); + require(success, "Oracle price update failed"); + + emit OraclePriceUpdated(oracle, msg.sender); + } + /// @dev Updates the time-weighted average price. + function updatePrice() external pure returns (bool) { + // Nothing to update; use built-in TWAP from Uniswap V2 pool + return true; + } +``` +[x] Fixed + +### Low - no checking fee. +``` +May lead to artificial activity through the withdrawal of zeros fee +function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + (address token0, address token1) = isNativeFirst ? (nativeToken, memeToken) : (memeToken, nativeToken); + + // Check current pool prices + IBuyBackBurner(buyBackBurner).checkPoolPrices(token0, token1, uniV3PositionManager, FEE_TIER); + + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get the corresponding tokens + (uint256 amount0, uint256 amount1) = IUniswapV3(uniV3PositionManager).collect(params); + //require(amount0 > 0 || amount1 > 0, "No rewards"); +Improve: + (address token0, address token1) = isNativeFirst ? (nativeToken, memeToken) : (memeToken, nativeToken); + + // Check position to ensure there are fees to collect + (, , , , , , , uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, , ) = IUniswapV3(uniV3PositionManager).positions(positionId); + + require(liquidity > 0, "No liquidity in position"); + require(feeGrowthInside0LastX128 > 0 || feeGrowthInside1LastX128 > 0, "No fees available to collect"); + ++ + require(amount0 > 0 || amount1 > 0, "No rewards"); +``` +[x] Fixed + +### Remove console.log in prod. +``` + console.log("tradePrice", tradePrice); +``` +[] diff --git a/contracts/BuyBackBurner.sol b/contracts/BuyBackBurner.sol new file mode 100644 index 0000000..7e23af9 --- /dev/null +++ b/contracts/BuyBackBurner.sol @@ -0,0 +1,281 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {FixedPointMathLib} from "../lib/solmate/src/utils/FixedPointMathLib.sol"; +import {IUniswapV3} from "./interfaces/IUniswapV3.sol"; +import {TickMath} from "./libraries/TickMath.sol"; + +// ERC20 interface +interface IERC20 { + /// @dev Gets the amount of tokens owned by a specified account. + /// @param account Account address. + /// @return Amount of tokens owned. + function balanceOf(address account) external view returns (uint256); +} + +interface IOracle { + /// @dev Gets the current OLAS token price in 1e18 format. + function getPrice() external view returns (uint256); + + /// @dev Validates price according to slippage. + function validatePrice(uint256 slippage) external view returns (bool); + + /// @dev Updates the time-weighted average price. + function updatePrice() external returns (bool); +} + +/// @dev Only `owner` has a privilege, but the `sender` was provided. +/// @param sender Sender address. +/// @param owner Required sender address as an owner. +error OwnerOnly(address sender, address owner); + +/// @dev Provided zero address. +error ZeroAddress(); + +/// @dev Provided zero value. +error ZeroValue(); + +/// @dev The contract is already initialized. +error AlreadyInitialized(); + +/// @title BuyBackBurner - BuyBackBurner implementation contract +abstract contract BuyBackBurner { + event ImplementationUpdated(address indexed implementation); + event OwnerUpdated(address indexed owner); + event OracleUpdated(address indexed oracle); + event BuyBack(uint256 olasAmount); + event OraclePriceUpdated(address indexed oracle, address indexed sender); + + // Version number + string public constant VERSION = "0.2.0"; + // Code position in storage is keccak256("BUY_BACK_BURNER_PROXY") = "c6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19" + bytes32 public constant BUY_BACK_BURNER_PROXY = 0xc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19; + // L1 OLAS Burner address + address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + // Max allowed price deviation for TWAP pool values (10%) in 1e18 format + uint256 public constant MAX_ALLOWED_DEVIATION = 1e17; + // Seconds ago to look back for TWAP pool values + uint32 public constant SECONDS_AGO = 1800; + + // Contract owner + address public owner; + // OLAS token address + address public olas; + // Native token (ERC-20) address + address public nativeToken; + // Oracle address + address public oracle; + + // Oracle max slippage for ERC-20 native token <=> OLAS + uint256 public maxSlippage; + // Reentrancy lock + uint256 internal _locked = 1; + + // Map of account => activity counter + mapping(address => uint256) public mapAccountActivities; + + /// @dev Buys OLAS on DEX. + /// @param nativeTokenAmount Suggested native token amount. + /// @return olasAmount Obtained OLAS amount. + function _buyOLAS(uint256 nativeTokenAmount) internal virtual returns (uint256 olasAmount) { + // Apply slippage protection + require(IOracle(oracle).validatePrice(maxSlippage), "Before swap slippage limit is breached"); + + // Get current pool price + uint256 previousPrice = IOracle(oracle).getPrice(); + + olasAmount = _performSwap(nativeTokenAmount); + + // Get current pool price + uint256 tradePrice = IOracle(oracle).getPrice(); + + // Validate against slippage thresholds + uint256 lowerBound = (previousPrice * (100 - maxSlippage)) / 100; + uint256 upperBound = (previousPrice * (100 + maxSlippage)) / 100; + + require(tradePrice >= lowerBound && tradePrice <= upperBound, "After swap slippage limit is breached"); + } + + /// @dev Gets TWAP price via the built-in Uniswap V3 oracle. + /// @param pool Pool address. + /// @return price Calculated price. + function _getTwapFromOracle(address pool) internal view returns (uint256 price) { + // Query the pool for the current and historical tick + uint32[] memory secondsAgos = new uint32[](2); + // Start of the period + secondsAgos[0] = SECONDS_AGO; + + // Fetch the tick cumulative values from the pool + (int56[] memory tickCumulatives, ) = IUniswapV3(pool).observe(secondsAgos); + + // Calculate the average tick over the time period + int56 tickCumulativeDelta = tickCumulatives[1] - tickCumulatives[0]; + int24 averageTick = int24(tickCumulativeDelta / int56(int32(SECONDS_AGO))); + + // Convert the average tick to sqrtPriceX96 + uint160 sqrtPriceX96 = TickMath.getSqrtRatioAtTick(averageTick); + + // Calculate the price using the sqrtPriceX96 + // Max result is uint160 * uint160 == uint320, not to overflow: 320 - 256 = 64 (2^64) + price = FixedPointMathLib.mulDivDown(uint256(sqrtPriceX96), uint256(sqrtPriceX96), (1 << 64)); + } + + /// @dev BuyBackBurner initializer. + /// @param payload Initializer payload. + function _initialize(bytes memory payload) internal virtual; + + /// @dev Performs swap for OLAS on DEX. + /// @param nativeTokenAmount Native token amount. + /// @return olasAmount Obtained OLAS amount. + function _performSwap(uint256 nativeTokenAmount) internal virtual returns (uint256 olasAmount); + + /// @dev BuyBackBurner initializer. + /// @param payload Initializer payload. + function initialize(bytes memory payload) external { + // Check for already being initialized + if (owner != address(0)) { + revert AlreadyInitialized(); + } + + owner = msg.sender; + _locked = 1; + + _initialize(payload); + } + + /// @dev Changes the implementation contract address. + /// @param newImplementation New implementation contract address. + function changeImplementation(address newImplementation) external { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for zero address + if (newImplementation == address(0)) { + revert ZeroAddress(); + } + + // Store the implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, newImplementation) + } + + emit ImplementationUpdated(newImplementation); + } + + /// @dev Changes contract owner address. + /// @param newOwner Address of a new owner. + function changeOwner(address newOwner) external virtual { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the zero address + if (newOwner == address(0)) { + revert ZeroAddress(); + } + + owner = newOwner; + emit OwnerUpdated(newOwner); + } + + /// @dev Changes contract oracle address. + /// @param newOracle Address of a new oracle. + function changeOracle(address newOracle) external virtual { + // Check for the ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the zero address + if (newOracle == address(0)) { + revert ZeroAddress(); + } + + oracle = newOracle; + emit OracleUpdated(newOracle); + } + + /// @dev Checks pool prices via Uniswap V3 built-in oracle. + /// @param token0 Token0 address. + /// @param token1 Token1 address. + /// @param fee Fee tier. + function checkPoolPrices( + address token0, + address token1, + address uniV3PositionManager, + uint24 fee + ) external view { + // Get factory address + address factory = IUniswapV3(uniV3PositionManager).factory(); + + // Verify pool reserves before proceeding + address pool = IUniswapV3(factory).getPool(token0, token1, fee); + require(pool != address(0), "Pool does not exist"); + + // Get current pool reserves and observation index + (uint160 sqrtPriceX96, , uint16 observationIndex, , , , ) = IUniswapV3(pool).slot0(); + + // Check if the pool has sufficient observation history + (uint32 oldestTimestamp, , , ) = IUniswapV3(pool).observations(observationIndex); + if (oldestTimestamp + SECONDS_AGO < block.timestamp) { + return; + } + + // Check TWAP or historical data + uint256 twapPrice = _getTwapFromOracle(pool); + // Get instant price + // Max result is uint160 * uint160 == uint320, not to overflow: 320 - 256 = 64 (2^64) + uint256 instantPrice = FixedPointMathLib.mulDivDown(uint256(sqrtPriceX96), uint256(sqrtPriceX96), (1 << 64)); + + uint256 deviation; + if (twapPrice > 0) { + deviation = (instantPrice > twapPrice) ? + FixedPointMathLib.mulDivDown((instantPrice - twapPrice), 1e18, twapPrice) : + FixedPointMathLib.mulDivDown((twapPrice - instantPrice), 1e18, twapPrice); + } + + require(deviation <= MAX_ALLOWED_DEVIATION, "Price deviation too high"); + } + + /// @dev Buys OLAS on DEX. + /// @notice if nativeTokenAmount is zero or above the balance, it will be adjusted to current native token balance. + /// @param nativeTokenAmount Suggested native token amount. + function buyBack(uint256 nativeTokenAmount) external virtual { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Get nativeToken balance + uint256 balance = IERC20(nativeToken).balanceOf(address(this)); + + // Adjust native token amount, if needed + if (nativeTokenAmount == 0 || nativeTokenAmount > balance) { + nativeTokenAmount = balance; + } + require(nativeTokenAmount > 0, "Insufficient native token amount"); + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Buy OLAS + uint256 olasAmount = _buyOLAS(nativeTokenAmount); + + emit BuyBack(olasAmount); + + _locked = 1; + } + + /// @dev Triggers oracle price update. + function updateOraclePrice() external { + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + // Update price + bool success = IOracle(oracle).updatePrice(); + require(success, "Oracle price update failed"); + + emit OraclePriceUpdated(oracle, msg.sender); + } +} \ No newline at end of file diff --git a/contracts/BuyBackBurnerBalancer.sol b/contracts/BuyBackBurnerBalancer.sol new file mode 100644 index 0000000..8b1409a --- /dev/null +++ b/contracts/BuyBackBurnerBalancer.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {BuyBackBurner} from "./BuyBackBurner.sol"; + +// Balancer interface +interface IBalancer { + enum SwapKind { GIVEN_IN, GIVEN_OUT } + + struct SingleSwap { + bytes32 poolId; + SwapKind kind; + address assetIn; + address assetOut; + uint256 amount; + bytes userData; + } + + struct FundManagement { + address sender; + bool fromInternalBalance; + address payable recipient; + bool toInternalBalance; + } + + /// @dev Swaps tokens on Balancer. + function swap(SingleSwap memory singleSwap, FundManagement memory funds, uint256 limit, uint256 deadline) + external payable returns (uint256); +} + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); +} + +/// @title BuyBackBurnerBalancer - BuyBackBurner implementation contract for interaction with Balancer +contract BuyBackBurnerBalancer is BuyBackBurner { + // Balancer vault address + address public balancerVault; + // Balancer pool Id + bytes32 public balancerPoolId; + + /// @dev Performs swap for OLAS on DEX. + /// @param nativeTokenAmount Native token amount. + /// @return olasAmount Obtained OLAS amount. + function _performSwap(uint256 nativeTokenAmount) internal virtual override returns (uint256 olasAmount) { + // Approve nativeToken for the Balancer Vault + IERC20(nativeToken).approve(balancerVault, nativeTokenAmount); + + // Prepare Balancer data for the nativeToken-OLAS pool + IBalancer.SingleSwap memory singleSwap = IBalancer.SingleSwap(balancerPoolId, IBalancer.SwapKind.GIVEN_IN, + nativeToken, olas, nativeTokenAmount, "0x"); + IBalancer.FundManagement memory fundManagement = IBalancer.FundManagement(address(this), false, + payable(address(this)), false); + + // Perform swap + olasAmount = IBalancer(balancerVault).swap(singleSwap, fundManagement, 0, block.timestamp); + } + + /// @dev BuyBackBurner initializer. + /// @param payload Initializer payload. + function _initialize(bytes memory payload) internal override virtual { + address[] memory accounts; + (accounts, balancerPoolId, maxSlippage) = abi.decode(payload, (address[], bytes32, uint256)); + + olas = accounts[0]; + nativeToken = accounts[1]; + oracle = accounts[2]; + balancerVault = accounts[3]; + } +} \ No newline at end of file diff --git a/contracts/BuyBackBurnerProxy.sol b/contracts/BuyBackBurnerProxy.sol new file mode 100644 index 0000000..888fece --- /dev/null +++ b/contracts/BuyBackBurnerProxy.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +/// @dev Zero implementation address. +error ZeroImplementationAddress(); + +/// @dev Zero data. +error ZeroData(); + +/// @dev Proxy initialization failed. +error InitializationFailed(); + +/* +* This is a BuyBackBurner proxy contract. +* Proxy implementation is created based on the Universal Upgradeable Proxy Standard (UUPS) EIP-1822. +* The implementation address must be located in a unique storage slot of the proxy contract. +* The upgrade logic must be located in the implementation contract. +* Special buyBackBurner implementation address slot is produced by hashing the "BUY_BACK_BURNER_PROXY" +* string in order to make the slot unique. +* The fallback() implementation for all the delegatecall-s is inspired by the Gnosis Safe set of contracts. +*/ + +/// @title BuyBackBurnerProxy - Smart contract for buyBackBurner proxy +contract BuyBackBurnerProxy { + // Code position in storage is keccak256("BUY_BACK_BURNER_PROXY") = "c6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19" + bytes32 public constant BUY_BACK_BURNER_PROXY = 0xc6d7bd4bd971fa336816fe30b665cc6caccce8b123cc8ea692d132f342c4fc19; + + /// @dev BuyBackBurnerProxy constructor. + /// @param implementation BuyBackBurner implementation address. + /// @param buyBackBurnerData BuyBackBurner initialization data. + constructor(address implementation, bytes memory buyBackBurnerData) { + // Check for the zero address, since the delegatecall works even with the zero one + if (implementation == address(0)) { + revert ZeroImplementationAddress(); + } + + // Check for the zero data + if (buyBackBurnerData.length == 0) { + revert ZeroData(); + } + + // Store the buyBackBurner implementation address + assembly { + sstore(BUY_BACK_BURNER_PROXY, implementation) + } + // Initialize proxy storage + (bool success, ) = implementation.delegatecall(buyBackBurnerData); + if (!success) { + revert InitializationFailed(); + } + } + + /// @dev Delegatecall to all the incoming data. + fallback() external payable { + assembly { + let implementation := sload(BUY_BACK_BURNER_PROXY) + calldatacopy(0, 0, calldatasize()) + let success := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + if eq(success, 0) { + revert(0, returndatasize()) + } + return(0, returndatasize()) + } + } +} \ No newline at end of file diff --git a/contracts/BuyBackBurnerUniswap.sol b/contracts/BuyBackBurnerUniswap.sol new file mode 100644 index 0000000..8620198 --- /dev/null +++ b/contracts/BuyBackBurnerUniswap.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {BuyBackBurner} from "./BuyBackBurner.sol"; + +// ERC20 interface +interface IERC20 { + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); +} + +// UniswapV2 interface +interface IUniswap { + /// @dev Swaps an exact amount of input tokens along the route determined by the path. + function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, + uint256 deadline) external returns (uint256[] memory amounts); +} + +/// @title BuyBackBurnerUniswap - BuyBackBurner implementation contract for interaction with UniswapV2 +contract BuyBackBurnerUniswap is BuyBackBurner { + // Router address + address public router; + + /// @dev Performs swap for OLAS on DEX. + /// @param nativeTokenAmount Native token amount. + /// @return olasAmount Obtained OLAS amount. + function _performSwap(uint256 nativeTokenAmount) internal virtual override returns (uint256 olasAmount) { + // Approve nativeToken for the router + IERC20(nativeToken).approve(router, nativeTokenAmount); + + address[] memory path = new address[](2); + path[0] = nativeToken; + path[1] = olas; + + // Swap nativeToken for OLAS + uint256[] memory amounts = IUniswap(router).swapExactTokensForTokens( + nativeTokenAmount, + 0, + path, + address(this), + block.timestamp + ); + + // Record OLAS amount + olasAmount = amounts[1]; + } + + /// @dev BuyBackBurner initializer. + /// @param payload Initializer payload. + function _initialize(bytes memory payload) internal override virtual { + address[] memory accounts; + (accounts, maxSlippage) = abi.decode(payload, (address[], uint256)); + + olas = accounts[0]; + nativeToken = accounts[1]; + oracle = accounts[2]; + router = accounts[3]; + } +} \ No newline at end of file diff --git a/contracts/MemeArbitrum.sol b/contracts/MemeArbitrum.sol new file mode 100644 index 0000000..78cb4b5 --- /dev/null +++ b/contracts/MemeArbitrum.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {MemeFactory} from "./MemeFactory.sol"; + +interface IWETH { + function deposit() external payable; +} + +// @title MemeArbitrum - a smart contract factory for Meme Token creation on Arbitrum. +contract MemeArbitrum is MemeFactory { + /// @dev MemeArbitrum constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @notice MemeArbitrum has no launch campaign, hence x = 0. + /// @return Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override view returns (uint256) { + return scheduledForAscendance; + } + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } +} diff --git a/contracts/MemeBase.sol b/contracts/MemeBase.sol index ff55dfb..ce5c545 100644 --- a/contracts/MemeBase.sol +++ b/contracts/MemeBase.sol @@ -1,172 +1,106 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; -import {MemeFactory} from "./MemeFactory.sol"; - -// Balancer interface -interface IBalancer { - enum SwapKind { GIVEN_IN, GIVEN_OUT } - - struct SingleSwap { - bytes32 poolId; - SwapKind kind; - address assetIn; - address assetOut; - uint256 amount; - bytes userData; - } - - struct FundManagement { - address sender; - bool fromInternalBalance; - address payable recipient; - bool toInternalBalance; - } - - /// @dev Swaps tokens on Balancer. - function swap(SingleSwap memory singleSwap, FundManagement memory funds, uint256 limit, uint256 deadline) - external payable returns (uint256); -} - -// Bridge interface -interface IBridge { - /// @dev Initiates a withdrawal from L2 to L1 to a target account on L1. - /// @param l2Token Address of the L2 token to withdraw. - /// @param to Recipient account on L1. - /// @param amount Amount of the L2 token to withdraw. - /// @param minGasLimit Minimum gas limit to use for the transaction. - /// @param extraData Extra data attached to the withdrawal. - function withdrawTo(address l2Token, address to, uint256 amount, uint32 minGasLimit, bytes calldata extraData) external; -} - -// ERC20 interface -interface IERC20 { - /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. - /// @param spender Account address that will be able to transfer tokens on behalf of the caller. - /// @param amount Token amount. - /// @return True if the function execution is successful. - function approve(address spender, uint256 amount) external returns (bool); -} +import {MemeFactory, Meme} from "./MemeFactory.sol"; -// Oracle interface -interface IOracle { - /// @dev Gets latest round token price data. - function latestRoundData() - external returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); -} - -// UniswapV2 interface -interface IUniswap { - /// @dev Swaps exact amount of ETH for a specified token. - function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) - external payable returns (uint256[] memory amounts); +interface IWETH { + function deposit() external payable; } /// @title MemeBase - a smart contract factory for Meme Token creation on Base. contract MemeBase is MemeFactory { - // Slippage parameter (3%) - uint256 public constant SLIPPAGE = 97; - // Token transfer gas limit for L1 - // This is safe as the value is practically bigger than observed ones on numerous chains - uint32 public constant TOKEN_GAS_LIMIT = 300_000; - - // WETH token address - address public immutable weth; - // L2 token relayer bridge address - address public immutable l2TokenRelayer; - // Oracle address - address public immutable oracle; - // Balancer Vault address - address public immutable balancerVault; - // Balancer Pool Id - bytes32 public immutable balancerPoolId; + // AGNT data: + // https://basescan.org/token/0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9 + // Full contribution amount in ETH: + uint256 public constant CONTRIBUTION_AGNT = 141569842100000000000; + // Liquidity amount that went to LP (collected amount - 10% for burn): + uint256 public constant LIQUIDITY_AGNT = 127412857890000000000; + // Block time of original summon: + uint256 public constant SUMMON_AGNT = 22902993; + + // Launch campaign nonce + uint256 public immutable launchCampaignNonce; /// @dev MemeBase constructor constructor( address _olas, - address _usdc, - address _router, - address _factory, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, uint256 _minNativeTokenValue, - address _weth, - address _l2TokenRelayer, - address _oracle, - address _balancerVault, - bytes32 _balancerPoolId - ) MemeFactory(_olas, _usdc, _router, _factory, _minNativeTokenValue) { - weth = _weth; - l2TokenRelayer = _l2TokenRelayer; - oracle = _oracle; - balancerVault = _balancerVault; - balancerPoolId = _balancerPoolId; + address[] memory accounts, + uint256[] memory amounts + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) { + if (accounts.length > 0) { + launchCampaignNonce = _nonce; + _launchCampaignSetup(accounts, amounts); + _nonce = launchCampaignNonce + 1; + _launched = 0; + } } - /// @dev Buys USDC on UniswapV2 using ETH amount. - /// @param nativeTokenAmount Input ETH amount. - /// @return Stable token amount bought. - function _convertToReferenceToken(uint256 nativeTokenAmount, uint256) internal override returns (uint256) { - address[] memory path = new address[](2); - path[0] = weth; - path[1] = referenceToken; - - // Calculate price by Oracle - (, int256 answerPrice, , , ) = IOracle(oracle).latestRoundData(); - require(answerPrice > 0, "Oracle price is incorrect"); - - // Oracle returns 8 decimals, USDC has 6 decimals, need to additionally divide by 100 to account for slippage - // ETH: 18 decimals, USDC leftovers: 2 decimals, percentage: 2 decimals; denominator = 18 + 2 + 2 = 22 - uint256 limit = uint256(answerPrice) * nativeTokenAmount * SLIPPAGE / 1e22; - // Swap ETH for USDC - uint256[] memory amounts = IUniswap(router).swapExactETHForTokens{ value: nativeTokenAmount }( - limit, - path, - address(this), - block.timestamp - ); - - // Return the USDC amount bought - return amounts[1]; + /// @dev Launch campaign initialization function. + /// @param accounts Original accounts. + /// @param amounts Corresponding original amounts (without subtraction for burn). + function _launchCampaignSetup(address[] memory accounts, uint256[] memory amounts) private { + require(accounts.length == amounts.length, "Array lengths are not equal"); + + // Initiate meme token map values + // unleashTime is set to 1 such that no one is able to heart, collect or purge this token + memeSummons[launchCampaignNonce] = MemeSummon("Agent Token", "AG3NT", 1_000_000_000 ether, + CONTRIBUTION_AGNT, SUMMON_AGNT, 1, 0, 0, false); + + // To match original summon events (purposefully placed here to match order of original events) + emit Summoned(accounts[0], launchCampaignNonce, amounts[0]); + + // Record all the accounts and amounts + uint256 totalAmount; + for (uint256 i = 0; i < accounts.length; ++i) { + totalAmount += amounts[i]; + memeHearters[launchCampaignNonce][accounts[i]] = amounts[i]; + // to match original hearter events + emit Hearted(accounts[i], launchCampaignNonce, amounts[i]); + } + require(totalAmount == CONTRIBUTION_AGNT, "Total amount must match original contribution amount"); + // Adjust amount for already collected burned tokens + uint256 adjustedAmount = (totalAmount * 9) / 10; + require(adjustedAmount == LIQUIDITY_AGNT, "Total amount adjusted for burn allocation must match liquidity amount"); } - /// @dev Buys OLAS on Balancer. - /// @param referenceTokenAmount USDC amount. - /// @param limit OLAS minimum amount depending on the desired slippage. - /// @return Obtained OLAS amount. - function _buyOLAS(uint256 referenceTokenAmount, uint256 limit) internal override returns (uint256) { - // Approve usdc for the Balancer Vault - IERC20(referenceToken).approve(balancerVault, referenceTokenAmount); - - // Prepare Balancer data - IBalancer.SingleSwap memory singleSwap = IBalancer.SingleSwap(balancerPoolId, IBalancer.SwapKind.GIVEN_IN, referenceToken, - olas, referenceTokenAmount, "0x"); - IBalancer.FundManagement memory fundManagement = IBalancer.FundManagement(address(this), false, - payable(address(this)), false); - - // Perform swap - return IBalancer(balancerVault).swap(singleSwap, fundManagement, limit, block.timestamp); + /// @dev AG3NT token launch campaign unleash. + /// @notice MAGA: Make Agents.Fun Great Again. + /// Unleashes a new version of AGNT, called `AG3NT`, that has the same + /// LP setup (same amount of AG3NT and ETH, modulus a possibly rounding difference + /// as new MemeBase uses UniV3, rather than UniV2), as the original AGNT has. + /// Hearters of the original AGNT now have 24 hours to collect their `AG3NT` allocation. + function _MAGA() private { + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[launchCampaignNonce]; + + // Unleash the token + _unleashThisMeme(launchCampaignNonce, memeSummon, LIQUIDITY_AGNT, CONTRIBUTION_AGNT); + } - /// @dev Bridges OLAS amount back to L1 and burns. - /// @param olasAmount OLAS amount. - /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. - /// @return msg.value leftovers if partially utilized by the bridge. - function _bridgeAndBurn(uint256 olasAmount, uint256 tokenGasLimit, bytes memory) internal override returns (uint256) { - // Approve bridge to use OLAS - IERC20(olas).approve(l2TokenRelayer, olasAmount); - - // Check for sufficient minimum gas limit - if (tokenGasLimit < TOKEN_GAS_LIMIT) { - tokenGasLimit = TOKEN_GAS_LIMIT; - } + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @notice MemeBase has launch campaign MAGA, hence x = 127.41285789 ETH. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override returns (uint256 adjustedAmount) { + require(scheduledForAscendance >= LIQUIDITY_AGNT, "Not enough to cover launch campaign"); - // Data for the mainnet validate the OLAS burn - bytes memory data = abi.encodeWithSignature("burn(uint256)", olasAmount); + // Unleash the campaign token + _MAGA(); - // Bridge OLAS to mainnet to get burned - IBridge(l2TokenRelayer).withdrawTo(olas, OLAS_BURNER, olasAmount, uint32(tokenGasLimit), data); + // scheduledForAscendance might also increase during the pool creation + adjustedAmount = scheduledForAscendance - LIQUIDITY_AGNT; - emit OLASJourneyToAscendance(olas, olasAmount); + _launched = 1; + } - return msg.value; + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); } } diff --git a/contracts/MemeCelo.sol b/contracts/MemeCelo.sol index 7f88222..9679451 100644 --- a/contracts/MemeCelo.sol +++ b/contracts/MemeCelo.sol @@ -3,178 +3,25 @@ pragma solidity ^0.8.28; import {MemeFactory} from "./MemeFactory.sol"; -// Bridge interface -interface IBridge { - /// @dev Transfers tokens through Wormhole portal. - function transferTokens( - address token, - uint256 amount, - uint16 recipientChain, - bytes32 recipient, - uint256 arbiterFee, - uint32 nonce - ) external payable returns (uint64 sequence); -} - -// ERC20 interface -interface IERC20 { - /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. - /// @param spender Account address that will be able to transfer tokens on behalf of the caller. - /// @param amount Token amount. - /// @return True if the function execution is successful. - function approve(address spender, uint256 amount) external returns (bool); -} - -// Oracle interface -interface IOracle { - /// @dev Gets latest round token price data. - function latestRoundData() - external returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); -} - -// UniswapV2 interface -interface IUniswap { - /// @dev Swaps exact amount of ETH for a specified token. - function swapExactTokensForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) - external payable returns (uint256[] memory amounts); - - /// @dev Swaps an exact amount of input tokens along the route determined by the path. - function swapExactTokensForTokens( - uint256 amountIn, - uint256 amountOutMin, - address[] calldata path, - address to, - uint256 deadline - ) external returns (uint256[] memory amounts); -} - /// @title MemeCelo - a smart contract factory for Meme Token creation on Celo. contract MemeCelo is MemeFactory { - // Slippage parameter (3%) - uint256 public constant SLIPPAGE = 97; - // Wormhole bridging decimals cutoff - uint256 public constant WORMHOLE_BRIDGING_CUTOFF = 1e10; - // Ethereum mainnet chain Id in Wormhole format - uint16 public constant WORMHOLE_ETH_CHAIN_ID = 2; - - // CELO token address - address public immutable celo; - // L2 token relayer bridge address - address public immutable l2TokenRelayer; - // Oracle address - address public immutable oracle; - - // Contract nonce - uint256 public nonce; - // OLAS leftovers from bridging - uint256 public olasLeftovers; - - /// @dev MemeBase constructor + /// @dev MemeCelo constructor constructor( address _olas, - address _referenceToken, - address _router, - address _factory, - uint256 _minNativeTokenValue, - address _celo, - address _l2TokenRelayer, - address _oracle - ) MemeFactory(_olas, _referenceToken, _router, _factory, _minNativeTokenValue) { - celo = _celo; - l2TokenRelayer = _l2TokenRelayer; - oracle = _oracle; - } - - /// @dev Buys cUSD on UniswapV2 using Celo amount. - /// @param nativeTokenAmount Input Celo amount. - /// @return Stable token amount bought. - function _convertToReferenceToken(uint256 nativeTokenAmount, uint256) internal override returns (uint256) { - address[] memory path = new address[](2); - path[0] = celo; - path[1] = referenceToken; - - // Calculate price by Oracle - (, int256 answerPrice, , , ) = IOracle(oracle).latestRoundData(); - require(answerPrice > 0, "Oracle price is incorrect"); - - // Oracle returns 8 decimals, cUSD has 18 decimals, need to additionally divide by 100 to account for slippage - // ETH: 18 decimals, cUSD: 18 decimals, percentage: 2 decimals; denominator = 8 + 2 = 10 - uint256 limit = uint256(answerPrice) * nativeTokenAmount * SLIPPAGE / 1e10; - - // Approve reference token - IERC20(celo).approve(router, nativeTokenAmount); - - // Swap CELO for cUSD - uint256[] memory amounts = IUniswap(router).swapExactTokensForTokens( - nativeTokenAmount, - limit, - path, - address(this), - block.timestamp - ); - - // Return the cUSD amount bought - return amounts[1]; + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @notice MemeCelo has no launch campaign, hence x = 0. + /// @return Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override view returns (uint256) { + return scheduledForAscendance; } - /// @dev Buys OLAS on UniswapV2. - /// @param referenceTokenAmount CELO amount. - /// @return Obtained OLAS amount. - function _buyOLAS(uint256 referenceTokenAmount, uint256 limit) internal override returns (uint256) { - address[] memory path = new address[](3); - path[0] = referenceToken; - path[1] = celo; - path[2] = olas; - - // Approve reference token - IERC20(referenceToken).approve(router, referenceTokenAmount); - - // Swap cUSD for OLAS - // This will go via two pools - not a problem as Ubeswap has both - uint256[] memory amounts = IUniswap(router).swapExactTokensForTokens( - referenceTokenAmount, - limit, - path, - address(this), - block.timestamp - ); - - // Return the OLAS amount bought - return amounts[1]; - } - - /// @dev Bridges OLAS amount back to L1 and burns. - /// @param olasAmount OLAS amount. - /// @return msg.value leftovers if partially utilized by the bridge. - function _bridgeAndBurn(uint256 olasAmount, uint256, bytes memory) internal override returns (uint256) { - // Get OLAS leftovers from previous transfers and adjust the amount to transfer - olasAmount += olasLeftovers; - - // Round transfer amount to the cutoff value - uint256 transferAmount = olasAmount / WORMHOLE_BRIDGING_CUTOFF; - transferAmount *= WORMHOLE_BRIDGING_CUTOFF; - - // Check for zero value - require(transferAmount > 0, "Amount is too small for bridging"); - - // Update OLAS leftovers - olasLeftovers = olasAmount - transferAmount; - - // Approve bridge to use OLAS - IERC20(olas).approve(l2TokenRelayer, transferAmount); - - // Bridge arguments - bytes32 olasBurner = bytes32(uint256(uint160(OLAS_BURNER))); - uint256 localNonce = nonce; - - // Bridge OLAS to mainnet to get burned - IBridge(l2TokenRelayer).transferTokens(olas, transferAmount, WORMHOLE_ETH_CHAIN_ID, olasBurner, 0, uint32(nonce)); - - // Adjust nonce - nonce = localNonce + 1; - - emit OLASJourneyToAscendance(olas, transferAmount); - - return msg.value; - } + /// @dev Native token amount to wrap. + /// @notice Celo's native token CELO is also an ERC20. + function _wrap(uint256) internal virtual override {} } diff --git a/contracts/MemeEthereum.sol b/contracts/MemeEthereum.sol new file mode 100644 index 0000000..d9ebd80 --- /dev/null +++ b/contracts/MemeEthereum.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {MemeFactory} from "./MemeFactory.sol"; + +interface IWETH { + function deposit() external payable; +} + +/// @title MemeEthereum - a smart contract factory for Meme Token creation on Ethereum. +contract MemeEthereum is MemeFactory { + /// @dev MemeEthereum constructor + constructor( + address _olas, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, + uint256 _minNativeTokenValue + ) MemeFactory(_olas, _nativeToken, _uniV3PositionManager, _buyBackBurner, _minNativeTokenValue) {} + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @notice MemeEthereum has no launch campaign, hence x = 0. + /// @return Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal override view returns (uint256) { + return scheduledForAscendance; + } + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual override { + // Wrap ETH + IWETH(nativeToken).deposit{value: nativeTokenAmount}(); + } +} diff --git a/contracts/MemeFactory.sol b/contracts/MemeFactory.sol index 761eb02..f63181e 100644 --- a/contracts/MemeFactory.sol +++ b/contracts/MemeFactory.sol @@ -1,7 +1,13 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; +import {FixedPointMathLib} from "../lib/solmate/src/utils/FixedPointMathLib.sol"; import {Meme} from "./Meme.sol"; +import {IUniswapV3} from "./interfaces/IUniswapV3.sol"; + +interface IBuyBackBurner { + function checkPoolPrices(address token0, address token1, address uniV3PositionManager, uint24 fee) external view; +} // ERC20 interface interface IERC20 { @@ -10,41 +16,44 @@ interface IERC20 { /// @param amount Token amount. /// @return True if the function execution is successful. function approve(address spender, uint256 amount) external returns (bool); -} -// UniswapV2 interface -interface IUniswap { - /// @dev Creates an LP pair. - function createPair(address tokenA, address tokenB) external returns (address pair); + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); - /// @dev Adds liquidity to the LP consisting of tokenA and tokenB. - function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, - uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) - external returns (uint256 amountA, uint256 amountB, uint256 liquidity); + /// @dev Burns tokens. + /// @param amount Token amount to burn. + function burn(uint256 amount) external; } /// @title MemeFactory - a smart contract factory for Meme Token creation -/// @dev This contract let's: +/// @dev This contract lets: /// 1) Any msg.sender summons a meme by contributing at least 0.01 ETH (or equivalent native asset for other chains). /// 2) Within 24h of a meme being summoned, any msg.sender can heart a meme (thereby becoming a hearter). -/// This requires the msg.sender to send a non-zero ETH value, which gets recorded as a contribution. +/// This requires the msg.sender to send a non-zero ETH value (or equivalent native asset for other chains), +/// which gets recorded as a contribution. /// 3) After 24h of a meme being summoned, any msg.sender can unleash the meme. This creates a liquidity pool for /// the meme and schedules the distribution of the rest of the tokens to the hearters, proportional to their /// contributions. /// 4) After the meme is being unleashed any hearter can collect their share of the meme token. -/// 5) After 48h of a meme being summoned, any msg.sender can purge the uncollected meme token allocations of hearters. -/// @notice 10% of the ETH contributed to a meme gets converted into USDC (or other reference token) upon unleashing of the meme, that can later be -/// converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of the ETH contributed (90%) -/// is converted to USDC and contributed to an LP, together with 50% of the token supply of the meme. -/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeBase, +/// 5) After 24h of a meme being unleashed, any msg.sender can purge the uncollected meme token allocations of hearters. +/// @notice 10% of the ETH (or equivalent native asset for other chains) contributed to a meme gets retained upon unleashing +/// of the meme, that can later be converted to OLAS and scheduled for burning (on Ethereum mainnet). The remainder of +/// the ETH contributed (90%) is contributed to an LP on UniV3, together with 50% of the token supply of the meme. +/// The remaining 50% of the meme token supply goes to hearters. The LP token is held forever by MemeFactory, /// guaranteeing lasting liquidity in the meme token. +/// Trading fees from the LPs held by MemeFactory can be collected. When collected, the meme token part of the fees is +/// instantly burned. The ETH (or equivalent native asset for other chains) token part can later be converted to OLAS +/// and scheduled for burning (on Ethereum mainnet). /// /// Example: /// - Agent Smith would summonThisMeme with arguments Smiths Army, SMTH, 1_000_000_000 and $500 worth of ETH /// - Agent Brown would heartThisMeme with $250 worth of ETH /// - Agent Jones would heartThisMeme with $250 worth of ETH /// - Any agent, let's say Brown, would call unleashThisMeme. This would: -/// - create a liquidity pool with $SMTH:$USDC, containing 500_000_000 SMTH tokens and $900 worth of USDC +/// - create a liquidity pool with $SMTH:$ETH, containing 500_000_000 SMTH tokens and $900 worth of ETH /// - schedule $100 worth of OLAS for burning on Ethereum mainnet /// - Brown would receive 125_000_000 worth of $SMTH /// - Agent Smith would collectThisMeme and receive 250_000_000 worth of $SMTH @@ -52,16 +61,23 @@ interface IUniswap { /// - Any agent would call purgeThisMeme, which would cause Agent Jones's allocation of 125_000_000 worth of /// $SMTH to be burned. abstract contract MemeFactory { - event OLASJourneyToAscendance(address indexed olas, uint256 amount); - event Summoned(address indexed summoner, address indexed memeToken, uint256 nativeTokenContributed); - event Hearted(address indexed hearter, address indexed memeToken, uint256 amount); - event Unleashed(address indexed unleasher, address indexed memeToken, address indexed lpPairAddress, - uint256 liquidity, uint256 burnPercentageOfStable); + event OLASJourneyToAscendance(uint256 amount); + event Summoned(address indexed summoner, uint256 indexed memeNonce, uint256 amount); + event Hearted(address indexed hearter, uint256 indexed memeNonce, uint256 amount); + event Unleashed(address indexed unleasher, uint256 indexed memeNonce, address indexed memeToken, uint256 lpTokenId, + uint256 liquidity); event Collected(address indexed hearter, address indexed memeToken, uint256 allocation); - event Purged(address indexed memeToken, uint256 remainingAmount); + event Purged(address indexed memeToken, uint256 amount); + event FeesCollected(address indexed feeCollector, address indexed memeToken, uint256 nativeTokenAmount, uint256 memeTokenAmount); // Meme Summon struct struct MemeSummon { + // Meme token name + string name; + // Meme token symbol + string symbol; + // Meme token total supply + uint256 totalSupply; // Native token contributed to the meme launch uint256 nativeTokenContributed; // Summon timestamp @@ -70,22 +86,30 @@ abstract contract MemeFactory { uint256 unleashTime; // Finalized hearters amount uint256 heartersAmount; + // UniswapV3 position token Id + uint256 positionId; + // Native token direction in the pool + bool isNativeFirst; } // Version number - string public constant VERSION = "0.1.0"; + string public constant VERSION = "0.2.0"; // Total supply minimum value uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000 ether; // Unleash delay after token summoning uint256 public constant UNLEASH_DELAY = 24 hours; - // Collect deadline from the token summoning time - uint256 public constant COLLECT_DEADLINE = 48 hours; + // Collect delay after token unleashing + uint256 public constant COLLECT_DELAY = 24 hours; // Percentage of OLAS to burn (10%) uint256 public constant OLAS_BURN_PERCENTAGE = 10; // Percentage of initial supply for liquidity pool (50%) uint256 public constant LP_PERCENTAGE = 50; - // L1 OLAS Burner address - address public constant OLAS_BURNER = 0x51eb65012ca5cEB07320c497F4151aC207FEa4E0; + // Uniswap V3 fee tier of 1% + uint24 public constant FEE_TIER = 10_000; + /// The minimum tick that corresponds to a selected fee tier + int24 public constant MIN_TICK = -887200; + /// The maximum tick that corresponds to a selected fee tier + int24 public constant MAX_TICK = -MIN_TICK; // Meme token decimals uint8 public constant DECIMALS = 18; @@ -93,24 +117,30 @@ abstract contract MemeFactory { uint256 public immutable minNativeTokenValue; // OLAS token address address public immutable olas; - // Reference token address - address public immutable referenceToken; - // Uniswap V2 router address - address public immutable router; - // Uniswap V2 factory address - address public immutable factory; + // Native token address (ERC-20 equivalent) + address public immutable nativeToken; + // Uniswap V3 position manager address + address public immutable uniV3PositionManager; + // BuyBackBurner address + address public immutable buyBackBurner; // Number of meme tokens uint256 public numTokens; - // Reference token scheduled to be converted to OLAS for Ascendance + // Native token (ERC-20) scheduled to be converted to OLAS for Ascendance uint256 public scheduledForAscendance; + // Nonce + uint256 internal _nonce = 1; // Reentrancy lock uint256 internal _locked = 1; - - // Map of meme token => Meme summon struct - mapping(address => MemeSummon) public memeSummons; - // Map of mem token => (map of hearter => native token balance) - mapping(address => mapping(address => uint256)) public memeHearters; + // Launch tracker + uint256 internal _launched = 1; + + // Map of meme nonce => Meme summon struct + mapping(uint256 => MemeSummon) public memeSummons; + // Map of meme nonce => (map of hearter => native token balance) + mapping(uint256 => mapping(address => uint256)) public memeHearters; + // Map of meme token address => Meme nonce + mapping(address => uint256) public memeTokenNonces; // Map of account => activity counter mapping(address => uint256) public mapAccountActivities; // Set of all meme tokens created by this contract @@ -119,97 +149,236 @@ abstract contract MemeFactory { /// @dev MemeFactory constructor constructor( address _olas, - address _referenceToken, - address _router, - address _factory, + address _nativeToken, + address _uniV3PositionManager, + address _buyBackBurner, uint256 _minNativeTokenValue ) { olas = _olas; - referenceToken = _referenceToken; - router = _router; - factory = _factory; + nativeToken = _nativeToken; + uniV3PositionManager = _uniV3PositionManager; + buyBackBurner = _buyBackBurner; minNativeTokenValue = _minNativeTokenValue; } - /// @dev Converts contributed native token to reference token. - /// @param nativeTokenAmount Input native token amount. - /// @return reference token amount converted to. - function _convertToReferenceToken(uint256 nativeTokenAmount, uint256) internal virtual returns (uint256); - - /// @dev Buys OLAS on DEX. - /// @param referenceTokenAmount Reference token amount. - /// @param limit OLAS minimum amount depending on the desired slippage. - /// @return Obtained OLAS amount. - function _buyOLAS(uint256 referenceTokenAmount, uint256 limit) internal virtual returns (uint256); - - /// @dev Bridges OLAS amount back to L1 and burns. - /// @param OLASAmount OLAS amount. - /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. - /// @param bridgePayload Optional additional bridge payload. - /// @return msg.value leftovers if partially utilized by the bridge. - function _bridgeAndBurn( - uint256 OLASAmount, - uint256 tokenGasLimit, - bytes memory bridgePayload - ) internal virtual returns (uint256); - - /// @dev Creates reference token + meme token LP and adds liquidity. + /// @dev Creates native token + meme token LP and adds liquidity. /// @param memeToken Meme token address. - /// @param referenceTokenAmount Reference token amount. + /// @param nativeTokenAmount Native token amount. /// @param memeTokenAmount Meme token amount. - /// @return pair reference token + meme token LP address. + /// @return positionId LP position token Id. /// @return liquidity Obtained LP liquidity. + /// @return isNativeFirst Order of tokens in the pool. function _createUniswapPair( address memeToken, - uint256 referenceTokenAmount, + uint256 nativeTokenAmount, uint256 memeTokenAmount - ) internal returns (address pair, uint256 liquidity) { - // Create the LP - pair = IUniswap(factory).createPair(referenceToken, memeToken); + ) internal returns (uint256 positionId, uint256 liquidity, bool isNativeFirst) { + if (nativeToken < memeToken) { + isNativeFirst = true; + } + + // Ensure token order matches Uniswap convention + (address token0, address token1, uint256 amount0, uint256 amount1) = isNativeFirst + ? (nativeToken, memeToken, nativeTokenAmount, memeTokenAmount) + : (memeToken, nativeToken, memeTokenAmount, nativeTokenAmount); + + // Calculate the price ratio (amount1 / amount0) scaled by 1e18 to avoid floating point issues + uint256 priceX96 = (amount1 * 1e18) / amount0; + + // Calculate the square root of the price ratio in X96 format + uint160 sqrtPriceX96 = uint160((FixedPointMathLib.sqrt(priceX96) * (1 << 96)) / 1e9); + + // Get factory address + address factory = IUniswapV3(uniV3PositionManager).factory(); + // Verify that pool does not exist + address pool = IUniswapV3(factory).getPool(token0, token1, FEE_TIER); + require(pool == address(0), "Pool address must be zero"); + + // Create pool + pool = IUniswapV3(uniV3PositionManager).createAndInitializePoolIfNecessary(token0, token1, FEE_TIER, sqrtPriceX96); // Approve tokens for router - IERC20(referenceToken).approve(router, referenceTokenAmount); - IERC20(memeToken).approve(router, memeTokenAmount); - - // Add reference token + meme token liquidity - (, , liquidity) = IUniswap(router).addLiquidity( - referenceToken, - memeToken, - referenceTokenAmount, - memeTokenAmount, - 0, // Accept any amount of reference token - 0, // Accept any amount of meme token - address(this), - block.timestamp - ); + IERC20(token0).approve(uniV3PositionManager, amount0); + IERC20(token1).approve(uniV3PositionManager, amount1); + + // Add native token + meme token liquidity + IUniswapV3.MintParams memory params = IUniswapV3.MintParams({ + token0: token0, + token1: token1, + fee: FEE_TIER, + tickLower: MIN_TICK, + tickUpper: MAX_TICK, + amount0Desired: amount0, + amount1Desired: amount1, + amount0Min: 0, // Accept any amount of token0 + amount1Min: 0, // Accept any amount of token1 + recipient: address(this), + deadline: block.timestamp + }); + + (positionId, liquidity, amount0, amount1) = IUniswapV3(uniV3PositionManager).mint(params); + + // Schedule for ascendance leftovers from native token + // Note that meme token leftovers will be purged via purgeThisMeme + uint256 nativeLeftovers = isNativeFirst ? (nativeTokenAmount - amount0) : (nativeTokenAmount - amount1); + if (nativeLeftovers > 0) { + scheduledForAscendance += nativeLeftovers; + } + + // Increase observation cardinality + IUniswapV3(pool).increaseObservationCardinalityNext(60); + } + + /// @dev Collects fees from LP position, burns the meme token part and schedules for ascendance the native token part. + /// @param memeToken Meme token address. + /// @param positionId LP position ID. + /// @param isNativeFirst Order of a native token in the pool. + function _collectFees(address memeToken, uint256 positionId, bool isNativeFirst) internal { + (address token0, address token1) = isNativeFirst ? (nativeToken, memeToken) : (memeToken, nativeToken); + + // Check current pool prices + IBuyBackBurner(buyBackBurner).checkPoolPrices(token0, token1, uniV3PositionManager, FEE_TIER); + + IUniswapV3.CollectParams memory params = IUniswapV3.CollectParams({ + tokenId: positionId, + recipient: address(this), + amount0Max: type(uint128).max, + amount1Max: type(uint128).max + }); + + // Get corresponding token fees + (uint256 amount0, uint256 amount1) = IUniswapV3(uniV3PositionManager).collect(params); + require(amount0 > 0 || amount1 > 0, "Zero fees available"); + + uint256 nativeAmountForOLASBurn; + uint256 memeAmountToBurn; + + if (isNativeFirst) { + nativeAmountForOLASBurn = amount0; + memeAmountToBurn = amount1; + } else { + memeAmountToBurn = amount0; + nativeAmountForOLASBurn = amount1; + } + + // Burn meme tokens + IERC20(memeToken).burn(memeAmountToBurn); + + // Schedule native token amount for ascendance + scheduledForAscendance += nativeAmountForOLASBurn; + + emit FeesCollected(msg.sender, memeToken, nativeAmountForOLASBurn, memeAmountToBurn); } /// @dev Collects meme token allocation. /// @param memeToken Meme token address. + /// @param memeNonce Meme nonce. /// @param heartersAmount Total hearters meme token amount. /// @param hearterContribution Hearter contribution. /// @param totalNativeTokenCommitted Total native token contributed for the token launch. - function _collect( + function _collectMemeToken( address memeToken, + uint256 memeNonce, uint256 heartersAmount, uint256 hearterContribution, uint256 totalNativeTokenCommitted ) internal { - // Get meme token instance - Meme memeTokenInstance = Meme(memeToken); - // Allocate corresponding meme token amount to the hearter uint256 allocation = (heartersAmount * hearterContribution) / totalNativeTokenCommitted; // Zero the allocation - memeHearters[memeToken][msg.sender] = 0; + memeHearters[memeNonce][msg.sender] = 0; - // Transfer meme token maount to the msg.sender + // Get meme token instance + Meme memeTokenInstance = Meme(memeToken); + + // Transfer meme token amount to the msg.sender memeTokenInstance.transfer(msg.sender, allocation); emit Collected(msg.sender, memeToken, allocation); } + /// @dev Create a new meme token. + /// @param memeNonce Meme nonce. + /// @param name Meme token name. + /// @param symbol Meme token symbol. + /// @param totalSupply Meme token total supply. + /// @return memeToken Meme token address. + function _createThisMeme( + uint256 memeNonce, + string memory name, + string memory symbol, + uint256 totalSupply + ) internal returns (address memeToken) { + bytes32 randomNonce = keccak256(abi.encodePacked(block.timestamp, msg.sender, memeNonce)); + randomNonce = keccak256(abi.encodePacked(randomNonce)); + bytes memory payload = abi.encodePacked(type(Meme).creationCode, abi.encode(name, symbol, DECIMALS, totalSupply)); + // solhint-disable-next-line no-inline-assembly + assembly { + memeToken := create2(0x0, add(0x20, payload), mload(payload), randomNonce) + } + + // Check for non-zero token address + require(memeToken != address(0), "Token creation failed"); + } + + /// @dev Allows diverting first x collected funds to a launch campaign. + /// @return adjustedAmount Adjusted amount of native token to convert to OLAS and burn. + function _launchCampaign() internal virtual returns (uint256 adjustedAmount); + + /// @dev Unleashes the meme token. + /// @param memeNonce Meme token nonce. + /// @param memeSummon Meme summon struct. + /// @param nativeAmountForLP The native token amount allocated for the LP. + /// @param totalNativeTokenCommitted The total native token amount committed to the meme. + function _unleashThisMeme( + uint256 memeNonce, + MemeSummon storage memeSummon, + uint256 nativeAmountForLP, + uint256 totalNativeTokenCommitted + ) internal { + // Calculate LP token allocation according to LP percentage and distribution to supporters + uint256 memeAmountForLP = (memeSummon.totalSupply * LP_PERCENTAGE) / 100; + uint256 heartersAmount = memeSummon.totalSupply - memeAmountForLP; + + // Create new meme token + address memeToken = _createThisMeme(memeNonce, memeSummon.name, memeSummon.symbol, memeSummon.totalSupply); + + // Record meme token address + memeTokenNonces[memeToken] = memeNonce; + + // Create Uniswap pair with LP allocation + (uint256 positionId, uint256 liquidity, bool isNativeFirst) = + _createUniswapPair(memeToken, nativeAmountForLP, memeAmountForLP); + + // Record the actual meme unleash time + memeSummon.unleashTime = block.timestamp; + // Record the hearters distribution amount for this meme + memeSummon.heartersAmount = heartersAmount; + // Record position token Id + memeSummon.positionId = positionId; + // Record token order in the pool + if (isNativeFirst) { + memeSummon.isNativeFirst = isNativeFirst; + } + + // Push token into the global list of tokens + memeTokens.push(memeToken); + numTokens = memeTokens.length; + + // Allocate to the token hearter unleashing the meme + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; + if (hearterContribution > 0) { + _collectMemeToken(memeToken, memeNonce, heartersAmount, hearterContribution, totalNativeTokenCommitted); + } + + emit Unleashed(msg.sender, memeNonce, memeToken, positionId, liquidity); + } + + /// @dev Native token amount to wrap. + /// @param nativeTokenAmount Native token amount to be wrapped. + function _wrap(uint256 nativeTokenAmount) internal virtual; + /// @dev Summons meme token. /// @param name Token name. /// @param symbol Token symbol. @@ -219,111 +388,103 @@ abstract contract MemeFactory { string memory symbol, uint256 totalSupply ) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Check for name and symbol lengths + require(bytes(name).length > 0 && bytes(symbol).length > 0, "Name and symbol must not be empty"); // Check for minimum native token value require(msg.value >= minNativeTokenValue, "Minimum native token value is required to summon"); // Check for minimum total supply require(totalSupply >= MIN_TOTAL_SUPPLY, "Minimum total supply is not met"); + // Check for max total supply as to practical limits for the Uniswap LP creation + require(totalSupply < type(uint128).max, "Maximum total supply overflow"); - // Create a new token - Meme newTokenInstance = new Meme(name, symbol, DECIMALS, totalSupply); - address memeToken = address(newTokenInstance); + uint256 memeNonce = _nonce; - // Initiate meme token map values - memeSummons[memeToken] = MemeSummon(msg.value, block.timestamp, 0, 0); - memeHearters[memeToken][msg.sender] = msg.value; - - // Push token into the global list of tokens - memeTokens.push(memeToken); - numTokens = memeTokens.length; + // Initiate meme nonce map values + memeSummons[memeNonce] = MemeSummon(name, symbol, totalSupply, msg.value, block.timestamp, 0, 0, 0, false); + memeHearters[memeNonce][msg.sender] = msg.value; // Record msg.sender activity mapAccountActivities[msg.sender]++; - emit Summoned(msg.sender, memeToken, msg.value); - emit Hearted(msg.sender, memeToken, msg.value); - } + // Update nonce + _nonce = memeNonce + 1; + + emit Summoned(msg.sender, memeNonce, msg.value); + emit Hearted(msg.sender, memeNonce, msg.value); + _locked = 1; + } + /// @dev Hearts the meme token with native token contribution. - /// @param memeToken Meme token address. - function heartThisMeme(address memeToken) external payable { + /// @param memeNonce Meme token nonce. + function heartThisMeme(uint256 memeNonce) external payable { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + // Check for zero value require(msg.value > 0, "Native token amount must be greater than zero"); - // Get the meme summon info - MemeSummon storage memeSummon = memeSummons[memeToken]; - - // Get the total native token committed to this meme - uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; // Check that the meme has been summoned - require(totalNativeTokenCommitted > 0, "Meme not yet summoned"); + require(memeSummon.summonTime > 0, "Meme not yet summoned"); // Check if the token has been unleashed require(memeSummon.unleashTime == 0, "Meme already unleashed"); // Update meme token map values + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; totalNativeTokenCommitted += msg.value; memeSummon.nativeTokenContributed = totalNativeTokenCommitted; - memeHearters[memeToken][msg.sender] += msg.value; + memeHearters[memeNonce][msg.sender] += msg.value; // Record msg.sender activity mapAccountActivities[msg.sender]++; - emit Hearted(msg.sender, memeToken, msg.value); - } + emit Hearted(msg.sender, memeNonce, msg.value); + _locked = 1; + } + /// @dev Unleashes the meme token. - /// @param memeToken Meme token address. - /// @param limit Reference token minimum amount depending on the desired slippage, if applicable. - function unleashThisMeme(address memeToken, uint256 limit) external { + /// @param memeNonce Meme token nonce. + function unleashThisMeme(uint256 memeNonce) external { require(_locked == 1, "Reentrancy guard"); - _locked == 2; - - // Get the meme summon info - MemeSummon storage memeSummon = memeSummons[memeToken]; + _locked = 2; - // Get the total native token amount committed to this meme - uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; + // Get meme summon info + MemeSummon storage memeSummon = memeSummons[memeNonce]; // Check if the meme has been summoned - require(memeSummon.summonTime > 0, "Meme not summoned"); - // Check the unleash timestamp + require(memeSummon.summonTime > 0, "Meme not yet summoned"); + // Check if the token has been unleashed + require(memeSummon.unleashTime == 0, "Meme already unleashed"); + // Check the unleash condition require(block.timestamp >= memeSummon.summonTime + UNLEASH_DELAY, "Cannot unleash yet"); - // Buy reference token with the the total native token committed - // This might not be needed in other implementations, and the function would return the given value - uint256 referenceTokenAmount = _convertToReferenceToken(totalNativeTokenCommitted, limit); - - // Put aside reference token to buy OLAS with the burn percentage of the total native token amount committed - uint256 burnPercentageOfReferenceToken = (referenceTokenAmount * OLAS_BURN_PERCENTAGE) / 100; - scheduledForAscendance += burnPercentageOfReferenceToken; + // Get the total native token amount committed to this meme + uint256 totalNativeTokenCommitted = memeSummon.nativeTokenContributed; - // Adjust reference token amount - referenceTokenAmount -= burnPercentageOfReferenceToken; + // Wrap native token to its ERC-20 version + // All funds ever contributed to a given meme are wrapped here. + _wrap(totalNativeTokenCommitted); - // Calculate LP token allocation according to LP percentage and distribution to supporters - Meme memeTokenInstance = Meme(memeToken); - uint256 totalSupply = memeTokenInstance.totalSupply(); - uint256 lpTokenAmount = (totalSupply * LP_PERCENTAGE) / 100; - uint256 heartersAmount = totalSupply - lpTokenAmount; + // Put aside native token to buy OLAS with the burn percentage of the total native token amount committed + uint256 nativeAmountForOLASBurn = (totalNativeTokenCommitted * OLAS_BURN_PERCENTAGE) / 100; - // Create Uniswap pair with LP allocation - (address pool, uint256 liquidity) = _createUniswapPair(memeToken, referenceTokenAmount, lpTokenAmount); + // Adjust native token amount + uint256 nativeAmountForLP = totalNativeTokenCommitted - nativeAmountForOLASBurn; - // Record the actual meme unleash time - memeSummon.unleashTime = block.timestamp; - // Record the hearters distribution amount for this meme - memeSummon.heartersAmount = heartersAmount; + // Schedule native token amount for ascendance + scheduledForAscendance += nativeAmountForOLASBurn; // Record msg.sender activity mapAccountActivities[msg.sender]++; - // Allocate to the token hearter unleashing the meme - uint256 hearterContribution = memeHearters[memeToken][msg.sender]; - if (hearterContribution > 0) { - _collect(memeToken, hearterContribution, heartersAmount, totalNativeTokenCommitted); - } - - emit Unleashed(msg.sender, memeToken, pool, liquidity, burnPercentageOfReferenceToken); + _unleashThisMeme(memeNonce, memeSummon, nativeAmountForLP, totalNativeTokenCommitted); _locked = 1; } @@ -332,18 +493,21 @@ abstract contract MemeFactory { /// @param memeToken Meme token address. function collectThisMeme(address memeToken) external { require(_locked == 1, "Reentrancy guard"); - _locked == 2; + _locked = 2; - // Get the meme summon info - MemeSummon memory memeSummon = memeSummons[memeToken]; + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; + + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; // Check if the meme has been summoned require(memeSummon.unleashTime > 0, "Meme not unleashed"); // Check if the meme can be collected - require(block.timestamp <= memeSummon.summonTime + COLLECT_DEADLINE, "Collect only allowed until 48 hours after summon"); + require(block.timestamp <= memeSummon.unleashTime + COLLECT_DELAY, "Collect only allowed until 24 hours after unleash"); // Get hearter contribution - uint256 hearterContribution = memeHearters[memeToken][msg.sender]; + uint256 hearterContribution = memeHearters[memeNonce][msg.sender]; // Check for zero value require(hearterContribution > 0, "No token allocation"); @@ -351,7 +515,8 @@ abstract contract MemeFactory { mapAccountActivities[msg.sender]++; // Collect the token - _collect(memeToken, hearterContribution, memeSummon.heartersAmount, memeSummon.nativeTokenContributed); + _collectMemeToken(memeToken, memeNonce, memeSummon.heartersAmount, hearterContribution, + memeSummon.nativeTokenContributed); _locked = 1; } @@ -360,15 +525,18 @@ abstract contract MemeFactory { /// @param memeToken Meme token address. function purgeThisMeme(address memeToken) external { require(_locked == 1, "Reentrancy guard"); - _locked == 2; + _locked = 2; - // Get the meme summon info - MemeSummon memory memeSummon = memeSummons[memeToken]; + // Get meme nonce + uint256 memeNonce = memeTokenNonces[memeToken]; - // Check if the meme has been summoned - require(memeSummon.summonTime > 0, "Meme not summoned"); - // Check if enough time has passed since the meme was summoned - require(block.timestamp > memeSummon.summonTime + COLLECT_DEADLINE, "Purge only allowed from 48 hours after summon"); + // Get meme summon info + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Check if the meme has been unleashed + require(memeSummon.unleashTime > 0, "Meme not unleashed"); + // Check if enough time has passed since the meme was unleashed + require(block.timestamp > memeSummon.unleashTime + COLLECT_DELAY, "Purge only allowed from 24 hours after unleash"); // Record msg.sender activity mapAccountActivities[msg.sender]++; @@ -388,35 +556,48 @@ abstract contract MemeFactory { _locked = 1; } - /// @dev Converts collected reference token to OLAS and bridges OLAS to Ethereum mainnet for burn. - /// @param limit OLAS minimum amount depending on the desired slippage. - /// @param tokenGasLimit Token gas limit for bridging OLAS to L1. - /// @param bridgePayload Optional additional bridge payload. - function scheduleOLASForAscendance(uint256 limit, uint256 tokenGasLimit, bytes memory bridgePayload) external payable { + /// @dev Transfers native token to BuyBackBurner to later be converted to OLAS for burn. + function scheduleForAscendance() external { require(_locked == 1, "Reentrancy guard"); - _locked == 2; + _locked = 2; - require(scheduledForAscendance > 0, "Nothing to burn"); + uint256 amount = _launched > 0 ? scheduledForAscendance : _launchCampaign(); + // This condition means launchCampaign can only be triggered once there's a positive + // amount for ascendance remaining. + require(amount > 0, "Nothing to send"); + + scheduledForAscendance = 0; // Record msg.sender activity mapAccountActivities[msg.sender]++; - uint256 OLASAmount = _buyOLAS(scheduledForAscendance, limit); + // Transfers native token to be later converted to OLAS for burn. + IERC20(nativeToken).transfer(buyBackBurner, amount); - scheduledForAscendance = 0; - // Burn OLAS - uint256 leftovers = _bridgeAndBurn(OLASAmount, tokenGasLimit, bridgePayload); - - // Send leftover amount, if any, back to the sender - if (leftovers > 0) { - // If the call fails, ignore to avoid the attack that would prevent this function from executing - // solhint-disable-next-line avoid-low-level-calls - tx.origin.call{value: leftovers}(""); - } + emit OLASJourneyToAscendance(amount); - _locked == 1; + _locked = 1; } - /// @dev Allows the contract to receive native token - receive() external payable {} + /// @dev Collects all accumulated LP fees. + /// @param tokens List of tokens to be iterated over. + function collectFees(address[] memory tokens) public { + require(_locked == 1, "Reentrancy guard"); + _locked = 2; + + // Record msg.sender activity + mapAccountActivities[msg.sender]++; + + for (uint256 i = 0; i < tokens.length; ++i) { + // Get meme nonce + uint256 memeNonce = memeTokenNonces[tokens[i]]; + // Get meme summon struct + MemeSummon memory memeSummon = memeSummons[memeNonce]; + + // Collect fees + _collectFees(tokens[i], memeSummon.positionId, memeSummon.isNativeFirst); + } + + _locked = 1; + } } diff --git a/contracts/interfaces/IUniswapV3.sol b/contracts/interfaces/IUniswapV3.sol new file mode 100644 index 0000000..344154b --- /dev/null +++ b/contracts/interfaces/IUniswapV3.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +interface IUniswapV3 { + /// @notice Creates a new pool if it does not exist, then initializes if not initialized + /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool + /// @param token0 The contract address of token0 of the pool + /// @param token1 The contract address of token1 of the pool + /// @param fee The fee amount of the v3 pool for the specified token pair + /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value + /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary + function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) + external payable returns (address pool); + + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Creates a new position wrapped in a NFT + /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized + /// a method does not exist, i.e. the pool is assumed to be initialized. + /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata + /// @return tokenId The ID of the token that represents the minted position + /// @return liquidity The amount of liquidity for this position + /// @return amount0 The amount of token0 + /// @return amount1 The amount of token1 + function mint(MintParams calldata params) external payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + struct CollectParams { + uint256 tokenId; + address recipient; + uint128 amount0Max; + uint128 amount1Max; + } + + /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient + /// @param params tokenId The ID of the NFT for which tokens are being collected, + /// recipient The account that should receive the tokens, + /// amount0Max The maximum amount of token0 to collect, + /// amount1Max The maximum amount of token1 to collect + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool); + + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() external view + returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, + uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + /// @notice Returns data about a specific observation index + /// @param index The element of the observations array to fetch + /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time + /// ago, rather than at a specific index in the array. + /// @return blockTimestamp The timestamp of the observation, + /// @return tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, + /// @return secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, + /// @return initialized whether the observation has been initialized and the values are safe to use + function observations(uint256 index) external view returns (uint32 blockTimestamp, int56 tickCumulative, + uint160 secondsPerLiquidityCumulativeX128, bool initialized); + + /// @notice Increase the maximum number of price and liquidity observations that this pool will store + /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to + /// the input observationCardinalityNext. + /// @param observationCardinalityNext The desired minimum number of observations for the pool to store + function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external; + + function factory() external view returns (address); +} + diff --git a/contracts/libraries/TickMath.sol b/contracts/libraries/TickMath.sol new file mode 100644 index 0000000..715a9fd --- /dev/null +++ b/contracts/libraries/TickMath.sol @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +/// @title Math library for computing sqrt prices from ticks and vice versa +/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports +/// prices between 2**-128 and 2**128 +library TickMath { + error T(); + error R(); + + /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 + int24 internal constant MIN_TICK = -887272; + /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 + int24 internal constant MAX_TICK = -MIN_TICK; + + /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) + uint160 internal constant MIN_SQRT_RATIO = 4295128739; + /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) + uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + + /// @notice Calculates sqrt(1.0001^tick) * 2^96 + /// @dev Throws if |tick| > max tick + /// @param tick The input tick for the above formula + /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) + /// at the given tick + function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { + unchecked { + uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); + if (absTick > uint256(int256(MAX_TICK))) revert T(); + + uint256 ratio = absTick & 0x1 != 0 + ? 0xfffcb933bd6fad37aa2d162d1a594001 + : 0x100000000000000000000000000000000; + if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; + if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; + if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; + if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; + if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; + if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; + if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; + if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; + if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; + if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; + if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; + if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; + if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; + if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; + if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; + if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; + if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; + if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; + if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; + + if (tick > 0) ratio = type(uint256).max / ratio; + + // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. + // we then downcast because we know the result always fits within 160 bits due to our tick input constraint + // we round up in the division so getTickAtSqrtRatio of the output price is always consistent + sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); + } + } + + /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio + /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may + /// ever return. + /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96 + /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio + function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { + unchecked { + // second inequality must be < because the price can never reach the price at the max tick + if (!(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO)) revert R(); + uint256 ratio = uint256(sqrtPriceX96) << 32; + + uint256 r = ratio; + uint256 msb = 0; + + assembly { + let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(5, gt(r, 0xFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(4, gt(r, 0xFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(3, gt(r, 0xFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(2, gt(r, 0xF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(1, gt(r, 0x3)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := gt(r, 0x1) + msb := or(msb, f) + } + + if (msb >= 128) r = ratio >> (msb - 127); + else r = ratio << (127 - msb); + + int256 log_2 = (int256(msb) - 128) << 64; + + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(63, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(62, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(61, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(60, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(59, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(58, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(57, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(56, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(55, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(54, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(53, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(52, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(51, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(50, f)) + } + + int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number + + int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); + int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); + + tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; + } + } +} diff --git a/contracts/oracles/BalancerPriceOracle.sol b/contracts/oracles/BalancerPriceOracle.sol new file mode 100644 index 0000000..06c8b3e --- /dev/null +++ b/contracts/oracles/BalancerPriceOracle.sol @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +interface IVault { + function getPoolTokens(bytes32 poolId) external view + returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock); +} + +/// @title BalancerPriceOracle - a smart contract oracle for Balancer V2 pools +/// @dev This contract acts as an oracle for a specific Balancer V2 pool. It allows: +/// 1) Updating the price by any caller +/// 2) Getting the price by any caller +/// 3) Validating slippage against the oracle +contract BalancerPriceOracle { + event PriceUpdated(address indexed sender, uint256 currentPrice, uint256 cumulativePrice); + + struct PriceSnapshot { + // Time-weighted cumulative price + uint256 cumulativePrice; + // Timestamp of the last update + uint256 lastUpdated; + // Most recent calculated average price + uint256 averagePrice; + } + + // Snapshot history struct + PriceSnapshot public snapshotHistory; + + // Maximum allowed update slippage in % + uint256 public immutable maxSlippage; + // Minimum update time period in seconds + uint256 public immutable minUpdateTimePeriod; + // LP token direction + uint256 public immutable direction; + // Native token (ERC-20) address + address public immutable nativeToken; + // OLAS token address + address public immutable olas; + // Balancer vault address + address public immutable balancerVault; + // Balancer pool Id + bytes32 public immutable balancerPoolId; + + constructor( + address _olas, + address _nativeToken, + uint256 _maxSlippage, + uint256 _minUpdateTimePeriod, + address _balancerVault, + bytes32 _balancerPoolId + ) { + require(_maxSlippage < 100, "Slippage must be less than 100%"); + + olas = _olas; + nativeToken = _nativeToken; + maxSlippage = _maxSlippage; + minUpdateTimePeriod = _minUpdateTimePeriod; + balancerVault = _balancerVault; + balancerPoolId = _balancerPoolId; + + // Get token direction + (address[] memory tokens, , ) = IVault(balancerVault).getPoolTokens(_balancerPoolId); + if (tokens[0] != _nativeToken) { + direction = 1; + } + + // Initialize price snapshot + updatePrice(); + } + + /// @dev Gets the current OLAS token price in 1e18 format. + function getPrice() public view returns (uint256) { + (, uint256[] memory balances, ) = IVault(balancerVault).getPoolTokens(balancerPoolId); + // Native token + uint256 balanceIn = balances[direction]; + // OLAS + uint256 balanceOut = balances[(direction + 1) % 2]; + + return (balanceOut * 1e18) / balanceIn; + } + + /// @dev Updates the time-weighted average price. + /// @notice This implementation only accounts for the first price update in a block. + function updatePrice() public returns (bool) { + uint256 currentPrice = getPrice(); + require(currentPrice > 0, "Price must be non-zero"); + + PriceSnapshot storage snapshot = snapshotHistory; + + if (snapshot.lastUpdated == 0) { + // Initialize snapshot + snapshot.cumulativePrice = 0; + snapshot.averagePrice = currentPrice; + snapshot.lastUpdated = block.timestamp; + emit PriceUpdated(msg.sender, currentPrice, 0); + return true; + } + + // Check if update is too soon + if (block.timestamp < snapshotHistory.lastUpdated + minUpdateTimePeriod) { + return false; + } + + // This implementation only accounts for the first price update in a block. + // Calculate elapsed time since the last update + uint256 elapsedTime = block.timestamp - snapshot.lastUpdated; + + // Update cumulative price with the previous average over the elapsed time + snapshot.cumulativePrice += snapshot.averagePrice * elapsedTime; + + // Update the average price to reflect the current price + uint256 averagePrice = (snapshot.cumulativePrice + (currentPrice * elapsedTime)) / + ((snapshot.cumulativePrice / snapshot.averagePrice) + elapsedTime); + + // Check if price deviation is too high + if (currentPrice < averagePrice - (averagePrice * maxSlippage / 100) || + currentPrice > averagePrice + (averagePrice * maxSlippage / 100)) + { + return false; + } + + snapshot.averagePrice = averagePrice; + snapshot.lastUpdated = block.timestamp; + + emit PriceUpdated(msg.sender, currentPrice, snapshot.cumulativePrice); + + return true; + } + + /// @dev Validates Current price against a TWAP according to slippage tolerance. + /// @param slippage Acceptable slippage tolerance. + function validatePrice(uint256 slippage) external view returns (bool) { + require(slippage <= maxSlippage, "Slippage overflow"); + + PriceSnapshot memory snapshot = snapshotHistory; + + // Ensure there is historical price data + if (snapshot.lastUpdated == 0) return false; + + // Calculate elapsed time + uint256 elapsedTime = block.timestamp - snapshot.lastUpdated; + // Require at least one block since last update + if (elapsedTime == 0) return false; + + // Compute time-weighted average price + uint256 timeWeightedAverage = (snapshot.cumulativePrice + (snapshot.averagePrice * elapsedTime)) / + ((snapshot.cumulativePrice / snapshot.averagePrice) + elapsedTime); + + uint256 tradePrice = getPrice(); + + // Validate against slippage thresholds + uint256 lowerBound = (timeWeightedAverage * (100 - slippage)) / 100; + uint256 upperBound = (timeWeightedAverage * (100 + slippage)) / 100; + + return tradePrice >= lowerBound && tradePrice <= upperBound; + } +} diff --git a/contracts/oracles/UniswapPriceOracle.sol b/contracts/oracles/UniswapPriceOracle.sol new file mode 100644 index 0000000..85e7bcb --- /dev/null +++ b/contracts/oracles/UniswapPriceOracle.sol @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +interface IUniswapV2 { + function token0() external view returns (address); + function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast); + function price0CumulativeLast() external view returns (uint256); + function price1CumulativeLast() external view returns (uint256); +} + +/// @title UniswapPriceOracle - a smart contract oracle wrapper for Uniswap V2 pools +/// @dev This contract acts as an oracle wrapper for a specific Uniswap V2 pool. It allows: +/// 1) Getting the price by any caller +/// 2) Validating slippage against the oracle +contract UniswapPriceOracle { + // LP token address + address public immutable pair; + // Max allowable slippage + uint256 public immutable maxSlippage; + // LP token direction + uint256 public immutable direction; + + constructor(address _nativeToken, uint256 _maxSlippage, address _pair) { + pair = _pair; + maxSlippage = _maxSlippage; + + // Get token direction + address token0 = IUniswapV2(pair).token0(); + if (token0 != _nativeToken) { + direction = 1; + } + } + + /// @dev Gets the current OLAS token price in 1e18 format. + function getPrice() public view returns (uint256) { + uint256[] memory balances = new uint256[](2); + (balances[0], balances[1], ) = IUniswapV2(pair).getReserves(); + // Native token + uint256 balanceIn = balances[direction]; + // OLAS + uint256 balanceOut = balances[(direction + 1) % 2]; + + return (balanceOut * 1e18) / balanceIn; + } + + /// @dev Updates the time-weighted average price. + /// @notice This is a compatibility function, which always needs to return false, as TWAP is updated automatically. + function updatePrice() external pure returns (bool) { + // Nothing to update; use built-in TWAP from Uniswap V2 pool + return false; + } + + /// @dev Validates the current price against a TWAP according to slippage tolerance. + /// @param slippage the acceptable slippage tolerance + function validatePrice(uint256 slippage) external view returns (bool) { + require(slippage <= maxSlippage, "Slippage overflow"); + + // Compute time-weighted average price + // Fetch the cumulative prices from the pair + uint256 cumulativePriceLast; + if (direction == 0) { + cumulativePriceLast = IUniswapV2(pair).price1CumulativeLast(); + } else { + cumulativePriceLast = IUniswapV2(pair).price0CumulativeLast(); + } + + // Fetch the reserves and the last block timestamp + (, , uint256 blockTimestampLast) = IUniswapV2(pair).getReserves(); + + // Require at least one block since last update + if (block.timestamp == blockTimestampLast) { + return false; + } + uint256 elapsedTime = block.timestamp - blockTimestampLast; + + uint256 tradePrice = getPrice(); + + // Calculate cumulative prices + uint256 cumulativePrice = cumulativePriceLast + (tradePrice * elapsedTime); + + // Calculate the TWAP for OLAS in terms of native token + uint256 timeWeightedAverage = (cumulativePrice - cumulativePriceLast) / elapsedTime; + + // Get the final derivation to compare with slippage + // Final derivation value must be + uint256 derivation = (tradePrice > timeWeightedAverage) + ? ((tradePrice - timeWeightedAverage) * 1e16) / timeWeightedAverage + : ((timeWeightedAverage - tradePrice) * 1e16) / timeWeightedAverage; + + return derivation <= slippage; + } +} diff --git a/docs/contracts.md b/docs/contracts.md index dcf8769..4a55c12 100644 --- a/docs/contracts.md +++ b/docs/contracts.md @@ -35,6 +35,31 @@ Run the tests: npx hardhat test ``` +### Test on branch + +First, install test setup + +```bash +curl -L https://foundry.paradigm.xyz | bash +``` + +Run forked test chain +```bash +export ANVIL_IP_ADDR=0.0.0.0 +anvil --fork-url https://soft-sly-slug.base-mainnet.quiknode.pro/f13d998d9d68685faeee903499e15b4b386a8b1c/ --port 9000 --chain-id 8543 --no-storage-caching --steps-tracing +``` + +Copy configs + +```bash +cp scripts/deployment/globals_base_mainnet.json globals.json +``` + +On separate terminal run test +```bash +npx hardhat run test/MemeBase.js --network localFork +``` + # Acknowledgements The registries contracts were inspired and based on the following sources: - [Rari-Capital](https://github.com/Rari-Capital/solmate). Last known audited version: `eaa7041378f9a6c12f943de08a6c41b31a9870fc`; \ No newline at end of file diff --git a/package.json b/package.json index b1e380d..f1036d3 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,9 @@ "author": "", "license": "ISC", "bugs": { - "url": "https://github.com/dvielaf/autonolas-staking-programmes/issues" + "url": "https://github.com/dvielaf/meme-ooorr/issues" }, - "homepage": "https://github.com/dvielaf/autonolas-staking-programmes#readme", + "homepage": "https://github.com/dvielaf/meme-ooorr#readme", "devDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^1.0.6", "@nomicfoundation/hardhat-network-helpers": "^1.0.9", diff --git a/scripts/deployment/deploy_00_balancer_price_oracle.js b/scripts/deployment/deploy_00_balancer_price_oracle.js new file mode 100644 index 0000000..e29a0b0 --- /dev/null +++ b/scripts/deployment/deploy_00_balancer_price_oracle.js @@ -0,0 +1,77 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("0-1. EOA to deploy BalancerPriceOracle"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const BalancerPriceOracle = await ethers.getContractFactory("BalancerPriceOracle"); + console.log("You are signing the following transaction: BalancerPriceOracle.connect(EOA).deploy()"); + const balancerPriceOracle = await BalancerPriceOracle.connect(EOA).deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.maxOracleSlippage, parsedData.minUpdateTimePeriod, parsedData.balancerVaultAddress, + parsedData.balancerPoolId, { gasPrice }); + const result = await balancerPriceOracle.deployed(); + + // Transaction details + console.log("Contract deployment: BalancerPriceOracle"); + console.log("Contract address:", balancerPriceOracle.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.balancerPriceOracleAddress = balancerPriceOracle.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_00_balancer_price_oracle.js --network " + providerName + " " + balancerPriceOracle.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_00_uniswap_price_oracle.js b/scripts/deployment/deploy_00_uniswap_price_oracle.js new file mode 100644 index 0000000..069bcd7 --- /dev/null +++ b/scripts/deployment/deploy_00_uniswap_price_oracle.js @@ -0,0 +1,77 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + const nativeTokenAddress = parsedData.celoAddress; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("0-2. EOA to deploy UniswapPriceOracle"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const UniswapPriceOracle = await ethers.getContractFactory("UniswapPriceOracle"); + console.log("You are signing the following transaction: UniswapPriceOracle.connect(EOA).deploy()"); + const uniswapPriceOracle = await UniswapPriceOracle.connect(EOA).deploy(nativeTokenAddress, + parsedData.maxOracleSlippage, parsedData.pairAddress, { gasPrice }); + const result = await uniswapPriceOracle.deployed(); + + // Transaction details + console.log("Contract deployment: UniswapPriceOracle"); + console.log("Contract address:", uniswapPriceOracle.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.uniswapPriceOracleAddress = uniswapPriceOracle.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_00_uniswap_price_oracle.js --network " + providerName + " " + uniswapPriceOracle.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_01_buy_back_burner_balancer.js b/scripts/deployment/deploy_01_buy_back_burner_balancer.js new file mode 100644 index 0000000..ff49afd --- /dev/null +++ b/scripts/deployment/deploy_01_buy_back_burner_balancer.js @@ -0,0 +1,75 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("1-1. EOA to deploy BuyBackBurnerBalancer"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const BuyBackBurnerBalancer = await ethers.getContractFactory("BuyBackBurnerBalancer"); + console.log("You are signing the following transaction: BuyBackBurnerBalancer.connect(EOA).deploy()"); + const buyBackBurner = await BuyBackBurnerBalancer.connect(EOA).deploy({ gasPrice }); + const result = await buyBackBurner.deployed(); + + // Transaction details + console.log("Contract deployment: BuyBackBurnerBalancer"); + console.log("Contract address:", buyBackBurner.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.buyBackBurnerAddress = buyBackBurner.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --network " + providerName + " " + buyBackBurner.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_01_buy_back_burner_uniswap.js b/scripts/deployment/deploy_01_buy_back_burner_uniswap.js new file mode 100644 index 0000000..e67347f --- /dev/null +++ b/scripts/deployment/deploy_01_buy_back_burner_uniswap.js @@ -0,0 +1,75 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("1-2. EOA to deploy BuyBackBurnerUniswap"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const BuyBackBurnerUniswap = await ethers.getContractFactory("BuyBackBurnerUniswap"); + console.log("You are signing the following transaction: BuyBackBurnerUniswap.connect(EOA).deploy()"); + const buyBackBurner = await BuyBackBurnerUniswap.connect(EOA).deploy({ gasPrice }); + const result = await buyBackBurner.deployed(); + + // Transaction details + console.log("Contract deployment: BuyBackBurnerUniswap"); + console.log("Contract address:", buyBackBurner.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.buyBackBurnerAddress = buyBackBurner.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --network " + providerName + " " + buyBackBurner.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_02_buy_back_burner_balancer_proxy.js b/scripts/deployment/deploy_02_buy_back_burner_balancer_proxy.js new file mode 100644 index 0000000..ac8b7d2 --- /dev/null +++ b/scripts/deployment/deploy_02_buy_back_burner_balancer_proxy.js @@ -0,0 +1,83 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + const buyBackBurnerAddress = parsedData.buyBackBurnerAddress; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Assemble the contributors proxy data + const buyBackBurner = await ethers.getContractAt("BuyBackBurnerBalancer", buyBackBurnerAddress); + const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "bytes32", "uint256"], + [[parsedData.olasAddress, parsedData.wethAddress, parsedData.balancerPriceOracleAddress, + parsedData.balancerVaultAddress], parsedData.balancerPoolId, parsedData.maxBuyBackSlippage]); + const proxyData = buyBackBurner.interface.encodeFunctionData("initialize", [proxyPayload]); + + // Transaction signing and execution + console.log("2-1. EOA to deploy BuyBackBurnerProxy based on BuyBackBurnerBalancer"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const BuyBackBurnerProxy = await ethers.getContractFactory("BuyBackBurnerProxy"); + console.log("You are signing the following transaction: BuyBackBurnerProxy.connect(EOA).deploy()"); + const buyBackBurnerProxy = await BuyBackBurnerProxy.connect(EOA).deploy(buyBackBurnerAddress, proxyData, { gasPrice }); + const result = await buyBackBurnerProxy.deployed(); + + // Transaction details + console.log("Contract deployment: buyBackBurnerProxy"); + console.log("Contract address:", buyBackBurnerProxy.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.buyBackBurnerProxyAddress = buyBackBurnerProxy.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_02_buy_back_burner_balancer_proxy.js --network " + providerName + " " + buyBackBurnerProxy.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_02_buy_back_burner_uniswap_proxy.js b/scripts/deployment/deploy_02_buy_back_burner_uniswap_proxy.js new file mode 100644 index 0000000..3de743b --- /dev/null +++ b/scripts/deployment/deploy_02_buy_back_burner_uniswap_proxy.js @@ -0,0 +1,84 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + const buyBackBurnerAddress = parsedData.buyBackBurnerAddress; + const nativeTokenAddress = parsedData.celoAddress; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Assemble the contributors proxy data + const buyBackBurner = await ethers.getContractAt("BuyBackBurnerUniswap", buyBackBurnerAddress); + const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "uint256"], + [[parsedData.olasAddress, nativeTokenAddress, parsedData.uniswapPriceOracleAddress, + parsedData.routerV2Address], parsedData.maxBuyBackSlippage]); + const proxyData = buyBackBurner.interface.encodeFunctionData("initialize", [proxyPayload]); + + // Transaction signing and execution + console.log("2-2. EOA to deploy BuyBackBurnerProxy based on BuyBackBurnerUniswap "); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const BuyBackBurnerProxy = await ethers.getContractFactory("BuyBackBurnerProxy"); + console.log("You are signing the following transaction: BuyBackBurnerProxy.connect(EOA).deploy()"); + const buyBackBurnerProxy = await BuyBackBurnerProxy.connect(EOA).deploy(buyBackBurnerAddress, proxyData, { gasPrice }); + const result = await buyBackBurnerProxy.deployed(); + + // Transaction details + console.log("Contract deployment: buyBackBurnerProxy"); + console.log("Contract address:", buyBackBurnerProxy.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.buyBackBurnerProxyAddress = buyBackBurnerProxy.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_02_buy_back_burner_uniswap_proxy.js --network " + providerName + " " + buyBackBurnerProxy.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_03_meme_base.js b/scripts/deployment/deploy_03_meme_base.js new file mode 100644 index 0000000..0e0c1d0 --- /dev/null +++ b/scripts/deployment/deploy_03_meme_base.js @@ -0,0 +1,90 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + console.log("Getting campaign data"); + const redemptionsFile = "scripts/deployment/memebase_campaign.json"; + dataFromJSON = fs.readFileSync(redemptionsFile, "utf8"); + const redemptionsData = JSON.parse(dataFromJSON); + console.log("Number of entries:", redemptionsData.length); + + const accounts = new Array(); + const amounts = new Array(); + for (let i = 0; i < redemptionsData.length; i++) { + accounts.push(redemptionsData[i]["hearter"]); + amounts.push(redemptionsData[i]["amount"].toString()); + } + + // Transaction signing and execution + console.log("3. EOA to deploy MemeBase"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const MemeBase = await ethers.getContractFactory("MemeBase"); + console.log("You are signing the following transaction: MemeBase.connect(EOA).deploy()"); + const memeBase = await MemeBase.connect(EOA).deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, parsedData.buyBackBurnerProxyAddress, parsedData.minNativeTokenValue, + accounts, amounts, { gasPrice, gasLimit: 11000000}); + const result = await memeBase.deployed(); + + // Transaction details + console.log("Contract deployment: MemeBase"); + console.log("Contract address:", memeBase.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.memeBaseAddress = memeBase.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_03_meme_base.js --network " + providerName + " " + memeBase.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deploy_02_meme_celo.js b/scripts/deployment/deploy_04_meme_celo.js similarity index 86% rename from scripts/deployment/deploy_02_meme_celo.js rename to scripts/deployment/deploy_04_meme_celo.js index bc62ec2..90d9f74 100644 --- a/scripts/deployment/deploy_02_meme_celo.js +++ b/scripts/deployment/deploy_04_meme_celo.js @@ -11,6 +11,7 @@ async function main() { const useLedger = parsedData.useLedger; const derivationPath = parsedData.derivationPath; const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; let networkURL = parsedData.networkURL; if (providerName === "polygon") { @@ -40,12 +41,12 @@ async function main() { console.log("EOA is:", deployer); // Transaction signing and execution - console.log("2. EOA to deploy MemeCelo"); + console.log("4. EOA to deploy MemeCelo"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); const MemeCelo = await ethers.getContractFactory("MemeCelo"); console.log("You are signing the following transaction: MemeCelo.connect(EOA).deploy()"); - const memeCelo = await MemeCelo.connect(EOA).deploy(parsedData.olasAddress, parsedData.cusdAddress, - parsedData.routerAddress, parsedData.factoryAddress, parsedData.minNativeTokenValue, parsedData.celoAddress, - parsedData.l2TokenBridgeAddress, parsedData.oracleAddress); + const memeCelo = await MemeCelo.connect(EOA).deploy(parsedData.olasAddress, parsedData.celoAddress, + parsedData.uniV3positionManagerAddress, parsedData.buyBackBurnerProxyAddress, parsedData.minNativeTokenValue, { gasPrice }); const result = await memeCelo.deployed(); // Transaction details @@ -63,7 +64,7 @@ async function main() { // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/verify_02_meme_celo.js --network " + providerName + " " + memeCelo.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_04_meme_celo.js --network " + providerName + " " + memeCelo.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/deploy_01_meme_base.js b/scripts/deployment/deploy_05_meme_arbitrum.js similarity index 71% rename from scripts/deployment/deploy_01_meme_base.js rename to scripts/deployment/deploy_05_meme_arbitrum.js index e0b6f31..892d8ac 100644 --- a/scripts/deployment/deploy_01_meme_base.js +++ b/scripts/deployment/deploy_05_meme_arbitrum.js @@ -11,6 +11,7 @@ async function main() { const useLedger = parsedData.useLedger; const derivationPath = parsedData.derivationPath; const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; let networkURL = parsedData.networkURL; if (providerName === "polygon") { @@ -40,30 +41,30 @@ async function main() { console.log("EOA is:", deployer); // Transaction signing and execution - console.log("1. EOA to deploy MemeBase"); - const MemeBase = await ethers.getContractFactory("MemeBase"); - console.log("You are signing the following transaction: MemeBase.connect(EOA).deploy()"); - const memeBase = await MemeBase.connect(EOA).deploy(parsedData.olasAddress, parsedData.usdcAddress, - parsedData.routerAddress, parsedData.factoryAddress, parsedData.minNativeTokenValue, parsedData.wethAddress, - parsedData.l2TokenBridgeAddress, parsedData.oracleAddress, parsedData.balancerVaultAddress, parsedData.balancerPoolId); - const result = await memeBase.deployed(); + console.log("5. EOA to deploy MemeArbitrum"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); + const MemeArbitrum = await ethers.getContractFactory("MemeArbitrum"); + console.log("You are signing the following transaction: MemeArbitrum.connect(EOA).deploy()"); + const memeArbitrum = await MemeArbitrum.connect(EOA).deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue, { gasPrice }); + const result = await memeArbitrum.deployed(); // Transaction details - console.log("Contract deployment: MemeBase"); - console.log("Contract address:", memeBase.address); + console.log("Contract deployment: MemeArbitrum"); + console.log("Contract address:", memeArbitrum.address); console.log("Transaction:", result.deployTransaction.hash); // Wait for half a minute for the transaction completion await new Promise(r => setTimeout(r, 30000)); // Writing updated parameters back to the JSON file - parsedData.memeBaseAddress = memeBase.address; + parsedData.memeArbitrumAddress = memeArbitrum.address; fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/verify_01_meme_base.js --network " + providerName + " " + memeBase.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_05_meme_arbitrum.js --network " + providerName + " " + memeArbitrum.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/deploy_03_meme_activity_checker.js b/scripts/deployment/deploy_06_meme_activity_checker.js similarity index 96% rename from scripts/deployment/deploy_03_meme_activity_checker.js rename to scripts/deployment/deploy_06_meme_activity_checker.js index 681a7c5..9d45dbd 100644 --- a/scripts/deployment/deploy_03_meme_activity_checker.js +++ b/scripts/deployment/deploy_06_meme_activity_checker.js @@ -43,7 +43,7 @@ async function main() { console.log("EOA is:", deployer); // Transaction signing and execution - console.log("2. EOA to deploy MemeActivityChecker"); + console.log("6. EOA to deploy MemeActivityChecker"); const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); const MemeActivityChecker = await ethers.getContractFactory("MemeActivityChecker"); console.log("You are signing the following transaction: MemeActivityChecker.connect(EOA).deploy()"); @@ -65,7 +65,7 @@ async function main() { // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/verify_03_meme_activity_checker.js --network " + providerName + " " + memeActivityChecker.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/verify_06_meme_activity_checker.js --network " + providerName + " " + memeActivityChecker.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/globals_arbitrum_one.json b/scripts/deployment/globals_arbitrum_one.json new file mode 100644 index 0000000..52ff0f0 --- /dev/null +++ b/scripts/deployment/globals_arbitrum_one.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/9'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"2","olasAddress":"0x064f8b858c2a603e1b106a2039f5446d32dc81c1","wethAddress":"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1","uniV3positionManagerAddress":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","minNativeTokenValue":"10000000000000000","l2TokenBridgeAddress":"0x09e9222E96E7B4AE2a407B98d48e330053351EEe","routerV2Address":"0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24","balancerVaultAddress":"0xBA12222222228d8Ba445958a75a0704d566BF2C8","balancerPoolId":"0xaf8912a3c4f55a8584b67df30ee0ddf0e60e01f80002000000000000000004fc","maxOracleSlippage":"50","minUpdateTimePeriod":"900","maxBuyBackSlippage":"10","minBridgedAmount":"1000000000000000000000"} diff --git a/scripts/deployment/globals_arbitrum_one_meme_alpha.json b/scripts/deployment/globals_arbitrum_one_meme_alpha.json new file mode 100644 index 0000000..5295e72 --- /dev/null +++ b/scripts/deployment/globals_arbitrum_one_meme_alpha.json @@ -0,0 +1,42 @@ +{ + "contractVerification":true, + "useLedger":true, + "derivationPath":"m/44'/60'/9'/0/0", + "providerName":"arbitrumOne", + "networkURL":"https://arb1.arbitrum.io/rpc", + "gasPriceInGwei":"2", + "bridgeMediatorAddress":"0x4d30F68F5AA342d296d4deE4bB1Cacca912dA70F", + "gnosisSafeAddress":"0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552", + "gnosisSafeProxyFactoryAddress":"0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "fallbackHandlerAddress":"0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4", + "olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1", + "multisigProxyHash130":"0xb89c1b3bdf2cf8827818646bce9a8f6e372885f8c55e5c07acbd307cb133b000", + "serviceRegistryAddress":"0xE3607b00E75f6405248323A9417ff6b39B244b50", + "serviceRegistryTokenUtilityAddress":"0x3d77596beb0f130a4415df3D2D8232B3d3D31e44", + "serviceManagerTokenAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5", + "gnosisSafeMultisigImplementationAddress":"0x63e66d7ad413C01A7b49C7FF4e3Bb765C4E4bd1b", + "stakingTokenAddress":"0x04b0007b2aFb398015B76e5f22993a1fddF83644", + "stakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80", + "memeFactoryAddress":"", + "livenessRatio":"34722222222222", + "memeActivityCheckerAddress":"", + "stakingParams": + { + "metadataHash":"", + "maxNumServices":"100", + "rewardsPerSecond":"4398148148152", + "minStakingDeposit":"50000000000000000000", + "minNumStakingPeriods":"3", + "maxNumInactivityPeriods":"3", + "livenessPeriod":"86400", + "timeForEmissions":"2592000", + "numAgentInstances":"1", + "agentIds":["43"], + "threshold":"1", + "configHash":"0x0000000000000000000000000000000000000000000000000000000000000000", + "proxyHash":"0xb89c1b3bdf2cf8827818646bce9a8f6e372885f8c55e5c07acbd307cb133b000", + "serviceRegistry":"0xE3607b00E75f6405248323A9417ff6b39B244b50", + "activityChecker":"" + }, + "stakingTokenInstanceAddress":"" +} \ No newline at end of file diff --git a/scripts/deployment/globals_base_mainnet.json b/scripts/deployment/globals_base_mainnet.json index 1ff721b..5fa28ed 100644 --- a/scripts/deployment/globals_base_mainnet.json +++ b/scripts/deployment/globals_base_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/9'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","usdcAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","routerAddress":"0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24","factoryAddress":"0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6","minNativeTokenValue":"10000000000000000","wethAddress":"0x4200000000000000000000000000000000000006","l2TokenBridgeAddress":"0x4200000000000000000000000000000000000010","oracleAddress":"0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70","balancerVaultAddress":"0xBA12222222228d8Ba445958a75a0704d566BF2C8","balancerPoolId":"0x5332584890d6e415a6dc910254d6430b8aab7e69000200000000000000000103","memeBaseAddress":"0x42156841253f428cB644Ea1230d4FdDFb70F8891"} +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/9'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"0.5","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","wethAddress":"0x4200000000000000000000000000000000000006","uniV3positionManagerAddress":"0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1","minNativeTokenValue":"10000000000000000","l2TokenBridgeAddress":"0x4200000000000000000000000000000000000010","routerV2Address":"0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24","balancerVaultAddress":"0xBA12222222228d8Ba445958a75a0704d566BF2C8","balancerPoolId":"0x2da6e67c45af2aaa539294d9fa27ea50ce4e2c5f0002000000000000000001a3","maxOracleSlippage":"50","minUpdateTimePeriod":"900","maxBuyBackSlippage":"10","minBridgedAmount":"1000000000000000000000","factoryAddress":"0x33128a8fC17869897dcE68Ed026d694621f6FDfD","quoterAddress":"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a","routerV3Address":"0x2626664c2603336E57B271c5C0b26F421741e481","balancerPriceOracleAddress":"0x586D916819d9B707101f81e4cDD22cE119D1C220","buyBackBurnerAddress":"0xEea5F1e202dc43607273d54101fF8b58FB008A99","buyBackBurnerProxyAddress":"0x3FD8C757dE190bcc82cF69Df3Cd9Ab15bCec1426","memeBaseAddress":"0x82A9c823332518c32a0c0eDC050Ef00934Cf04D4"} diff --git a/scripts/deployment/globals_base_mainnet_meme_alpha.json b/scripts/deployment/globals_base_mainnet_meme_alpha.json index 6cb16a7..d35d243 100644 --- a/scripts/deployment/globals_base_mainnet_meme_alpha.json +++ b/scripts/deployment/globals_base_mainnet_meme_alpha.json @@ -17,12 +17,12 @@ "gnosisSafeMultisigImplementationAddress":"0xBb7e1D6Cb6F243D6bdE81CE92a9f2aFF7Fbe7eac", "stakingTokenAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80", "stakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a", - "memeFactoryAddress":"0x42156841253f428cb644ea1230d4fddfb70f8891", + "memeFactoryAddress":"", "livenessRatio":"34722222222222", - "memeActivityCheckerAddress":"0xAe2f766506F6BDF740Cc348a90139EF317Fa7Faf", + "memeActivityCheckerAddress":"", "stakingParams": { - "metadataHash":"0xc56641178c543644dd40ac25c1b75169a709fa454568afc93af3ed26feae768f", + "metadataHash":"", "maxNumServices":"100", "rewardsPerSecond":"4398148148152", "minStakingDeposit":"50000000000000000000", @@ -36,7 +36,7 @@ "configHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "proxyHash":"0xb89c1b3bdf2cf8827818646bce9a8f6e372885f8c55e5c07acbd307cb133b000", "serviceRegistry":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE", - "activityChecker":"0xAe2f766506F6BDF740Cc348a90139EF317Fa7Faf" + "activityChecker":"" }, - "stakingTokenInstanceAddress":"0x06702A05312091013FdB50C8b60B98ca30762931" + "stakingTokenInstanceAddress":"" } \ No newline at end of file diff --git a/scripts/deployment/globals_celo_mainnet.json b/scripts/deployment/globals_celo_mainnet.json index 846db1b..4bb50dd 100644 --- a/scripts/deployment/globals_celo_mainnet.json +++ b/scripts/deployment/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/9'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","cusdAddress":"0x765DE816845861e75A25fCA122bb6898B8B1282a","celoAddress":"0x471EcE3750Da237f93B8E339c536989b8978a438","routerAddress":"0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121","factoryAddress":"0x62d5b84bE28a183aBB507E125B384122D2C25fAE","minNativeTokenValue":"10000000000000000000","l2TokenBridgeAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","oracleAddress":"0x0568fD19986748cEfF3301e55c0eb1E729E0Ab7e","memeCeloAddress":"0x42156841253f428cB644Ea1230d4FdDFb70F8891"} +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/9'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"6","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","celoAddress":"0x471EcE3750Da237f93B8E339c536989b8978a438","uniV3positionManagerAddress":"0x3d79EdAaBC0EaB6F08ED885C05Fc0B014290D95A","minNativeTokenValue":"10000000000000000000","l2TokenBridgeAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","routerV2Address":"0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121","pairAddress":"0x2976Fa805141b467BCBc6334a69AffF4D914d96A","maxOracleSlippage":"50","minUpdateTimePeriod":"900","maxBuyBackSlippage":"10","uniswapPriceOracleAddress":"0xcdC6e38cbCc5C03f181eC8a22b92D02cc9d5A56E","buyBackBurnerAddress":"0x71bF5C6D29b01E6A142c957d5A3DBB327CB774d1","buyBackBurnerProxyAddress":"0x586D916819d9B707101f81e4cDD22cE119D1C220","memeCeloAddress":"0xEea5F1e202dc43607273d54101fF8b58FB008A99"} \ No newline at end of file diff --git a/scripts/deployment/globals_celo_mainnet_meme_alpha.json b/scripts/deployment/globals_celo_mainnet_meme_alpha.json index a390889..596623f 100644 --- a/scripts/deployment/globals_celo_mainnet_meme_alpha.json +++ b/scripts/deployment/globals_celo_mainnet_meme_alpha.json @@ -15,12 +15,12 @@ "serviceManagerTokenAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5", "stakingTokenAddress":"0xe1E1B286EbE95b39F785d8069f2248ae9C41b7a9", "stakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55", - "memeFactoryAddress":"0x42156841253f428cB644Ea1230d4FdDFb70F8891", + "memeFactoryAddress":"", "livenessRatio":"34722222222222", - "memeActivityCheckerAddress":"0xAe2f766506F6BDF740Cc348a90139EF317Fa7Faf", + "memeActivityCheckerAddress":"", "stakingParams": { - "metadataHash":"0x00e5bc2c8231616c89cba05679ba67b7ccf34ccc30141453e3ef29e5bc2f9f7c", + "metadataHash":"", "maxNumServices":"100", "rewardsPerSecond":"4398148148152", "minStakingDeposit":"50000000000000000000", @@ -34,7 +34,7 @@ "configHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "proxyHash":"0xb89c1b3bdf2cf8827818646bce9a8f6e372885f8c55e5c07acbd307cb133b000", "serviceRegistry":"0xE3607b00E75f6405248323A9417ff6b39B244b50", - "activityChecker":"0xAe2f766506F6BDF740Cc348a90139EF317Fa7Faf" + "activityChecker":"" }, - "stakingTokenInstanceAddress":"0xf39cd0eE4C502Df7D26F28cFAdd579724A3CFCe8" + "stakingTokenInstanceAddress":"" } \ No newline at end of file diff --git a/scripts/deployment/globals_ethereum_mainnet.json b/scripts/deployment/globals_ethereum_mainnet.json new file mode 100644 index 0000000..8637012 --- /dev/null +++ b/scripts/deployment/globals_ethereum_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/9'/0/0","providerName":"mainnet","networkURL":"https://eth-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"50","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","wethAddress":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","uniV3positionManagerAddress":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","minNativeTokenValue":"10000000000000000","routerV2Address":"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D","pairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","maxOracleSlippage":"50","minUpdateTimePeriod":"900","maxBuyBackSlippage":"10","factoryAddress":"0x1F98431c8aD98523631AE4a59f267346ea31F984","quoterAddress":"0x61fFE014bA17989E743c5F6cB21bF9697530B21e","routerV3Address":"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"} \ No newline at end of file diff --git a/scripts/deployment/memebase_campaign.json b/scripts/deployment/memebase_campaign.json new file mode 100644 index 0000000..06370df --- /dev/null +++ b/scripts/deployment/memebase_campaign.json @@ -0,0 +1,2263 @@ +[ + { + "blockNumber": 22902993, + "transactionHash": "0x0d6b4b647a6639bcade81f215ec817d48ee1c8d635dcfdf355ef4bd1ff7ed3a3", + "hearter": "0x51e1F4217166Ce136647BB2a301031ABd4000000", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22903024, + "transactionHash": "0xe8b7e959cd8e272f5841163591ff1f9348ac5b14c53d1aa8ccc882912ef6e13a", + "hearter": "0x51e1F4217166Ce136647BB2a301031ABd4000000", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 400000000000000000 + }, + { + "blockNumber": 22904253, + "transactionHash": "0xbfa60c7f8272892adb78c0fd24ebab0e86529b662a4de7003026bfc31f9c3cf5", + "hearter": "0x8046F1a06478A151027b501caA65e841D87Ec876", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22904400, + "transactionHash": "0xc556ef6a788fb2753f01d91368f5bf35a2461416b61018329a65480ad13e3f21", + "hearter": "0x51e1F4217166Ce136647BB2a301031ABd4000000", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22911792, + "transactionHash": "0x29b60f1d8eb179e84d27de50e2f9a371ebbaf6254f1661d99cae46ce27095dc2", + "hearter": "0xd57114A9Af5FF720a8C9e33B1A5BbdeeF3Ff0186", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22911813, + "transactionHash": "0xc27fef14885cc9aed7692be89707c9b7151b204bc52387bf8b0377137af801e4", + "hearter": "0x022603caF6333b772f3e4C61A67c1f7a794f44A4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22911942, + "transactionHash": "0xce9675d8fcf9351b40c3cb539953fe0989553708cd5fc5e8ecadf7b9804b25a0", + "hearter": "0x4dDFdC5f26204826C9f8c6f1A1e8697225b4842a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22911988, + "transactionHash": "0x301d2d73701aabd540e9084438f78a75d1d4f643b1d25a3fe882fd71c4a5ea07", + "hearter": "0x37cf7625BC3F3f41Cf5Edb65Eb90cdC2F180Af33", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 600000000000000 + }, + { + "blockNumber": 22912003, + "transactionHash": "0x0b35b6d70b6002ad810fd0fd2c22a2c6f65095437d824f9f9b5800112219f415", + "hearter": "0x3577f85Dd62738bfF9e0009d4e74D2d568074297", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22912066, + "transactionHash": "0xc04d462dfca3793fae9295583c45abbfb983b341c8b841b754089943d94b8f71", + "hearter": "0xAA01C01FbA173f68895a4E7af95803de7b40636A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22912271, + "transactionHash": "0x3ef06120b134b868a703ab747c12bb17162192930277b83e121460f1534c26f4", + "hearter": "0x022603caF6333b772f3e4C61A67c1f7a794f44A4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000 + }, + { + "blockNumber": 22912321, + "transactionHash": "0x5ec84dc38aade46a11b3df144f284ff1af23f0c92da1974275be6e837ea263a1", + "hearter": "0x3310d442dCDbE0fB63aEAB18aCa7D1293698cF18", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22912372, + "transactionHash": "0xec7e6aa29009b765a4f1cbbbaac8007ce9c44d25701cad88facdbb7db5673eac", + "hearter": "0x37cf7625BC3F3f41Cf5Edb65Eb90cdC2F180Af33", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000 + }, + { + "blockNumber": 22912404, + "transactionHash": "0x48e628cad73f75b355d26e6ea7952dffcba420f1ef72e9ec59f366fbe78e5215", + "hearter": "0xbdC960428749d82499De529e6F61Be420dadDaED", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22912494, + "transactionHash": "0xc82ffc45d61c7dbd8f881ea7db098a42db7fbe3740f554c5c9d0efe4b3fa4792", + "hearter": "0xD4da6CF5Edfac7f2e4ffd06A7c50C5758831d8E4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22912502, + "transactionHash": "0x668dd6ae8be89b9d99965dc9397bea4c631b9db98c597105129819864ce5f026", + "hearter": "0x587c6c89121B320E77F38Be39832A8D4Ba99da70", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22912803, + "transactionHash": "0x80043347d539c43d6c5fc3ba3520a90c7c6cc904b6d4db67ad965179b0220b05", + "hearter": "0xAA01C01FbA173f68895a4E7af95803de7b40636A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22912893, + "transactionHash": "0xdd6cb4412d0dbfb1d808422d1e010da3ab50765bf7072144786172dc5e759240", + "hearter": "0xd57114A9Af5FF720a8C9e33B1A5BbdeeF3Ff0186", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22912905, + "transactionHash": "0xaf298e3b2aa3cc4dadb98feaa665dbc52e8c0f50acc5a55ed321f36055fac8ab", + "hearter": "0xF43F3c412f1823061002eBD0d40ffe4Cea268252", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22913239, + "transactionHash": "0x26b624d8989dba68d61341268e2d4f76d5423756b63389addceeb177116d854a", + "hearter": "0x5a0df62eae698Af785fC2099305299C073AE1842", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22913286, + "transactionHash": "0x0afd6361982b73c6a3eb4fcbeaf08f362bb56d0866c2e59feb0afc6824c9ac83", + "hearter": "0x3310d442dCDbE0fB63aEAB18aCa7D1293698cF18", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22913477, + "transactionHash": "0xe4529b42965f4aa39fcf5c722f4fe4d76c51cd55e00ed53fe973be40ba495cbb", + "hearter": "0x1fC744dC55181A702Ca2e2163D67b828801E10c3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22913542, + "transactionHash": "0xe40f49413b6aa686616b22951c46eccc51367d74a75b8d3ed6afbdf5c901e58e", + "hearter": "0xaCab11aeB6eB6815F1b07036eeeaf042eFBd7264", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22913988, + "transactionHash": "0xa38cf9192360f0952d5218b1d64cc995f62b6c0a60ae8fec5af27563e246ab3f", + "hearter": "0xE62c66bFD4C5Dd559AE504107B9B6F0Dd4aFB431", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22914297, + "transactionHash": "0xe845434f943c101404d3b9d5f093efb1ad473a9a70a77a45fdc75172ab4a576d", + "hearter": "0xD4da6CF5Edfac7f2e4ffd06A7c50C5758831d8E4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22914361, + "transactionHash": "0x40eaa92c5cb467ddcf2dcc6d098f2ca36f8630b38945d16e16407b650b1ad375", + "hearter": "0x2f7f77e019c0D211289E7E1C1f25438FEae0F069", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22914690, + "transactionHash": "0xc15da8cbab67ed2d34c1ecc683e9b5fd9eb20eb430b9431952ce279038e3492e", + "hearter": "0x22f6EDb55790B0Fe841C5BA9aa30792ebcB55863", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22914800, + "transactionHash": "0x250914d77cb54302a442b87707ccd65b966e2729e8d71b07a55a803850a29be5", + "hearter": "0x9284C3c71E30ae655cb385EfCF45BCE18bc98D3E", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22914825, + "transactionHash": "0x45f103c63a97500006b806a9cd4ec4604ef9b9f1a0a6eff12f39736036481bf3", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22914830, + "transactionHash": "0x3bc56cc26dc0352bd889b4fc0e359238dc7108a889359c5742affa8eb4bf4388", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22914877, + "transactionHash": "0xbef8a739733eed11f20e3ca8e1e6889e32bb22033c0c12a7a4609b7da79da391", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22914925, + "transactionHash": "0x5ceee4e792373a5462b9e56abdc50bf3f95a8b174812669be1a62ad473ee1bdd", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22915030, + "transactionHash": "0x018f9b31c441a7ba0c477fd8fbcf3706b5b8e1bda9c5b16fc2aa99200d3194b2", + "hearter": "0xAc137F713b80c53a6D1afb82373C6A5BB3baC2AD", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 6020000000000000 + }, + { + "blockNumber": 22915040, + "transactionHash": "0xbaf9e3c3429db3aec89262f4e53940219372648e55c1866848bbffec30c7e8e9", + "hearter": "0x91992923cd4185AA6787AAf0F07B0fa1ac79a997", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22915041, + "transactionHash": "0x483e513ea239b0cfc32dbbb7a255c7a0bb5cc886b8b3c5427a8d62414166535a", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 380000000000000000 + }, + { + "blockNumber": 22915107, + "transactionHash": "0x383cfc190e9d657abaf4839eae8ca4ed736bc2b42ad3ad7c41ca4012b635fdf3", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1030000000000000000 + }, + { + "blockNumber": 22915109, + "transactionHash": "0x28c621c3d4a13d3a30054c1935339e77c6a4a243126345e6b20531d55a54e079", + "hearter": "0x91992923cd4185AA6787AAf0F07B0fa1ac79a997", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22915543, + "transactionHash": "0x017a7dd4715dda007fe65d8d12877e348b5d1dc07fc737d6e8a449177c19a1de", + "hearter": "0x42BC33fE15B3c495a896DFf968cc4C8a9c38Edd4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22915547, + "transactionHash": "0xf97e8db7d5442d46aff5f8cd27c527e161cf9202fa82c133a481263ff9c1bd73", + "hearter": "0x74BE1a3d4C5aF15a22ca1BFc27C1fA6084caDd78", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22915577, + "transactionHash": "0xa05055f0b3f9c21df6ab8fa8ff092ee6279cc030870dbe9d8fceb49d753a1aaf", + "hearter": "0x42BC33fE15B3c495a896DFf968cc4C8a9c38Edd4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22916013, + "transactionHash": "0x1736c85c20b48a6437b276e4e25283b7da318ff4b505c17b4b642cea120083f2", + "hearter": "0x756FE13740241486359b6b16E7f2740989aAFAf7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22916027, + "transactionHash": "0xd56a9b325dd908b4c3d008e7c77d2a6d34505ed3e8d1f99864454bd40a982875", + "hearter": "0x4dDFdC5f26204826C9f8c6f1A1e8697225b4842a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 150000000000000000 + }, + { + "blockNumber": 22916364, + "transactionHash": "0xdaea38df3d4558353b8b9e0c0cdba23c0fa4ccd49ad74f4d0cbefca97f2f5368", + "hearter": "0x251857E07702A3c68a7E9f4Db754febcc4F81365", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22916386, + "transactionHash": "0x3e6c73ef6d9cd41b96ecc5a896a01465c303496154d2585a3bd2800054031eaf", + "hearter": "0x251857E07702A3c68a7E9f4Db754febcc4F81365", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22916426, + "transactionHash": "0x2e58cb819a9e830528bf6c2ef9c7198acdd08197734358860b7db243805931b2", + "hearter": "0x251857E07702A3c68a7E9f4Db754febcc4F81365", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22916713, + "transactionHash": "0x866f250d5549a49dc83203e118075edf38306b834e97ae0931405e9926a3b9cb", + "hearter": "0x035C848247df9Ac50d607c9442ba4D7BD3e71eFE", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22916806, + "transactionHash": "0x9259b911f9769f86e12791d472f48ad2cf8c908bd2151acdfc27cdded0bacd6e", + "hearter": "0x646bcae5D25a21cB452bFCd8BaD01008082c8BFC", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22916869, + "transactionHash": "0x6a6e46aaa00e45dfd8a8111da9e281f5c8a546132cb1cce562858a73c6c3fdc4", + "hearter": "0x22f6EDb55790B0Fe841C5BA9aa30792ebcB55863", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22916996, + "transactionHash": "0xfddb3d02ede1fd193131a166d5c2fc7b9c3f9918f99f4a79a0d7b7ab927b2bef", + "hearter": "0xD6a2E38Df37b1301456A14A0755c4dB48b876016", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22917312, + "transactionHash": "0x126c7eef493efaf29c2101c91bb6c96f61592201b9a6efea73c2ba42c3048146", + "hearter": "0x0AC6888056be667D6Bfce8C794FB7747Cb5a12c8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22917984, + "transactionHash": "0x52bef8ce89c5d4ef7a1eac653855505623f98775dc9eb665a71948b801a71174", + "hearter": "0xde4F97E6DC9b3987409faB73951E628D7C975C68", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22917988, + "transactionHash": "0x68c5755f7f7b26863bc5b5cb664823bb8e656b0bd5d9cdfc20c9cf5174ac75b5", + "hearter": "0xAFfB80102FCB0e93d9DaE9B6F84D83DbA71cF4c3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 140000000000000000 + }, + { + "blockNumber": 22918287, + "transactionHash": "0x44f009bbb31712368e8f8eff4a4231e14369ff59fcb8a44d5862401a189f5a18", + "hearter": "0xD6a2E38Df37b1301456A14A0755c4dB48b876016", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22918514, + "transactionHash": "0x628903317ab27c9888e8eeaa3c05ca6e8e81f032452c0d63f4bd04a08b762c59", + "hearter": "0xb3466FD78D1e0028077BbcA61B4b9F7a2e8f7523", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 150000000000000000 + }, + { + "blockNumber": 22918715, + "transactionHash": "0x7542fe6b1450f517437945be109a091955b8f0cdfb0e98d537af509591a36efd", + "hearter": "0xb3466FD78D1e0028077BbcA61B4b9F7a2e8f7523", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 150000000000000000 + }, + { + "blockNumber": 22919172, + "transactionHash": "0x9891d0d05a3f05b0ed3c78c9990ae51f59d8d32aceb8daf57303724c3ef5fd63", + "hearter": "0xD6a2E38Df37b1301456A14A0755c4dB48b876016", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22919187, + "transactionHash": "0x48fdc0cd564b95c808a031115e0328b953b135f7f06e1468ff36a70bfdbdaeab", + "hearter": "0xC7e8b9f463469Bee1842F6d7E21446482edA6c54", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22919521, + "transactionHash": "0x2ccb0877b2c67fae2036187501550d548f99c292ecdfb4971135850e6a8aee44", + "hearter": "0x3375ad5113b5A1E9743462F3289c6dC5BC94f811", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22919593, + "transactionHash": "0x33a1aa8bd574e927b3360a1a9e1fd875932480c33e2851aea3f2d8ef812e2b5d", + "hearter": "0x000000fedB32Ad13a28e737621924278d367992D", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22919793, + "transactionHash": "0x47949829f1c8236d6f4503e1ac5b8edb18906aa1fcefb46d4f9d8fba30838cc4", + "hearter": "0x08b296a897b1c8A033066A34Dfde80c66A825D7B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 150000000000000000 + }, + { + "blockNumber": 22919961, + "transactionHash": "0x53cbf808a6f5fce579d391b48cf4ae37f6af4012812a6989ed1b94c2b305be8b", + "hearter": "0xcdf79A0A44D9dF3Fea9a20917BEBc34038Eefbf7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22919967, + "transactionHash": "0x4a6a6fac0fde37c52c4ee9ff183db5fcbe6ba021d140abda12e32615ec7c8330", + "hearter": "0x44693655c5608a9CDeB33FbBDFa1C12c17edb224", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22919983, + "transactionHash": "0xa6007c514178da1e2c17e4ae2270097957e16297a4f31581640e0715b06a500c", + "hearter": "0x0410c98D8CE09bF447A82398d8caf5690825d7d7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 6000000000000000 + }, + { + "blockNumber": 22920064, + "transactionHash": "0x117a6a09d1970576d1de0b46af5a063550ba41a295f5f626d4de90c4777db71e", + "hearter": "0xF60C7c3219b1ab8bD9F4357f4b63426585028658", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920129, + "transactionHash": "0xa7807ca1e07378835ac3c5a02693db308bf4569f491eba314c7a23b398233d1d", + "hearter": "0x7766e87A9EcA9d246365cAe3aAf40480fF60d162", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22920247, + "transactionHash": "0x0d6bb22df66c629e59af94c06a568c20b6a16e4160cc16b3ce923f67e68f596c", + "hearter": "0x08b296a897b1c8A033066A34Dfde80c66A825D7B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22920290, + "transactionHash": "0x4a0eb77a96fd1ce28197c1a7744caa2c5f8955cc1a903e05db6e0ab836f7d966", + "hearter": "0xC0a83305f669F020fe53e71FebE16b685c10dc40", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920309, + "transactionHash": "0xf654fc3d9a59bb7eb6a2ff2c7a21f2025805f3e6f6f580a94d6b6e3e849ad66a", + "hearter": "0xF60C7c3219b1ab8bD9F4357f4b63426585028658", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920339, + "transactionHash": "0x1bdf9ecc7cf2eb0ade5b5f57400af42fecce97e54dc691ab60e296e56cfd929c", + "hearter": "0xC0a83305f669F020fe53e71FebE16b685c10dc40", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920393, + "transactionHash": "0xf5c5b863cb94cdceda0be363251f618d2de257b8194c5cb942d7e1785e2165cd", + "hearter": "0xAE7532104ED0afBfA0F4BdD223350c47AD93026b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920429, + "transactionHash": "0x515c737aa1472bca4f742267d56d2e9549b7a9c8950e0112ffc0a55fc7d194ef", + "hearter": "0xE6e25D8388E47F4A4A635104b8973e52bF5C7875", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920432, + "transactionHash": "0x62caa117e9e10f557bd54843c14477c83ae777c5c23a735d0cabdc3b13b7bf42", + "hearter": "0xd1C2CA39A735284797BD606dbF5A4c3296fb602B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920437, + "transactionHash": "0xd4d95e67dd5be195f3c837d6fe750fa759bdb45a9ab714976b320fdbfd3c10c5", + "hearter": "0x9fA549ff8BE8e37384f1cD04afb8B945Af6f78A4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920458, + "transactionHash": "0x2c44289ea7f2f03d9454cf3fbd595995c350aee723388347afc6216fbd9a8ec7", + "hearter": "0xf57B884eDCEA624Eb912573662cC641BbE224123", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22920474, + "transactionHash": "0x8918dad021a02cdc3112840f34e0b724f6b89ffef5e681070829400abd8b044e", + "hearter": "0x4AfCA55d60be2E179e0E07cc4919007F0E0668b8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920478, + "transactionHash": "0x61578d7706d8e53cbb06704828ed1cc1570ca814642af157d3ab7288c6745d6d", + "hearter": "0x857F4a80977D34126d64822151A3656EB1d4e317", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22920534, + "transactionHash": "0x57b39fdeb9b6d63b806e78155ee3b214834de890e3dfef65fd90052d03c5041a", + "hearter": "0xD61211726D5B56146e8fD5586D7C9a2F6fa028e0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920537, + "transactionHash": "0xaccdf21e6c25778ef6d4df740d3ae4bcb344a357649fc47368257b22e76d04c5", + "hearter": "0x7250cC1eA991213fd1967769d417B355e4EBA614", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000 + }, + { + "blockNumber": 22920558, + "transactionHash": "0xe463e84d9206dd733e87b953a806d9490a27fbfbfc4c9b9df04e26fb81452109", + "hearter": "0x514aab82D57EB27B9B425f1f47707801F4168531", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920592, + "transactionHash": "0x909f87f71b91b369719ba65c0230a1e6d68c5c206b147aec8d69c43692476b8c", + "hearter": "0x4EebEE7494A119391059A0410bb05cB5B37588A6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920596, + "transactionHash": "0x153f5afc52c600d8d23923c84a6aa83a7e0bfbb7af53bd8ad635193ae9811176", + "hearter": "0x572814C2AC6DEbbf1846E774E6DBd6a12bc0D0B0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000 + }, + { + "blockNumber": 22920689, + "transactionHash": "0x5845bffdc387b4eca102760f51030cf0bcd4962f18f9e80e6b376526ba4ee3f3", + "hearter": "0x125CF6C70D513A26919Ae6d8B682781f5ec0C0Ca", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 48000000000000000 + }, + { + "blockNumber": 22920691, + "transactionHash": "0x8f281ee2c4a7bec3a202b99e6f9e768af5d7139ea4b0744139ab0719d7f11c14", + "hearter": "0x0735e71D4Ba6A11114c31F457649128639ed485c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22920805, + "transactionHash": "0x5f7954413fba7d8f9b59bfd8a68d3a5c35f98e7452690e6e07cf92f9478ae486", + "hearter": "0x51D0eCa0cFb84D111bcE01030B1E483c313f8534", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22920838, + "transactionHash": "0xecd4b2072bf453fdd7ec36c15a03abec0dbcfab8ec53c07e3b865a4ad1d6b291", + "hearter": "0x0F8e93aE59AC6F581e17D172E2dC4F85a45eC6B0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22920940, + "transactionHash": "0xe092e49ce84fb32fda88ed21ef3a6eca49f570ae6c8f35ea526f22be7b1625ed", + "hearter": "0xbdb902244f1235Fc686B2aF74f0e73163d47Fa08", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22920968, + "transactionHash": "0x5d2d6df73fd093bf7ac480c8550f704ef6598653a8a6f8c37333de23e999568c", + "hearter": "0x74E17CF08619F519E76e1e6c514D01F061A12166", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22921005, + "transactionHash": "0x709c549762c47f4576eab535043f486b09a80fc16cb2377139a13858eeb5906d", + "hearter": "0x9AC26ab137206a2048ee8eFc97f93bBff8806432", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22921066, + "transactionHash": "0x7422c63df4edb90ac9e2d577a063253ac1c77434a688719973d2ad742f2cad33", + "hearter": "0x326F88222C34A8BC2cDe6d257cFf2a43023D0149", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 400000000000000 + }, + { + "blockNumber": 22921194, + "transactionHash": "0x2471645b7a7e746413900692f14908e66631b54361e64e5c0ba2b45a3b1fdb29", + "hearter": "0xAE56e544a698cF00F26f9ed8c1FCf30FcD690b15", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 9700000000000000 + }, + { + "blockNumber": 22921246, + "transactionHash": "0xaa9901e9ab1d0159ae6c5f6a2acbb5a360b6b6224bcbc18553c11ada44ae4405", + "hearter": "0x050050Fa351c3De8A342fbbcA883dD81624D8f19", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22921342, + "transactionHash": "0x74a3e1626675d5de697c2a5da050280bc53fe8ee226b9224076fbab15a9bd83f", + "hearter": "0xf60B3822263dB6E7a5e8b36d277FC83e0747B350", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 12500000000000000 + }, + { + "blockNumber": 22921532, + "transactionHash": "0x5ebddcc8d97d23d31636f1642e1da0906bc4200b9e319bb0fe3bef8367a6221c", + "hearter": "0xAE56e544a698cF00F26f9ed8c1FCf30FcD690b15", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 600000000000000 + }, + { + "blockNumber": 22921567, + "transactionHash": "0x46501ca2d294757e6a4b85a44231bab587dd7411e9de74a1c52e99ef15dfc271", + "hearter": "0x84E9314c02F08178362d3B7250A90BB39e357771", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22921593, + "transactionHash": "0x5af2300247a06ed9387585932a980e69bd84ade8c8d3b6c2625df473a4692ecc", + "hearter": "0x9C13541EA3ecdE2E22d9eB8D0bdc5f50311Edc65", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22921764, + "transactionHash": "0x91db63e6fd79ccee41bb08da79b5ccef65354234331d329ce02f003ba4367523", + "hearter": "0xCec4a87678A6172212E433aca2C4A83A423f5f2c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22921840, + "transactionHash": "0x697cfe6b0161a59fac6feda3ca094a3d23223f49a9ed055d6b4da5b115fbccdb", + "hearter": "0x960109b43aF3BABA5b8007f025eC4903F814c9bC", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000 + }, + { + "blockNumber": 22922782, + "transactionHash": "0x4d5ab23ff8faee5e26f276c8cc2fd4ec32a8a18f43156136e7d6e6640ab409b9", + "hearter": "0x08b296a897b1c8A033066A34Dfde80c66A825D7B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22922992, + "transactionHash": "0xe8308e3d53680875f0e16d88db4fbf78e2f7029d8888f3460ea1f4e4cd0f7f02", + "hearter": "0x007495c7c9D4E841667E7f4E68351f7E1eE5FFd7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 400000000000000000 + }, + { + "blockNumber": 22923443, + "transactionHash": "0x3e02d107aba2ed43a1ee89fe82e5c31a089e6866a66e3a7a645938dd6341c719", + "hearter": "0x050050Fa351c3De8A342fbbcA883dD81624D8f19", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22924211, + "transactionHash": "0xc2830bf6df2ca196e8b5397a9f51ca7b373c82685461616c362b289d1dad0419", + "hearter": "0xf4a697253285A02C70De95c9Cba5A645061c9E26", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22924232, + "transactionHash": "0xdaa04e67d51c11a2f149f1c74903ebb3a0a9685ab3957a186a4c3eafd47d53a1", + "hearter": "0x63433dc48C9639c61561870f145F2FC7a56cfB1A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22924274, + "transactionHash": "0xc00f4b6d54bdf8f08a9996752c0253a19c1bb873ae46811b1ab3186704b767fc", + "hearter": "0x16EAcC7163f1D1BEeB49450FD39460d58434bDd9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22924330, + "transactionHash": "0x835118ea7e48e0f2d1b9290268882d683c09b9d60a62b775f4b19873119858a5", + "hearter": "0x16EAcC7163f1D1BEeB49450FD39460d58434bDd9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 290000000000000000 + }, + { + "blockNumber": 22924354, + "transactionHash": "0xb9b1db81b97d1da8bd36ab38551316c34fdd855303666fb3b64650bd9b431d5d", + "hearter": "0x0f9928831Da9B18eaF3e080d1e8338Fcd0000001", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 4000000000000000 + }, + { + "blockNumber": 22924390, + "transactionHash": "0xd37be04c2dca1d39be4588fd02ddd35441e8aaaf7587b6eeb8ace2eddb9603b6", + "hearter": "0xB5C626461b1c53Fb3b0956C39E2a0C3D04e7D16f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924408, + "transactionHash": "0xe93e5434be68b5fae16a8e9b4677c0d60cc05f60218316cf6fdb04342b2ab6de", + "hearter": "0x45Beb76757DFdEC8aeD43E377c31094c546989d0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22924420, + "transactionHash": "0x514638cbdc221421217ad401ed4a95797ae057c356769c09da3becaf4b8613ff", + "hearter": "0x5Cb8b89d98bbe328E271F212F4B350148CfC7d21", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22924431, + "transactionHash": "0x40118f050d50eb84e15e3e39b81ac765053bd9a3869bd5f39016bc44a371a13f", + "hearter": "0x3aFF89488542a1b3301A88017f8b6d1a472aBD2e", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22924456, + "transactionHash": "0x28ab7ee0d46a4654b792176bff714605f77a69bf22882e9ad889ec1cd8f32828", + "hearter": "0xeE758c5D6892318d71b3b40Ec258261e5975919a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22924466, + "transactionHash": "0xb63c2e5964a9c5291063b9a08795b5e2a13a601821ed5be6e24511890df80190", + "hearter": "0xbfF956C949C545fa15D9ABBE550d2488bAa16F8d", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22924495, + "transactionHash": "0x2ab85a2521c36ed42fddd8deed18afda00bd2299390afb5619deb85705e68270", + "hearter": "0xA0120E34472BDeeb54fc4F75FaC414688bcBe623", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22924526, + "transactionHash": "0xb24b2f83e4165b690cb7fab352cc3c4adea247bb4a4ae5277ef1a275802dbee7", + "hearter": "0x54ccEd6CC1F774d18901DA11E6fD79Da4B4a2deC", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22924551, + "transactionHash": "0x88e1db7da06c0a9944c3473e3cae350674e4ce0227e55f2d7ba4f2e933a0ae58", + "hearter": "0x99E83edF1363aF35fd79F3Cdd623Deb75dB28729", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924552, + "transactionHash": "0x8d082960dede55dc7ac4deb51d2e221b2eb9b387d8bfa2b0b1b0e7242cc3a270", + "hearter": "0x45Beb76757DFdEC8aeD43E377c31094c546989d0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22924555, + "transactionHash": "0x3c80eeb2f6eabc135c7e1f8f6326c92d0bf30ed3507284e6240b2680ea686af7", + "hearter": "0x16EAcC7163f1D1BEeB49450FD39460d58434bDd9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22924581, + "transactionHash": "0xf4195ed738fcd6a987e8dd8690d5bb594cd18c7a33bd995502ed9eb29e20d583", + "hearter": "0x47917fca14069885f85e6F52bd9623564E715dDa", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22924682, + "transactionHash": "0x4d572ce33836d139f50403213f6ed5700784369ded9df8b6f619a33a2070b9eb", + "hearter": "0x3b95ce42128C6952CAdDa8107a8dCD31de0fE91F", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924686, + "transactionHash": "0x03e111edebde817c41a0f0b8313d20f919e02ba842d52693de447495cf5fe9fa", + "hearter": "0x3b95ce42128C6952CAdDa8107a8dCD31de0fE91F", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924687, + "transactionHash": "0xbd15be6ec12377a8932afe78814a0f7f16c8e8c3911bc967af37e44fd4ca07f9", + "hearter": "0xAeD6D2fD3CBB1F47a2558bD1cA77188B189DBafa", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22924707, + "transactionHash": "0x65ebce1cb76cc841da41f601a3d6a8cb68c508b679659d0bc8e27c733468a93d", + "hearter": "0xAE80a091EFd5F808371C723F8ea82Bb6560f9b10", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924708, + "transactionHash": "0xb5ea9631b14404d21b938cead2ee42f6b6e2dffefd4dc60d61bf2848376bed3e", + "hearter": "0xf045063CC4F034f8d998ef776Efa8dD0F172bF4b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22924736, + "transactionHash": "0xe1533fa45265bf624617fdabd59f6574172c9b12825d360577b66adfc13c2a9d", + "hearter": "0x3B75729F6Aa6f74d5545fbDcD45D162f156073ff", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924864, + "transactionHash": "0x955ac6b6b834d0abc1426de63a3a48680b25f6a60a1ecae564c4c1e831c6af27", + "hearter": "0x04A3a5e85212095175e276506885f28cb9c8aD48", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22924866, + "transactionHash": "0xd8243d1fb3d3a1139c2e1df38665c9cbdf76e12dc32c86dd6477ce8abbd68eaf", + "hearter": "0x04A3a5e85212095175e276506885f28cb9c8aD48", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22924885, + "transactionHash": "0x34f4cc0a3c68e59620f34105321ddaaf6fed79f017c1e6ef684481a4d8140fd1", + "hearter": "0x69133d265e47CA00123Bf4B4F1af87852734f7F5", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22924889, + "transactionHash": "0x953e73da5c40931215a7a743931b07bae40d81f4669b56a393f9ed8da8de1352", + "hearter": "0xD6E6309Ed7a42b4245b7fc67524c1f061eA31Ce9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22924893, + "transactionHash": "0x6aa41f3d3696c44e9a027173fd9c39b00d99813755341903ab368593cf32f504", + "hearter": "0x3b95ce42128C6952CAdDa8107a8dCD31de0fE91F", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22924894, + "transactionHash": "0x29fa8a06b2587791d26511399430cdd9727490e991a678d62c989ad5f845405d", + "hearter": "0xc0F229986e2a6486540843e08879A9B1B32d9F9D", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22924906, + "transactionHash": "0x3b6d470e3e4555c2e852dd99fbffb32d330f10bedb8648f28e6e59d5eae7eef6", + "hearter": "0x434CcacB64eafAd8004D106b4B94aB0319e10da7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22924920, + "transactionHash": "0x022c589df0d0e15b72dbdf230c6da1b3f1521a1bbea6799eebbbbdd26e7873b2", + "hearter": "0x214810e8BFaC07C67D5625bA5407D89694C9FFDf", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 110000000000000000 + }, + { + "blockNumber": 22924934, + "transactionHash": "0x98f44dd0bf08f88ba66238773078fd48c272c8e84b089b525e1087ce4e8afb6e", + "hearter": "0x214810e8BFaC07C67D5625bA5407D89694C9FFDf", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 110000000000000000 + }, + { + "blockNumber": 22924975, + "transactionHash": "0x148828fd02f365292aedd4f84eedf23ac8fd3a01ce119b914c3e210f75f43fd2", + "hearter": "0x6a0a0C9D38ecB4aFf126670Bd6105721f48F9084", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22924988, + "transactionHash": "0x00602aa620d2f7356612e922537d27ea47ad69682dccf782718826dfffabc6eb", + "hearter": "0x6DCD5b6214Ad546b58aB49A62c6f71aA4Fd2d30D", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22925018, + "transactionHash": "0xf6291ef6bfbcf1c820008687a1bdd2ecc004cba132932bf8d886cad63912f0f7", + "hearter": "0xD6E6309Ed7a42b4245b7fc67524c1f061eA31Ce9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925022, + "transactionHash": "0x1ace562e089944bf2488c72d02d43aab1db42790871d4e9e830a6a7ca8accc06", + "hearter": "0x7e1D726DD28f65e8F50f109B209f2f6321660D10", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 47000000000000000 + }, + { + "blockNumber": 22925045, + "transactionHash": "0xf76d798cb733426176c5a339ad32e4639ce9d241422b64d3e64120c3bbd90be6", + "hearter": "0xD7E7F52f1C37e10eAEdd75ff7904DED160669981", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22925103, + "transactionHash": "0x0e3f948fe23f568af3ee50d0957a17566dfc66cb2befbd82a96af024fc35cf0f", + "hearter": "0x7a9803F2450e948f63BBA32834792ce7AAB02515", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22925110, + "transactionHash": "0x5d409be0f439a295375af3436069de3b6a01dfe38beb44cf79dc71578d5082af", + "hearter": "0x2590B923F995BA3cA2d235eedFe9b8A0fe02fA5a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925120, + "transactionHash": "0xda82ab42d1fb5cb2cb39cbfa9484de216168ed2dedc23d7b255f6974ab826e8f", + "hearter": "0x1af05aEC906E949290Cf04016922FF82563B993c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925122, + "transactionHash": "0x010548c425136887fa4f52ea28fca05a459ef0dc98c2c9f3df790f3e1aa327e0", + "hearter": "0x0DaeF89a7d468EF86FCb6DF8Cbe5D3E9ff4355F4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925122, + "transactionHash": "0xe5379fadc6feb9e4d22e1869fd23fc63db4e3239ca5ddbc87e86b60058003a75", + "hearter": "0x1af05aEC906E949290Cf04016922FF82563B993c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925155, + "transactionHash": "0xf7c1bc7b6a82185ff64bdb0dd29bed71aa28759b7de241ee0da29ba125ad871e", + "hearter": "0x8293Fdc6648dcd00b9194dfa0ab731b51E294F66", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22925166, + "transactionHash": "0xd5dc6da2ecd3d577713583218ffee625efbefe98d17a119254c3b736c7e6dbeb", + "hearter": "0x0f9928831Da9B18eaF3e080d1e8338Fcd0000001", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 6000000000000000 + }, + { + "blockNumber": 22925170, + "transactionHash": "0xe2c6f01944c40e38e2d411eca8d012cec199e65fe6aeb695d0d31c5e9f13348d", + "hearter": "0xFE4B04ADe5478F3B649614221CDCc43EE31fA27e", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925174, + "transactionHash": "0xdefe5c65a7951fa32fc0d09aae3f797904d70c60a91101798ffe6ffa3a9dbfee", + "hearter": "0xE4D696a2b36a66781486bDFFB5009C3e3b648723", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925191, + "transactionHash": "0x44b8ff5e2f9d226c654f445289d6b709712a814fab1303d6a20c83af7fa4dc47", + "hearter": "0xE4D696a2b36a66781486bDFFB5009C3e3b648723", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925216, + "transactionHash": "0x7c886804ea12d7762c3f6f8a9509187d4e82be075a8d1fe7de4192fb5803999a", + "hearter": "0xC2bcFB47F9d3350F45CEd999713b22Bb4E1eE8F6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22925225, + "transactionHash": "0x5e5a07226d56e6847cf820226fe39aeaabc20e9104d505439b69f2f36625a948", + "hearter": "0x19dc7CfaE2bFF62b2483d91b3428726493B84912", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22925230, + "transactionHash": "0x4352ad2e0c72196dfc373211b337cd5c817c2d725b629a17dfd8224c0952e911", + "hearter": "0xD6a5f798A6AbBeb5d5B94451f5755a7B39cE3c8b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22925230, + "transactionHash": "0x5d88db4a2f08c8f0c932db9dd2ee56afb0c7293e7a8bafd1481603829442351a", + "hearter": "0x4F0C0d25A2d1699BDF5E9BB380305A00dcDc5800", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22925255, + "transactionHash": "0x17fd42d5250e06892a0ca55ceb61a79e69a78fc0be4b35e7d23c714ec0ae61c1", + "hearter": "0x021A86b9858f6e4150a724d444e94d10Cb75C1b1", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925255, + "transactionHash": "0x88c352c546b86497076d53abd78d12fe90424bf55a7f21889c5fda49274d0667", + "hearter": "0xb22D69866D9A96ee739E9dfD97fbC8044Cff823C", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22925259, + "transactionHash": "0x274f1d58eff60d5e6b22ad52e21eac69b1b80a291db6c6ef6ea19dbac5a7ec30", + "hearter": "0xBf2499e4Cda11Eb33eEa341Ae425d85B6e93F028", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925265, + "transactionHash": "0x94825d8b97f35f62ac4bff27a9bd72a8eeaf275c83b1a5825cc071b1b82d35f6", + "hearter": "0xa741B6B012821849DBe6400Dbc9918fbe0B18714", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22925272, + "transactionHash": "0x2df19710b9e0b77938f4f09f5317e1f3128620cbd9ae0528ca8087591e69f1a4", + "hearter": "0x0DaeF89a7d468EF86FCb6DF8Cbe5D3E9ff4355F4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22925284, + "transactionHash": "0x2e4b05bf7dbdd5818010e2918b00da50499d044d69a700331af43cec57f33a4d", + "hearter": "0x6013146CCbb147A99Ac522BaC89Cf19263AD96cB", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22925288, + "transactionHash": "0xe2953ef76a235b231d2566711c2a7642b8cc67a8a5b1886004fea5f4c1563846", + "hearter": "0x096eA0499fD9f2D036Bc1bd834AFDE011D320000", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22925304, + "transactionHash": "0x4fd4b501b5fa7b0c3f82b0c32d22280c6acb55ef712c26194fb29d51a57ca097", + "hearter": "0x5A0E685672040e15283db71C90a7233336285E25", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 150000000000000000 + }, + { + "blockNumber": 22925306, + "transactionHash": "0x653e778d353c442e6a133959af1eb5279e0a72807e32ca92cbf0609939386649", + "hearter": "0x71caBa16970120be602fbB602a9C21F331e10d4F", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22925355, + "transactionHash": "0x849d019cf66289e1825456cb06b176a9e5b852f668ec7413e48de47ef3ddac1b", + "hearter": "0x5F7D3112F2C78ED7c19ad27A98638C0035BBe5De", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925361, + "transactionHash": "0x4f2faa6d83ab0e9c3ab03deb5ff12d53497c2896ecd5c62df708961f01a1084b", + "hearter": "0x7Ffed9455eA357e5735D3e1bA4E9B5898452E0BC", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22925375, + "transactionHash": "0x836387020b57fd63e599f6ea99d9e0b5716e6dd37e3309ffb977e469cc35c0de", + "hearter": "0x7a7c088F856c246460450903ee43Cffa69d99681", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925375, + "transactionHash": "0x96301ac765f23050d5c5ff6f1969b8d2dbc53ca946863d163bc38999b3d3dcb5", + "hearter": "0x7a7c088F856c246460450903ee43Cffa69d99681", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925378, + "transactionHash": "0x1c81f835c9416d181904b98e40f0a3bb53ff51bf9805e9231a8c86651c128eca", + "hearter": "0x7a7c088F856c246460450903ee43Cffa69d99681", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22925408, + "transactionHash": "0x40024514659962a4290189a4a3b50a74d55b2c916c6a6d029f2bb05c5ea6eaaf", + "hearter": "0xf045063CC4F034f8d998ef776Efa8dD0F172bF4b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22925409, + "transactionHash": "0xc843744cf2fcda2b2255cfd75c4847e76c8777aa6c016305fa29ccbe846246b8", + "hearter": "0x839C23dbA2D25Fc0F983C22a0cfB09fb5470A437", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22925416, + "transactionHash": "0xce4c7c497e54a08ce40e77fa956b30b23f15c569b1bc57d53ba8a0d9947fff8f", + "hearter": "0x53cF618E26ba859658cca5DCE2a1321FFf2d571E", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22925440, + "transactionHash": "0x0dc6932fc0b3e9feed862b17a92abfa58cb10d77b4c81dc402c49f6f602138a7", + "hearter": "0x7Ffed9455eA357e5735D3e1bA4E9B5898452E0BC", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 400000000000000000 + }, + { + "blockNumber": 22925475, + "transactionHash": "0x18bab216c42b9883cde09cf5fbefe1b72876038632f8a1fa0f03f8ca6bafa94a", + "hearter": "0x0b322f1366d668059e2c913535BA99b4769C0cB5", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22925488, + "transactionHash": "0x583327d23b97612bd090bfaf58681f0cfdca715676afd21de38ee6844f8cda3c", + "hearter": "0x434CcacB64eafAd8004D106b4B94aB0319e10da7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22925513, + "transactionHash": "0x3e2a81a9d6f527668067e2a86fced599cba80eccfdcc9f626afffab4079321ca", + "hearter": "0x1622B02C44Bd7acccE8E6DEaD652E1bE3c1a860A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22925531, + "transactionHash": "0xc6b9d8643e6a0d4575c1bc04e5f4a1e730fd03cf514c25454b5ae12fc0c35ab6", + "hearter": "0xA83b9fF09031a50fA229D5c1d28974bef273ec0f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22925532, + "transactionHash": "0xe136d10b8f0351d93cdf78fd048f0868a33c7e78677a9b732960380b33c2fb3f", + "hearter": "0x384450D65Ed9CE2c10F6C880aCC0dc50eEc5fB38", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 25000000000000000 + }, + { + "blockNumber": 22925533, + "transactionHash": "0x860ac71c0c3548927a5868cb64d21d734789981fa58aedd1572343d023b4a3f2", + "hearter": "0x0fb32CC286C6f3Aa2F4Cc98e5eC4dBebc5a1CaC5", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925572, + "transactionHash": "0xc031812b176fdf25f44f37423d5bdd13f6d99cf95842efcaef187e6e418f1da0", + "hearter": "0xae7B323599C683c0A09FDc84a92c1D98643cA8AB", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 40000000000000000 + }, + { + "blockNumber": 22925603, + "transactionHash": "0x0a469069ccec90c2a7a8e96dc02c353b032b3b25da67a1ac25f9c97b71c5272d", + "hearter": "0x021A86b9858f6e4150a724d444e94d10Cb75C1b1", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925620, + "transactionHash": "0x0378910ac1d0d104f7add14540b37449731a1910873ad815566d61fc70fb8dd4", + "hearter": "0x43bD3470735f0E7d8984a3763f47E732baBF3A52", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22925643, + "transactionHash": "0x98fa04a3cf1f84dea43baeaf2216aa39a6145108691151fdf074a0eb0b5ba252", + "hearter": "0x43bD3470735f0E7d8984a3763f47E732baBF3A52", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2850000000000000000 + }, + { + "blockNumber": 22925649, + "transactionHash": "0xd754374abe98f2ab7a22e873dbd89b931c53ff8e71af28d7e1de207a508f91f5", + "hearter": "0xbcF71cED80c6B09a269FCE5B3C46c43A31BB099C", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925671, + "transactionHash": "0x2946b0e6850580845b3b1337fdc7b3cba39169b005fcbaa22f4dfe0cf7225552", + "hearter": "0xb22D69866D9A96ee739E9dfD97fbC8044Cff823C", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22925686, + "transactionHash": "0xe81306e9a63e956f727ed726f2fca3a888e7ba9501ba582020b21031b6798ba9", + "hearter": "0x5B10C5Cdc2AEB1154D628be44101E887Cff18D5A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22925737, + "transactionHash": "0xd134c518a9e97d60f639f0e30e35179c45ef8edf077eeb18ddcd5f54be1b63e6", + "hearter": "0xF5bfED2c571D071afDdFE2F4c02f64dffd9780aF", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925741, + "transactionHash": "0x9a19a309ac1bb28d7d6d035c161be9b51bb12dd827c8664c4e2373f3401ca254", + "hearter": "0xd16519644e7AAF0B8c5DAC03228d2EfFc836e47d", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22925751, + "transactionHash": "0x3b28de6068a8eca4a0b6380e9189f522dd3bb7832e8fe883c8ba42cbe0f2a828", + "hearter": "0xBE3352Ae7C20161d4fb1D0Dc2aad099227B5F246", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000 + }, + { + "blockNumber": 22925807, + "transactionHash": "0x667bc5f9a11cb8969500b221d43d1311ff18dcd950bae44b60b58115597a5deb", + "hearter": "0x82a13e2e07531716FA721bbe858bd3e433E052Bf", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925960, + "transactionHash": "0x9d6992e9b4950c1d6ffa82e9850da4efd647d5bc6f1c461da45067e4b11e660d", + "hearter": "0xfA37d21eeA8Cc4eDa840F468931A6207E43086A8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925977, + "transactionHash": "0x6e703a9da76e25c6be45b52f509714781810bfd6c0778ff7b7d224821f453870", + "hearter": "0x48d0EfdFfCEB3dbf047DA3B9964E94F3B72dA289", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22925988, + "transactionHash": "0x2f1d8ab10469c8ff29fdfc0e1e8b39c4fc66b489704ad517353caead9e84f423", + "hearter": "0xbB7422f8f671992fa552289CBE542946b491DCd8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22925998, + "transactionHash": "0x2c768dc5711af751efcc6e7684b5bbd90e3b35c5a446052762f3ceb8cf871c92", + "hearter": "0x7e52B0429549Ad5eB47D4B49016DF9B8711a888C", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22926001, + "transactionHash": "0xf1de869727a7ef8d26408cb4121248c18d549a877cc23aafcfdb275c6c980584", + "hearter": "0x4b5f8Ebc4822029d2d4Ae0DcA42bE5B80fD5b00c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22926002, + "transactionHash": "0x14d8de965dc4c52e3292417f762a6e0e059d7c53f3cbe81a7829507bfde8a91f", + "hearter": "0xAE80a091EFd5F808371C723F8ea82Bb6560f9b10", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 350000000000000000 + }, + { + "blockNumber": 22926055, + "transactionHash": "0x0e820c4171c8447d6b659a3abfb61781505dd2604b9a0dc39ef5d63d0648f246", + "hearter": "0xD760cEc401fC5e2140e7E93487f9960e27277D61", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22926095, + "transactionHash": "0x734c6f970544d1bf517d7450e12cd7540cdb3a6955c946c6581481d5f65bec5c", + "hearter": "0x7e52B0429549Ad5eB47D4B49016DF9B8711a888C", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22926203, + "transactionHash": "0x061dffa9a8ffac40e9e81fe94be15104714b324b8b3e3a6f51bb67c32b0c459d", + "hearter": "0xE4199fa30e196ebb5F48d984686a49488AFFd339", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22926270, + "transactionHash": "0x424670023750d7611f0a698a27323beddd947a0538bbeff5a5db7dc4e31697f4", + "hearter": "0x3fCdd67aba36992b014DB7d32882125C581C29F2", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22926434, + "transactionHash": "0x36124e18c43df7036a50b941e45db51aa5d7af1ae5fea2895356b02cc89a994c", + "hearter": "0x5635a846757400e2BCd1A9B8DC18E89E15098A6B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22926707, + "transactionHash": "0xd2e9cd5b00699c8409d628e0909dbff88880e4df6cae04ef2eeb27ff71c54bb8", + "hearter": "0x5635a846757400e2BCd1A9B8DC18E89E15098A6B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22926753, + "transactionHash": "0x9c63aede271c48bb5a162ed98fccdcad34aaafb3cecc451efced2967b6d0e960", + "hearter": "0xF38Db10Db0c8d37FC4C8d4b0cf31E00f4f98De0b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22926763, + "transactionHash": "0x8c0e00ce1be63c9270c702bb9f2a0aef9362feab810803f3e020740d16ded233", + "hearter": "0xF38Db10Db0c8d37FC4C8d4b0cf31E00f4f98De0b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22926897, + "transactionHash": "0xb2e9184b9e5f3da586a81a02e50bc61dfda59cabbef388391b2639ba0e8988fa", + "hearter": "0x7813048958EeF933bd3f6d335E8f7B8525452899", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000 + }, + { + "blockNumber": 22927066, + "transactionHash": "0x411a34fe0eec7f8555699d79f26ecbd3ce1ec1b0f153ab94cc12dc0e4207002f", + "hearter": "0xFaC1A1f39331E7f0c0DDd460cf287bfEa30b5631", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22927117, + "transactionHash": "0xcf0307cdaa149bbfcf0fe6e4613db228bd86b0be4dbccc6fb4c1ef7fa9dd4024", + "hearter": "0x5265a95C7797c904140168f5Bffc40EC7C1f1A9D", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 700000000000000000 + }, + { + "blockNumber": 22927165, + "transactionHash": "0x009977854a1db153e857acab6c3f23a4ff0a05e57b626f45c178d98b8b7ce38a", + "hearter": "0x039fe19b5b318f76811f5d7267513C33a5aFB6b2", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22927223, + "transactionHash": "0x8fc716a9858ac12ceaab44a6722cddd1349350c026947d0592933afd1e57f446", + "hearter": "0x4c706585C570DE06aA4364b20153f5998Eae996f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22927429, + "transactionHash": "0xbee45a83c89bf5d0a2e6ac89462be5882a3d2c61215186734cf67f1ed73f7c16", + "hearter": "0x897Bb3A1Ea2eeB92eB2D436362588F0CA42D2C7D", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 6000000000000000 + }, + { + "blockNumber": 22927520, + "transactionHash": "0x4db022fec0ac2e1e23034d3abf670ff5d0365c7a0aaa9cc009adeb00f389e03d", + "hearter": "0x879C405922ffb8251bDDf7dF06E02A58B10837f3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22927536, + "transactionHash": "0x850dd66927636c2a6c16ec881c47521da4ace6fe576810824db3a39fa8814a60", + "hearter": "0xc672604D798d8cBd0cf2cC654099F82bD02647AB", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22927565, + "transactionHash": "0xbc073442215d945db125777bd083a8d59fbbc4a7c50d25e59a263b057deaaa1f", + "hearter": "0x54389D1Cf325BCFd728230De5Cdc26Aa1f5f08F5", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22927587, + "transactionHash": "0x29ca8f834b9727f2527cdd8a352db5c78aeb09eb1f8797f905a688d8607cad81", + "hearter": "0xD6a5f798A6AbBeb5d5B94451f5755a7B39cE3c8b", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22927635, + "transactionHash": "0xa4379e6c105e87fecaf56e482b84c3e655f5a655dc2588b229d03a6d0b76f893", + "hearter": "0x37Ce0d1Ba1C684F3016219b483401651b625721a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 800000000000000000 + }, + { + "blockNumber": 22927670, + "transactionHash": "0x6536ce3880f3c3d53a6a5f6165ec3857bb9e1a7858057758003ac481d4007695", + "hearter": "0x9447bB342Ec6dE70FeE68b8CdBccF5dDA35c2004", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22927930, + "transactionHash": "0xae6fa4b510a32733e5b18b76313b4873c421bc5af515dfc33a8a61046f021d4e", + "hearter": "0x8eF0a7cbDd0099e18656Dbe482b111ff90f53F19", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22928044, + "transactionHash": "0xe66b288a198946aaa69f978ae6a44c2a24dea6a37386ad88cfc361cf33d2e48b", + "hearter": "0x07E642Dc0Ef0160Cb17c6709CCc9eF40b178316d", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 220000000000000000 + }, + { + "blockNumber": 22928082, + "transactionHash": "0xedad5436d135c9d4a5ef5e0b36b81e684bd54bdec2bb2c21b33385edb4e74b78", + "hearter": "0xBcC482C1108790E4B2B682F2430d1cafFcB8418D", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22928719, + "transactionHash": "0x75f1e05c0f4deac7bdd025d9c1433c32a141a676865252b5f073b95dc7699399", + "hearter": "0xCcE8DfdF25A9A80770572B3A661Ce123A86F1bA6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22929782, + "transactionHash": "0xa55163c6d5a4fa5290d266a7e88209b821f389f38f0f3495f463316cca233edc", + "hearter": "0xBc6DDb5e101742dAF119523457eB3794b43C9ebb", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22930242, + "transactionHash": "0x462596e4d9779038fdd295877962cf708c5f859ad65188bad94cf9cb5a293c51", + "hearter": "0x33293c6D0Fcf5Fc0dC2a99E3aA9725eC3510313a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2900000000000000000 + }, + { + "blockNumber": 22930340, + "transactionHash": "0x07783f7a9abbe70bb66ecb23350b7fe2f14611168eb2d24a0eecef1a6c0e133c", + "hearter": "0x0D32af41A7E68Cc0aCB88229CE07658594fc08dd", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 15000000000000000 + }, + { + "blockNumber": 22931038, + "transactionHash": "0x5fe9da6470fda90386950aef7e45b61740222b25953b1877c5d9946f787d8fd5", + "hearter": "0x5A327a96E6EB443092Fd31F1ab8b26F727f60710", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22931364, + "transactionHash": "0xf3efa27ceef4d8e20ece912e958e0b31ea07cecb3b877f495f8f025818e13821", + "hearter": "0xEE5601Fe4ff6c9395EBcf1b5c648b125bd4aFCa8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22931521, + "transactionHash": "0x287b717509b04f43ab6aabe06d68b594d7ec4680d35ead51a86f8f8cf60eac80", + "hearter": "0x552aD5D7Ff3E5fBb5c448141707F0378026BaA3f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22931711, + "transactionHash": "0x50e613d716d12aceeb94dda8c82c58f8ac90e0ba58abec82d4325d6622902951", + "hearter": "0x172BC87c3eADc21606d62825398fd24D6D6961ef", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22931821, + "transactionHash": "0xcb31ebb46e271cea9b7f34cde79edab0d1fe4b901bec178e907cee94b41be322", + "hearter": "0xAE80a091EFd5F808371C723F8ea82Bb6560f9b10", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22931884, + "transactionHash": "0x2d3d38acf46605c5aefc0bc6d56f19ba5c082158b9a83cbf8a8eb24413836d86", + "hearter": "0x4aC4a33101aBB2AA21167De2b881429B915818a3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000000 + }, + { + "blockNumber": 22931991, + "transactionHash": "0x837ac80d070fc54c0faf258cd107b32480d7efa3a3b0f7b4385fe4fd7b34a642", + "hearter": "0x6014CE4866E1eA18493368B642ee6660933E9470", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22933667, + "transactionHash": "0x778553cdc0edb9e593bf08cd7bf4ba75ffc2beff03fe85b45732aadbd9e663dd", + "hearter": "0x8567F1368d413078AEfc31A25484AB59d506e759", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22934138, + "transactionHash": "0xb4e5742d2087f615a85b23495012bb95c32a07062dc0747518379d1450180f0d", + "hearter": "0x22f6EDb55790B0Fe841C5BA9aa30792ebcB55863", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22934236, + "transactionHash": "0x5a9b4cd4b15fc61e53041dded72ece3c0e02d5a414db2b38ac15fe53c7c83da9", + "hearter": "0xf92897b9A7FfCfE18bcE4Ca9ED31b45ad25c2808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1800000000000000000 + }, + { + "blockNumber": 22934782, + "transactionHash": "0xb11906e686aae5dd5ba3f9136747f02ed784b7a8013a574f729eb771242e89de", + "hearter": "0xAC9f9087aE227e6a4b2Eb0809284A79F8e239F7e", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22935109, + "transactionHash": "0xa14fad6c5c1aa4531f07a55e11dfc3ebf6ed428ec68654cfe15f2120b8b8538b", + "hearter": "0x67FA75dB8c6C7A6f3DDe0B06224b1FE9F1A4ee9A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22935840, + "transactionHash": "0x10c8a39b850eb701a7189aa60ce61e7fc393ac8f57a724e904c37d1f7e759183", + "hearter": "0x0AC6888056be667D6Bfce8C794FB7747Cb5a12c8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1500000000000000000 + }, + { + "blockNumber": 22935865, + "transactionHash": "0xdeba69676b69e237b4e251bddad3818d1ece1cf45897726f11b45a65f4d10ea5", + "hearter": "0x251857E07702A3c68a7E9f4Db754febcc4F81365", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22935952, + "transactionHash": "0xc949c6a29eaa464b2d790ec1086db25b778186ec44138a5e483b2a91bf1d4ab6", + "hearter": "0x3bB6CFebFD983c67b71a026983A556868E40a0a3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22936065, + "transactionHash": "0x48482aa27b9af5bff1e09b304c3b370aad54f998a647ebca2025366e8728f375", + "hearter": "0x3bB6CFebFD983c67b71a026983A556868E40a0a3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22936075, + "transactionHash": "0xc0ace3af4631b7fd37ddf1a09999898004e7ae6a39aaccfdfbcfda2e0f898cd7", + "hearter": "0x3bB6CFebFD983c67b71a026983A556868E40a0a3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22936078, + "transactionHash": "0x3039ca6e7ece978826e1edcd5abefa233212c01dbee67f1fd5ec01b508952ff6", + "hearter": "0x0AC6888056be667D6Bfce8C794FB7747Cb5a12c8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22936118, + "transactionHash": "0x2394da5935879a3f9c06bbcd55fbfd09b96d1df8136e3d3f55dcb04eb34a2f70", + "hearter": "0x3BDC51bdAE72C57fE65D3B34297BCacac17655b6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22936220, + "transactionHash": "0xf72efb90f49ec820264ee67d02ddc632b57a71acd9d22bc1ce3a652e7433a597", + "hearter": "0x1e9Ec5C0F8C7150c92dFaEd64bE9B58eC481b23f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22936651, + "transactionHash": "0xafeeba72d9fed9f217b952475d920e298ce6dd751ff4acdd72df8cb6670da1ad", + "hearter": "0x1E6E15b2d7551b4F8A20865E4E752Bbf2ccB04e8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22936942, + "transactionHash": "0x80d3aca79db109a5178b74b5bd6ec736142380aa6826cbd4ead43555b1f65564", + "hearter": "0x84cE15725Af2AC6c036e6B15ce9Dbd253Ddf4F9c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000 + }, + { + "blockNumber": 22936979, + "transactionHash": "0x3f5e280259562080d2ddc7212d95185c4007c9095e8e032bbd1364f3dc1ab14f", + "hearter": "0xdfbaAe9b5acDC368F692FC9B8c7f2298Dd26FF6F", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22937054, + "transactionHash": "0xc4cc276aa0a353b7bd87c4796ef535fbbb473d1aa230f5e27b1b79946eec4656", + "hearter": "0x3BDC51bdAE72C57fE65D3B34297BCacac17655b6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 950000000000000000 + }, + { + "blockNumber": 22938041, + "transactionHash": "0x9674022cba36ee09be0a84b3f3a264f59c59376a11aac23c18faa0ebcafa7e77", + "hearter": "0xd4b4cAB5cf150F46448A8b312CF4d96521953C5f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22938091, + "transactionHash": "0x6ddade07b37c852673f093acb8002ee652e19eab57612ef312e63191d5dd5b97", + "hearter": "0x2938910D336407aBf3E59345Be969f4484bd7F46", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 250000000000000000 + }, + { + "blockNumber": 22938093, + "transactionHash": "0x932fed2165c3ca545483d64c94adf02bb4371c38ed2b140a1ca73686103b549a", + "hearter": "0x24e73Fa9af76E337C4dB668fE30D795786046Ff2", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22938110, + "transactionHash": "0xf78b711939d5d10042bb492f1c916632cc09523b9a45dc3de9cc8701ebcde1d8", + "hearter": "0x5078e2dc404896934F1b2B1E8bD65a8b8fd642a6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22938256, + "transactionHash": "0x8655490d2bd81edb2c78b3943e3106b01806b4fbc84463c222175736636b1928", + "hearter": "0xD51fb02B6c5EB023290D60542cB4D7064Dc240a8", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22938328, + "transactionHash": "0x0c717e956fb359267709758c571782d03570c2e52c911a2d30bb14d568111690", + "hearter": "0x12D1D1f00A507643f6E69e16C743541ab9dd6832", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1400000000000000000 + }, + { + "blockNumber": 22938432, + "transactionHash": "0x886642bbbb045388c99a5b446e82f13d2c8117791f0696880757050649c47400", + "hearter": "0xdb5b00fa67086047c5B9bAD310c15d7794ff9422", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22938593, + "transactionHash": "0x3a79b2cb18d74cfc1998e7246c5ee7d9decfa6e3bcdcbcdef08d03b7352dc514", + "hearter": "0xF992f01B371Ae1f9087B957EDd95d6E844070Ff9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22938600, + "transactionHash": "0x17fc30d5a33e01f499cd79138553fa0374936a8741af32b5719f8873e9b99ed9", + "hearter": "0xF992f01B371Ae1f9087B957EDd95d6E844070Ff9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22938659, + "transactionHash": "0x385eb11264d3cf7ff446815abcb50b157189f08dd2c0e3f6579fdca7541ae97f", + "hearter": "0xa999171a1432c18ce403365acC2AdFA5c2Ec6091", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22938666, + "transactionHash": "0x2a89815a71a985618923ec7d7fe08e7dd22f9ae2bb52105a01eefcd636eef05d", + "hearter": "0xD3b0eb9008d1BcfC1BF6Dd35124D511cf733f352", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22938671, + "transactionHash": "0x44edd16bbd5618b8d7f12717a8b9315800dc5c1ca4338866f5c5a6d3382111d0", + "hearter": "0xa999171a1432c18ce403365acC2AdFA5c2Ec6091", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22938794, + "transactionHash": "0xfb17ee9bd159a59860b359bd1420c2c1fa4e042f6e7841fabdc21d0fe22f6570", + "hearter": "0x123791770351Ccfcc96A3DBA2658fe4200a66584", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22939082, + "transactionHash": "0xd8ff266b742c6b9bc1658cc9f7bac0427453b84b7ae4a527ad51f95e520615ec", + "hearter": "0xF992f01B371Ae1f9087B957EDd95d6E844070Ff9", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22939396, + "transactionHash": "0x42966d66b43f169b534c31c730f14e9dc57aec50693c3d40d8461535c4027375", + "hearter": "0x501506954673A4bc491c8099baC25760d12661f3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 395000000000000000 + }, + { + "blockNumber": 22939579, + "transactionHash": "0x69f201a94433f3cb24c87f562bc2841d042804bb4160ab00f62d8dda19713761", + "hearter": "0x997768Db040A75e7B9828a8d2ca284aC9Ac285C2", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22939940, + "transactionHash": "0xdf14bb4efe0adffea35340b5629e509db7b32a1060f6f0cf50ba6ffee21c069f", + "hearter": "0x5E580254b6561dC0f53c3BE408474a615e15E327", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22940028, + "transactionHash": "0x1375df0f568f9cb242a239c909d9caf474b6fa275cb3d74823ea6b4f285dcec8", + "hearter": "0x5E580254b6561dC0f53c3BE408474a615e15E327", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22940203, + "transactionHash": "0xd04e515d1ade6ca185886407c217d16e7360bd499aa5eb7c2575d047ef002977", + "hearter": "0x42972d9902e1a5047B99e8a8e804f433F9AE497C", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22940281, + "transactionHash": "0x8c02167d101679daecb1c803308d0fee8e864f0807c25956e49a16c4ee590c69", + "hearter": "0x384450D65Ed9CE2c10F6C880aCC0dc50eEc5fB38", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 25000000000000000 + }, + { + "blockNumber": 22941031, + "transactionHash": "0x0e78a03e2fe7a478d125138672ff2420dc5b5639ffcc0ad779cbb82a4e54de8d", + "hearter": "0xe2c1f5699fc79a17fDf8868a9d56F6ca4F8845AF", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22941034, + "transactionHash": "0x402030b4308592013629f78d8af98ff934b5f157b1392376e9688f6b6951c032", + "hearter": "0x873BEDA8cFAbba1934E72D11908D80E585A52741", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22941104, + "transactionHash": "0x3c1032136a12a96c2778989fd5b1bf4d61eca2d0879d43e45d52fca283ffcf9d", + "hearter": "0x70ad36075b602F32443E67591E60a0E753C22Fc5", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22941261, + "transactionHash": "0x2d5a8350499ab118b6de1d051c116156bd0f8d38e556f4af7a0cda625c0384d2", + "hearter": "0xF50711DCF20AfA1B04778e69c8eE38516312175e", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000000 + }, + { + "blockNumber": 22941447, + "transactionHash": "0xfe334952b55e4c1210e68c34e4719e8c6e4264a2a90585afa60f91bf658a92fb", + "hearter": "0x114ad571bFB3Ba81B98CAF610f41EE71559481B3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22941514, + "transactionHash": "0xe34c7f26c6c2b7acbd8441e8c5110bf75ff0f8f98d0b5eaedd6f321860835300", + "hearter": "0x114ad571bFB3Ba81B98CAF610f41EE71559481B3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22941566, + "transactionHash": "0x631847cf9ea6b1eca01720695554f282da013397eac9b7b19ef1676a2ed2d53a", + "hearter": "0x6Db609E8670Af9ABDd0fe18Ba7B9A81424dbd066", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000000 + }, + { + "blockNumber": 22941851, + "transactionHash": "0xf37d554aa5bfb13ccb5a7a668a237c88ca9377e342dbdeeb214e1394d4d0a424", + "hearter": "0xBC87Ca75EE832c4d6894790958bA8C9D3B48beB6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000000 + }, + { + "blockNumber": 22942029, + "transactionHash": "0x71cdea271b8c8ad629f679b36e17b2ef2eb2a46481bbc17817d6c4d081921a3b", + "hearter": "0xE4D696a2b36a66781486bDFFB5009C3e3b648723", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 80000000000000000 + }, + { + "blockNumber": 22942141, + "transactionHash": "0x6571f62c71d4e35afce8b9ba1692bf34bcc22f4b9104f5ba897ffd3e9cb76c4d", + "hearter": "0x26353065f1e45Cc292b452bbbe6a80b6B44Ab2a4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22942166, + "transactionHash": "0x277e873c114675742e7d64e61adf5ac56ac25f3b5baf14e1ccae44540b463f7d", + "hearter": "0x538AF26B164505294287b1c89B22222e58093D78", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22942239, + "transactionHash": "0xd5ac6b0dea8a358d34d01fd8b72c1f2defb06be0ee83bafa8d20ae32b12ecf3a", + "hearter": "0x26353065f1e45Cc292b452bbbe6a80b6B44Ab2a4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22942452, + "transactionHash": "0x5a8203fe45ba07f5d1d7f0127bb9f7366ce58224a850bcbd7d775b164177d7f3", + "hearter": "0xedE8BB6ea02e48fBe9f3b6A778D7dd6D165ab518", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22942841, + "transactionHash": "0xd700b72dfd2d184180a783067b1d4a736b21bdd51e06bd557ce87f8c841a518d", + "hearter": "0xaea5A2E95db09fF31B604C792295672b98D2Bf1f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 30000000000000000 + }, + { + "blockNumber": 22942890, + "transactionHash": "0x72312d152685635f1648d597c4fe88923907356492905bef9b07ce072eff68c6", + "hearter": "0x10031a8001D7ac0bf507CAd46fF5E835C339d89a", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 200000000000000000 + }, + { + "blockNumber": 22942908, + "transactionHash": "0x3d9c4d41f68ef574626b32a1222efa6042cce24090ca0088ee6490762ab0f7ca", + "hearter": "0xc008FCe4b57d66D8E0770306b28b04aC45565cf0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22942952, + "transactionHash": "0xf3ed3a76a74761e4b56e6141146b2246891e54afd7de4fde1d477ecbc981363e", + "hearter": "0x6fE21798bF9bA9cBdF3215888F3430b8a4616C2e", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22943025, + "transactionHash": "0x69a0b35110f9addb4cc80cb429fd514074e3a4f76f141412e23b370066aa0709", + "hearter": "0xD24FF5e32DE12be154B1C2eE7B731CBC45540E50", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 3000000000000000000 + }, + { + "blockNumber": 22943052, + "transactionHash": "0x71cd3de5eb89f13a0b5715f023e62e2b138b9e16154d8c9223a1db4d0a717c3d", + "hearter": "0xFE4B04ADe5478F3B649614221CDCc43EE31fA27e", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22943118, + "transactionHash": "0x288cdc70268464b6189f019c970118ca428f22ea8e7bd23a6eb3e4b4866c6167", + "hearter": "0x1Cdf2f371fEcc3F2D66a5B6183Ed4147895F90fB", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22943146, + "transactionHash": "0x90ab7bf1799e613212dd9d4e53e316998daa801b13e6eecc6eb4feae7993a0b5", + "hearter": "0x2f217f6CebbdC08d818E12aF5Dc5464a1F43a9c4", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22943191, + "transactionHash": "0xe77cf246da34e34f5b299b5ab503852bd38128c348674df7ee163bb1d53e73d6", + "hearter": "0xc2B66053C5871c4512C7733BaC07520AcC694e8F", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 400000000000000000 + }, + { + "blockNumber": 22943257, + "transactionHash": "0xb8f7d56a4b6dcfd2c478c822e5eb0afaf6a6cd5381ca7879f97c2f6d4e8b7b82", + "hearter": "0xEdc894CAb7A7D0ec6A0E7BCA36Aec1F62eF84928", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22943298, + "transactionHash": "0x71dc5f5e47a52c539cff3259d8a0cc0ae820a11065b35afd9a3cc6565903d95d", + "hearter": "0xDC3a71cb692311305051A443529684f5b1C1Ca1A", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22943344, + "transactionHash": "0xa0d12defa1690338e82f678ae03afd6d8d44ad1cc53b3e618f2952ea903477ca", + "hearter": "0xF01BCb0090CD0f734688CE77ae067dA58E9D8005", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 600000000000000000 + }, + { + "blockNumber": 22943384, + "transactionHash": "0x8ddcd225b1f81f2e76f74709fc50f1acadd8e4d2814c1d89ea866c53150c0d71", + "hearter": "0x1517Da155B1dB5aeE17D0218C762E83b616526fC", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 5000000000000000 + }, + { + "blockNumber": 22943523, + "transactionHash": "0x8ce19358dcfa332ed1e7c4b924d6aa803938de55504a15c4d2dd46dbec5538e5", + "hearter": "0x9C7A1FAC980432CFdeAD5eFBC4c5AA93f808246B", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22943558, + "transactionHash": "0xe3ba0c0e675647a8e46cf6f74fae3b6920da3b3c211d46b2f61e6edadb856866", + "hearter": "0x5E580254b6561dC0f53c3BE408474a615e15E327", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22943797, + "transactionHash": "0xfc3697ea33cf820b03be3ecbc58bd1d5e484ca118aad63383224e794f13010b7", + "hearter": "0x2f7f77e019c0D211289E7E1C1f25438FEae0F069", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 300000000000000000 + }, + { + "blockNumber": 22943867, + "transactionHash": "0x0347d39d371d07e2096fc266f764534e3fd8784b549ede40167957bfa304b09b", + "hearter": "0x0d3755A0874A9E6F209D08776134d76Af6b97391", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22944032, + "transactionHash": "0xa88eed8c3ca1e3d8d012a13d177ea28db29984e0f4fdcb84848201f7c5c141b5", + "hearter": "0x8eC30f0251eE743aCDcd1F9Bc2dC605b731BA821", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 50000000000000000 + }, + { + "blockNumber": 22944144, + "transactionHash": "0x1a601cdf24ac4104d332e00fe003c9ff5a7f36664db9f515fc1ee7bbfcb78526", + "hearter": "0xAbE0cDD036456Fcc1B64d1DdB7aA3bdF7d5B98B1", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 2000000000000000000 + }, + { + "blockNumber": 22944241, + "transactionHash": "0x17c8ab891ff7913dfaa8759bb52445554c6ace94927fbec444b097838f6076f8", + "hearter": "0x7372838169895900695e908736A52a443039c5be", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22944276, + "transactionHash": "0xbce2cc19f0fd65e94db3f0e65a1c3914bdccbaedf35ca5ea1df08ef7e3644f89", + "hearter": "0x9a63B2E370994d5Bfd26ae2C2309C7BCB1031a73", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22944277, + "transactionHash": "0x7b8beff5e9d409cdcbe278856607a974e8845ff65ca8d278ac48ed9c07cd04db", + "hearter": "0x734cF69ac30EFE07f1c8fbDe2ae79C27FEEcb2B6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22944306, + "transactionHash": "0x38c12db4289830d977a2caf17ce545251ebaba7f8a2b9b2f2eb5c4acf4f13b65", + "hearter": "0x4C8D78a40C45aF71C448F35C6AD153d0a7B9651f", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22944869, + "transactionHash": "0xf2c1919555ed1ada66fbb3cd3783831c2d99497c6d874825ed8e85dc390c685c", + "hearter": "0x612C45551195f15Bf05D722b9f137C914b077FC7", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22945197, + "transactionHash": "0x2a5ef7f4f33f22bf8ff34f6fb2caf24f31dec9f5235304dad3026b7ad0e14895", + "hearter": "0x1EF986D5344c5ad8888902A4eE6ba3be4756b51c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 100000000000000000 + }, + { + "blockNumber": 22945220, + "transactionHash": "0xcf48210ee558f206771f22d62130e648c9ed5275b81ab5b0e349fd36118638fa", + "hearter": "0x1EF986D5344c5ad8888902A4eE6ba3be4756b51c", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 400000000000000000 + }, + { + "blockNumber": 22945398, + "transactionHash": "0xd8aebe4468e3e261f15f87d418c5064a7790fc552ef4bb23d21cfce6d01fb808", + "hearter": "0xbeD24EF9372A3e2E485515cE5A104fe1f4fB3C8E", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22945662, + "transactionHash": "0x4f429f0871a6eb4a60fd1851a9e7d6e51b769ac201a49f6728b4e40fddd9c7ad", + "hearter": "0x4763C43bC7936859072dF53a26337a32B710A1b2", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 20000000000000000 + }, + { + "blockNumber": 22945751, + "transactionHash": "0x529801e5e4ce5cc56e32b412ea4a7b137641f9c7180ea46ac6b8f144b2c45bf9", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22945781, + "transactionHash": "0x8fe42cb3221fe8e530719c03669dbc5c76a59c4461a9876df9a9f55337a1c5ea", + "hearter": "0xb3d906e81fc99feE78555b8FE960c395D7137808", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 500000000000000000 + }, + { + "blockNumber": 22945953, + "transactionHash": "0x294f232f0d858841acd67ff6fdbfda4bd236f3e03af61351d25442de94e98728", + "hearter": "0xf96Be336D78294633A04b10b97fA78DbFA8841C0", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22945989, + "transactionHash": "0x7c19efff0186e9c720ab9b29573505733cfbc61101d0ad5d9048395cc0457dfc", + "hearter": "0x4EebEE7494A119391059A0410bb05cB5B37588A6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000 + }, + { + "blockNumber": 22945993, + "transactionHash": "0xcbfe5efa547db42eb9e8895e26f95c5c9af576c6e4edbf8f0d2c4695dba56668", + "hearter": "0xB1cbDCbA1131f6364bdad13eED4109f7048C3903", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22946004, + "transactionHash": "0xa0688380ca3aedd4496966d0a681709b70b16113c628cd742e62c30f6d2430db", + "hearter": "0x4EebEE7494A119391059A0410bb05cB5B37588A6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22946067, + "transactionHash": "0xbda2091397401f66d4cd74ba951de181119134af15f41290063446730a7b5c34", + "hearter": "0x3577f85Dd62738bfF9e0009d4e74D2d568074297", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000000000 + }, + { + "blockNumber": 22946098, + "transactionHash": "0xaf59a8d7ddc6bd6b7b6c9acd7a37e80ee267ee0902c9038ddafbe4c518888c05", + "hearter": "0x38Aa85c55261B291530e2abA7833F505554C89B3", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1800000000000000000 + }, + { + "blockNumber": 22946132, + "transactionHash": "0x2eb7adb5f7198cd91d4e81fc378508743159530a6daee2678a04c3e32a33891e", + "hearter": "0xB1cbDCbA1131f6364bdad13eED4109f7048C3903", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 60000000000000000 + }, + { + "blockNumber": 22946192, + "transactionHash": "0x56354b49753d15d3d4ca16d061a5787e37fd59512631d36e5f80c25ab3bca759", + "hearter": "0xD69a9068ebc98cA6f27ac92f45fFDce464719942", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1200000000000000000 + }, + { + "blockNumber": 22946193, + "transactionHash": "0x27599e253601f6f5ba66bc8a762ffb06d0d9307a9057d90adf0b3b671d1ef129", + "hearter": "0xd5F40BEaAf1910B751D75630c0621851Ce988D44", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 25000000000000000 + }, + { + "blockNumber": 22946490, + "transactionHash": "0xe12287873ce6ed647b85192be02c546f6dc89b8389773408a4b22f9e5a5f8935", + "hearter": "0x4EebEE7494A119391059A0410bb05cB5B37588A6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000 + }, + { + "blockNumber": 22946937, + "transactionHash": "0xe63652bb945a78d0d9122e6917fc5e88cbde2c8affaec7f9a9b2b6d9b3628b99", + "hearter": "0x8A70E2503dDcd80c280d11e33fC6cdAB78a5E538", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 890000000000000000 + }, + { + "blockNumber": 22962976, + "transactionHash": "0x7bcfa99cf9d9d3ee2ea7176faad426fc2fa8087aae5f18ca3db11ba8d40679c9", + "hearter": "0xad1cc527e94F15B47af2d54949912986a028F6C5", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22963006, + "transactionHash": "0x84196e7c674a6a9ead9e9fc996479a2ee3674e6e2e07377f3e89f52c35614b46", + "hearter": "0x7e0950BB1c7cF44f73618628d2C02c7A1B0b0409", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22963445, + "transactionHash": "0xabcbfd898974ac9d087ac0ac7548e88e7e119e957b802c0c2b992a1d298308ae", + "hearter": "0x414DA4DbC1a4271452CB779f1A01d6Ba5f36Bee1", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000000 + }, + { + "blockNumber": 22985831, + "transactionHash": "0x98a23562efa391429e7d3732f10542261f02f5ad80862a41bccb89c77ae62f26", + "hearter": "0x51e1F4217166Ce136647BB2a301031ABd4000000", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 10000000000000 + }, + { + "blockNumber": 22989374, + "transactionHash": "0x65cf94dc8a55f1f7b642d37bdef785435b3515ded2e54418397f9cfd966eafd3", + "hearter": "0x4EebEE7494A119391059A0410bb05cB5B37588A6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1000000000000 + }, + { + "blockNumber": 22989474, + "transactionHash": "0x940a784fffe491961884d8c26f5318f8aedfbd1374e3a92b52b896ba810c0401", + "hearter": "0x4EebEE7494A119391059A0410bb05cB5B37588A6", + "memeToken": "0x7484a9fB40b16c4DFE9195Da399e808aa45E9BB9", + "amount": 1100000000000 + } +] \ No newline at end of file diff --git a/scripts/deployment/run_01_prove_and_verify.js b/scripts/deployment/run_01_prove_and_verify.js new file mode 100644 index 0000000..1fcf214 --- /dev/null +++ b/scripts/deployment/run_01_prove_and_verify.js @@ -0,0 +1,215 @@ +/*global process*/ + +const { keccak256 } = require('@ethersproject/keccak256'); +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +const l2ToL1MessagePasserAbi = require('abis/bridging/l2ToL1MessagePasser.json'); +const l2OuputOracleAbi = require('abis/bridging/l2OutputOracle.json'); +const optimismPortalAbi = require('abis/bridging/optimismPortal.json'); + +/// https://docs.base.org/docs/base-contracts/ +const l2ToL1MessagePasser = '0x4200000000000000000000000000000000000016'; +const disputeGameFactory = '0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1'; +const l2OutputOracle = '0x56315b90c40730925ec5485cf004d835058518A0'; +const optimismPortal = '0x49048044D57e1C92A77f79988d21Fa8fAF74E97e'; + +const getPortalContract = (signer) => { + const portalContract = new ethers.Contract( + optimismPortal, + optimismPortalAbi, + signer, + ); + return portalContract; +}; + +const getOracleContract = (signer) => { + const oracleContract = new ethers.Contract( + l2OutputOracle, + l2OuputOracleAbi, + signer, + ); + return oracleContract; +}; + +const getMessageContract = (signer) => { + const messageContract = new ethers.Contract( + l2ToL1MessagePasser, + l2ToL1MessagePasserAbi, + signer, + ); + return messageContract; +}; + +const getWithdrawalMessage = async (messageContract, withdrawal, isToken) => { + let messageLog = withdrawal.logs.find((log) => { + if (log.address === l2ToL1MessagePasser) { + const parsed = messageContract.interface.parseLog(log); + console.log('parsed', parsed); + return parsed.name === 'MessagePassed'; + } + return false; + }); + console.log('messageLog', messageLog); + + if (!messageLog) { + messageLog = withdrawal.logs[0]; + } + const parsedLog = messageContract.interface.parseLog(messageLog); + + const withdrawalMessage = { + nonce: parsedLog.args.nonce, + sender: parsedLog.args.sender, + target: parsedLog.args.target, + value: parsedLog.args.value, + gasLimit: parsedLog.args.gasLimit, + data: parsedLog.args.data, + }; + console.log('withdrawalMessage', withdrawalMessage); + return withdrawalMessage; +}; + +const hashWithdrawal = (withdrawalMessage) => { + const types = [ + 'uint256', + 'address', + 'address', + 'uint256', + 'uint256', + 'bytes', + ]; + const encoded = defaultAbiCoder.encode(types, [ + withdrawalMessage.nonce, + withdrawalMessage.sender, + withdrawalMessage.target, + withdrawalMessage.value, + withdrawalMessage.gasLimit, + withdrawalMessage.data, + ]); + return keccak256(encoded); +}; + +const makeStateTrieProof = async (provider, blockNumber, address, slot) => { + const proof = await provider.send('eth_getProof', [ + address, + [slot], + blockNumber, + ]); + + return { + accountProof: proof.accountProof, + storageProof: proof.storageProof[0].proof, + storageValue: BigInt(proof.storageProof[0].value), + storageRoot: proof.storageHash, + }; +}; + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const tx = parsedData.tx; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const address = await EOA.getAddress(); + console.log("EOA is:", address); + + const signer = EOA; + + const l1Signer = EOA; + + const oracleContract = getOracleContract(l1Signer); + + const messageContract = getMessageContract(signer); + + const portalContract = getPortalContract(l1Signer); + + const withdrawal = await signer.provider.getTransactionReceipt(tx); + console.log('withdrawal receipt', withdrawal.blockNumber, withdrawal); + + // OK we fail here, because l2OutputOracle is no longer in use + // it's been replaced by disputeGameFactoryProxy (https://etherscan.io/address/0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e) + // https://docs.base.org/docs/base-contracts/ + // https://www.onesafe.io/blog/base-fault-proofs-crypto-security-banking-protocols#:~:text=Base%2C%20the%20Ethereum%20Layer%202,more%20secure%20and%20decentralized%20network. + // no idea how the logic then continues from here ... + const l2OutputIdx = await oracleContract.getL2OutputIndexAfter( + withdrawal.blockNumber, + ); + console.log('l2OutputIdx', l2OutputIdx); + + // const l2Output = await oracleContract.getL2Output(l2OutputIdx); + // console.log('l2Output', l2Output); + + // const withdrawalMessage = await getWithdrawalMessage( + // messageContract, + // withdrawal, + // ); + + // const hashedWithdrawal = hashWithdrawal(withdrawalMessage); + + // const messageSlot = keccak256( + // defaultAbiCoder.encode( + // ['bytes32', 'uint256'], + // [hashedWithdrawal, HashZero], + // ), + // ); + + // const l2BlockNumber = '0x' + BigInt(l2Output[2]).toString(16); + + // const proof = await makeStateTrieProof( + // signer.provider, + // l2BlockNumber, + // l2ToL1MessagePasser, + // messageSlot, + // ); + // console.log('proof', proof); + + // const block = await signer.provider.send('eth_getBlockByNumber', [ + // l2BlockNumber, + // false, + // ]); + // console.log('block', block); + + // const outputProof = { + // version: HashZero, + // stateRoot: block.stateRoot, + // messagePasserStorageRoot: proof.storageRoot, + // latestBlockhash: block.hash, + // }; + // console.log('outputProof', outputProof); + + // try { + // const proving = await portalContract.proveWithdrawalTransaction( + // withdrawalMessage, + // l2OutputIdx, + // outputProof, + // proof.storageProof, + // ); + // console.log('proving', proving); + // const result = await proving.wait(); + // console.log('proving result', result); + // } catch (e) { + // console.log('withdrawal error', e); + // } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/verify_01_meme_base.js b/scripts/deployment/verify_00_balancer_price_oracle.js similarity index 50% rename from scripts/deployment/verify_01_meme_base.js rename to scripts/deployment/verify_00_balancer_price_oracle.js index 77f9279..ec25f77 100644 --- a/scripts/deployment/verify_01_meme_base.js +++ b/scripts/deployment/verify_00_balancer_price_oracle.js @@ -1,17 +1,13 @@ const fs = require("fs"); const globalsFile = "globals.json"; -const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); const parsedData = JSON.parse(dataFromJSON); module.exports = [ parsedData.olasAddress, - parsedData.usdcAddress, - parsedData.routerAddress, - parsedData.factoryAddress, - parsedData.minNativeTokenValue, parsedData.wethAddress, - parsedData.l2TokenBridgeAddress, - parsedData.oracleAddress, + parsedData.maxOracleSlippage, + parsedData.minUpdateTimePeriod, parsedData.balancerVaultAddress, parsedData.balancerPoolId ]; \ No newline at end of file diff --git a/scripts/deployment/verify_00_uniswap_price_oracle.js b/scripts/deployment/verify_00_uniswap_price_oracle.js new file mode 100644 index 0000000..6de85a2 --- /dev/null +++ b/scripts/deployment/verify_00_uniswap_price_oracle.js @@ -0,0 +1,11 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); +const nativeTokenAddress = parsedData.celoAddress; + +module.exports = [ + nativeTokenAddress, + parsedData.maxOracleSlippage, + parsedData.pairAddress +]; \ No newline at end of file diff --git a/scripts/deployment/verify_02_buy_back_burner_balancer_proxy.js b/scripts/deployment/verify_02_buy_back_burner_balancer_proxy.js new file mode 100644 index 0000000..89616ba --- /dev/null +++ b/scripts/deployment/verify_02_buy_back_burner_balancer_proxy.js @@ -0,0 +1,16 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); +const buyBackBurnerAddress = parsedData.buyBackBurnerAddress; +const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "bytes32", "uint256"], + [[parsedData.olasAddress, parsedData.wethAddress, parsedData.balancerPriceOracleAddress, + parsedData.balancerVaultAddress], parsedData.balancerPoolId, parsedData.maxBuyBackSlippage]); +const iface = new ethers.utils.Interface(["function initialize(bytes memory payload)"]); +const proxyData = iface.encodeFunctionData("initialize", [proxyPayload]); + +module.exports = [ + buyBackBurnerAddress, + proxyData +]; \ No newline at end of file diff --git a/scripts/deployment/verify_02_buy_back_burner_uniswap_proxy.js b/scripts/deployment/verify_02_buy_back_burner_uniswap_proxy.js new file mode 100644 index 0000000..2233cfb --- /dev/null +++ b/scripts/deployment/verify_02_buy_back_burner_uniswap_proxy.js @@ -0,0 +1,17 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); +const buyBackBurnerAddress = parsedData.buyBackBurnerAddress; +const nativeTokenAddress = parsedData.celoAddress; +const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "uint256"], + [[parsedData.olasAddress, nativeTokenAddress, parsedData.uniswapPriceOracleAddress, + parsedData.routerV2Address], parsedData.maxBuyBackSlippage]); +const iface = new ethers.utils.Interface(["function initialize(bytes memory payload)"]); +const proxyData = iface.encodeFunctionData("initialize", [proxyPayload]); + +module.exports = [ + buyBackBurnerAddress, + proxyData +]; \ No newline at end of file diff --git a/scripts/deployment/verify_03_meme_base.js b/scripts/deployment/verify_03_meme_base.js new file mode 100644 index 0000000..60f3833 --- /dev/null +++ b/scripts/deployment/verify_03_meme_base.js @@ -0,0 +1,25 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +const redemptionsFile = "scripts/deployment/memebase_campaign.json"; +dataFromJSON = fs.readFileSync(redemptionsFile, "utf8"); +const redemptionsData = JSON.parse(dataFromJSON); + +const accounts = new Array(); +const amounts = new Array(); +for (let i = 0; i < redemptionsData.length; i++) { + accounts.push(redemptionsData[i]["hearter"]); + amounts.push(redemptionsData[i]["amount"].toString()); +} + +module.exports = [ + parsedData.olasAddress, + parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, + parsedData.buyBackBurnerProxyAddress, + parsedData.minNativeTokenValue, + accounts, + amounts +]; \ No newline at end of file diff --git a/scripts/deployment/verify_02_meme_celo.js b/scripts/deployment/verify_04_meme_celo.js similarity index 56% rename from scripts/deployment/verify_02_meme_celo.js rename to scripts/deployment/verify_04_meme_celo.js index 4420dae..a0fafaf 100644 --- a/scripts/deployment/verify_02_meme_celo.js +++ b/scripts/deployment/verify_04_meme_celo.js @@ -5,11 +5,8 @@ const parsedData = JSON.parse(dataFromJSON); module.exports = [ parsedData.olasAddress, - parsedData.cusdAddress, - parsedData.routerAddress, - parsedData.factoryAddress, - parsedData.minNativeTokenValue, parsedData.celoAddress, - parsedData.l2TokenBridgeAddress, - parsedData.oracleAddress + parsedData.uniV3positionManagerAddress, + parsedData.buyBackBurnerProxyAddress, + parsedData.minNativeTokenValue ]; \ No newline at end of file diff --git a/scripts/deployment/verify_05_meme_arbitrum.js b/scripts/deployment/verify_05_meme_arbitrum.js new file mode 100644 index 0000000..0274e40 --- /dev/null +++ b/scripts/deployment/verify_05_meme_arbitrum.js @@ -0,0 +1,12 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +module.exports = [ + parsedData.olasAddress, + parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, + parsedData.buyBackBurnerProxyAddress, + parsedData.minNativeTokenValue +]; \ No newline at end of file diff --git a/scripts/deployment/verify_03_meme_activity_checker.js b/scripts/deployment/verify_06_meme_activity_checker.js similarity index 100% rename from scripts/deployment/verify_03_meme_activity_checker.js rename to scripts/deployment/verify_06_meme_activity_checker.js diff --git a/scripts/deployment/verify_meme_token.js b/scripts/deployment/verify_meme_token.js new file mode 100644 index 0000000..cfea273 --- /dev/null +++ b/scripts/deployment/verify_meme_token.js @@ -0,0 +1,12 @@ +// npx hardhat verify --constructor-args scripts/deployment/verify_04_meme_token.js TOKEN_ADDRESS --network NETWORK +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +module.exports = [ + parsedData.name, + parsedData.symbol, + parsedData.decimals, + parsedData.totalSupply +]; \ No newline at end of file diff --git a/test/MemeBase.js b/test/MemeBase.js new file mode 100644 index 0000000..e3ce363 --- /dev/null +++ b/test/MemeBase.js @@ -0,0 +1,114 @@ +/*global describe, context, beforeEach, it*/ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const helpers = require("@nomicfoundation/hardhat-network-helpers"); + +// This works on a fork only! +const main = async () => { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + const parsedData = JSON.parse(dataFromJSON); + + const AddressZero = ethers.constants.AddressZero; + const HashZero = ethers.constants.HashZero; + const name = "Meme"; + const symbol = "MM"; + const totalSupply = "1" + "0".repeat(24); + const defaultDeposit = parsedData.minNativeTokenValue; + const defaultHash = "0x" + "5".repeat(64); + const payload = "0x"; + const oneDay = 86400; + const twoDays = 2 * oneDay; + const nonce = 1; + + signers = await ethers.getSigners(); + deployer = signers[0]; + + // BalancerPriceOracle + const BalancerPriceOracle = await ethers.getContractFactory("BalancerPriceOracle"); + const balancerPriceOracle = await BalancerPriceOracle.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.maxOracleSlippage, parsedData.minUpdateTimePeriod, parsedData.balancerVaultAddress, + parsedData.balancerPoolId); + await balancerPriceOracle.deployed(); + + // BuyBackBurnerBalancer implementation and proxy + const BuyBackBurnerBalancer = await ethers.getContractFactory("BuyBackBurnerBalancer"); + const buyBackBurnerImplementation = await BuyBackBurnerBalancer.deploy(); + await buyBackBurnerImplementation.deployed(); + + // Initialize buyBackBurner + const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "bytes32", "uint256"], + [[parsedData.olasAddress, parsedData.wethAddress, balancerPriceOracle.address, + parsedData.balancerVaultAddress], parsedData.balancerPoolId, parsedData.maxBuyBackSlippage]); + const proxyData = buyBackBurnerImplementation.interface.encodeFunctionData("initialize", [proxyPayload]); + const BuyBackBurnerProxy = await ethers.getContractFactory("BuyBackBurnerProxy"); + const buyBackBurnerProxy = await BuyBackBurnerProxy.deploy(buyBackBurnerImplementation.address, proxyData); + await buyBackBurnerProxy.deployed(); + + const buyBackBurner = await ethers.getContractAt("BuyBackBurnerBalancer", buyBackBurnerProxy.address); + + // MemeBase + const MemeBase = await ethers.getContractFactory("MemeBase"); + const memeBase = await MemeBase.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue, [], []); + await memeBase.deployed(); + + // Summon a new meme token + await memeBase.summonThisMeme(name, symbol, totalSupply, {value: defaultDeposit}); + + // Heart a new token by other accounts + await memeBase.connect(signers[1]).heartThisMeme(nonce, {value: defaultDeposit}); + await memeBase.connect(signers[2]).heartThisMeme(nonce, {value: defaultDeposit}); + + // Increase time to for 24 hours+ + await helpers.time.increase(oneDay + 10); + + // Unleash the meme token + await memeBase.unleashThisMeme(nonce); + + const memeToken = await memeBase.memeTokens(0); + console.log("New meme contract:", memeToken); + + // Deployer has already collected + await expect( + memeBase.collectThisMeme(memeToken) + ).to.be.reverted; + + // Collect by the first signer + await memeBase.connect(signers[1]).collectThisMeme(memeToken); + + // Wait for 24 more hours + await helpers.time.increase(oneDay + 10); + + // Second signer cannot collect + await expect( + memeBase.connect(signers[2]).collectThisMeme(memeToken) + ).to.be.reverted; + + // Purge remaining allocation + await memeBase.purgeThisMeme(memeToken); + + // Wait for 10 more seconds + await helpers.time.increase(10); + + // Swap to OLAS + const olasAmount = await memeBase.scheduledForAscendance(); + if (olasAmount.gt(0)) { + await memeBase.scheduleForAscendance(); + } + + // Collect fees + await memeBase.collectFees([memeToken]); + + // Get meme token info + //const memeInfo = await memeBase.memeSummons(nonce); + //console.log(memeInfo); +}; + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/test/MemeBaseLaunchCampaign.js b/test/MemeBaseLaunchCampaign.js new file mode 100644 index 0000000..6c0c4ff --- /dev/null +++ b/test/MemeBaseLaunchCampaign.js @@ -0,0 +1,566 @@ +/*global describe, context, beforeEach, it*/ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const helpers = require("@nomicfoundation/hardhat-network-helpers"); + +// This works on a fork only! +const main = async () => { + const fs = require("fs"); + const globalsFile = "globals.json"; + let dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + const parsedData = JSON.parse(dataFromJSON); + + const badName = ""; + const badSymbol = ""; + const name = "Meme"; + const symbol = "MM"; + const totalSupply = "1" + "0".repeat(24); + const smallDeposit = ethers.utils.parseEther("1"); + const defaultDeposit = ethers.utils.parseEther("1500"); + const oneDay = 86400; + const twoDays = 2 * oneDay; + const gasLimit = 10000000; + const fee = 10000; + // Nonce 1 is reserved for the campaign token + // Nonce 2 is the first new meme token + const nonce0 = 1; + const nonce1 = 2; + const nonce2 = 3; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + console.log("deployer address:", deployer.address); + console.log("Balance of deployer:", await ethers.provider.getBalance(deployer.address)); + console.log("signers[1] address:", signers[1].address); + console.log("Balance of signer 1:", await ethers.provider.getBalance(signers[1].address)); + console.log("signers[2] address:", signers[2].address); + console.log("Balance of signer 2", await ethers.provider.getBalance(signers[2].address)); + + console.log("Getting launch campaign data"); + const campaignFile = "scripts/deployment/memebase_campaign.json"; + dataFromJSON = fs.readFileSync(campaignFile, "utf8"); + const campaignData = JSON.parse(dataFromJSON); + console.log("Number of entries:", campaignData.length); + + const accounts = new Array(); + const amounts = new Array(); + for (let i = 0; i < campaignData.length; i++) { + accounts.push(campaignData[i]["hearter"]); + amounts.push(campaignData[i]["amount"].toString()); + } + + // BalancerPriceOracle + const BalancerPriceOracle = await ethers.getContractFactory("BalancerPriceOracle"); + const balancerPriceOracle = await BalancerPriceOracle.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.maxOracleSlippage, parsedData.minUpdateTimePeriod, parsedData.balancerVaultAddress, + parsedData.balancerPoolId); + await balancerPriceOracle.deployed(); + + // BuyBackBurnerBalancer implementation and proxy + const BuyBackBurnerBalancer = await ethers.getContractFactory("BuyBackBurnerBalancer"); + const buyBackBurnerImplementation = await BuyBackBurnerBalancer.deploy(); + await buyBackBurnerImplementation.deployed(); + + // Initialize buyBackBurner + const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "bytes32", "uint256"], + [[parsedData.olasAddress, parsedData.wethAddress, balancerPriceOracle.address, + parsedData.balancerVaultAddress], parsedData.balancerPoolId, parsedData.maxBuyBackSlippage]); + const proxyData = buyBackBurnerImplementation.interface.encodeFunctionData("initialize", [proxyPayload]); + const BuyBackBurnerProxy = await ethers.getContractFactory("BuyBackBurnerProxy"); + const buyBackBurnerProxy = await BuyBackBurnerProxy.deploy(buyBackBurnerImplementation.address, proxyData); + await buyBackBurnerProxy.deployed(); + + const buyBackBurner = await ethers.getContractAt("BuyBackBurnerBalancer", buyBackBurnerProxy.address); + expect(deployer.address).to.equal(await buyBackBurner.owner()); + + const MemeBase = await ethers.getContractFactory("MemeBase"); + const memeBase = await MemeBase.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue, + accounts, amounts); + await memeBase.deployed(); + + // Try to deploy oracle with incorrect values + await expect( + BalancerPriceOracle.deploy(parsedData.olasAddress, parsedData.wethAddress, 100, + parsedData.minUpdateTimePeriod, parsedData.balancerVaultAddress, parsedData.balancerPoolId) + ).to.be.revertedWith("Slippage must be less than 100%"); + // Try to validate price with the slippage too high + await expect( + balancerPriceOracle.validatePrice(100) + ).to.be.revertedWith("Slippage overflow"); + + // Try to check prices on non-existent pool + await expect( + buyBackBurner.checkPoolPrices(parsedData.olasAddress, parsedData.wethAddress, parsedData.uniV3positionManagerAddress, 1) + ).to.be.revertedWith("Pool does not exist"); + // Try to buy OLAS on empty amounts + await expect( + buyBackBurner.buyBack(0) + ).to.be.revertedWith("Insufficient native token amount"); + // Try to update oracle price right away + await expect( + buyBackBurner.updateOraclePrice() + ).to.be.revertedWith("Oracle price update failed"); + // Try to initialize buyBackBurner again + await expect( + buyBackBurner.initialize(proxyPayload) + ).to.be.revertedWithCustomError(BuyBackBurnerBalancer, "AlreadyInitialized"); + + // Try to deploy meme base with incorrect campaign params + // Incorrect array sizes + await expect( + MemeBase.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue, + accounts, []) + ).to.be.revertedWith("Array lengths are not equal"); + await expect( + MemeBase.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue, + accounts, [amounts[0]]) + ).to.be.revertedWith("Array lengths are not equal"); + + // Incorrect accumulated CONTRIBUTION_AGNT amount + await expect( + MemeBase.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue, + [accounts[0]], [amounts[0]]) + ).to.be.revertedWith("Total amount must match original contribution amount"); + + const wethABI = fs.readFileSync("abis/uniswap/weth.json", "utf8"); + const weth = new ethers.Contract(parsedData.wethAddress, wethABI, ethers.provider); + + let baseBalance = await weth.balanceOf(memeBase.address); + expect(baseBalance).to.equal(0); + + // Summon a new meme token - negative cases + const minNativeTokenValue = await memeBase.minNativeTokenValue(); + const MIN_TOTAL_SUPPLY = await memeBase.MIN_TOTAL_SUPPLY(); + const uint128MaxPlusOne = BigInt(2) ** BigInt(128); + await expect( + memeBase.summonThisMeme(badName, badSymbol, totalSupply, {value: minNativeTokenValue}) + ).to.be.revertedWith("Name and symbol must not be empty"); + await expect( + memeBase.summonThisMeme(name, badSymbol, totalSupply, {value: minNativeTokenValue}) + ).to.be.revertedWith("Name and symbol must not be empty"); + await expect( + memeBase.summonThisMeme(name, symbol, totalSupply, {value: minNativeTokenValue.sub(1)}) + ).to.be.revertedWith("Minimum native token value is required to summon"); + await expect( + memeBase.summonThisMeme(name, symbol, MIN_TOTAL_SUPPLY.sub(1), {value: minNativeTokenValue}) + ).to.be.revertedWith("Minimum total supply is not met"); + await expect( + memeBase.summonThisMeme(name, symbol, uint128MaxPlusOne, {value: minNativeTokenValue}) + ).to.be.revertedWith("Maximum total supply overflow"); + + // Summon a new meme token - positive cases + await expect( + memeBase.summonThisMeme(name, symbol, totalSupply, {value: smallDeposit}) + ).to.emit(memeBase, "Summoned") + .withArgs(deployer.address, nonce1, smallDeposit) + .and.to.emit(memeBase, "Hearted") + .withArgs(deployer.address, nonce1, smallDeposit); + + let totalDeposit = smallDeposit; + let memeSummon = await memeBase.memeSummons(nonce1); + expect(memeSummon.name).to.equal(name); + expect(memeSummon.symbol).to.equal(symbol); + expect(memeSummon.totalSupply).to.equal(totalSupply); + expect(memeSummon.nativeTokenContributed).to.equal(smallDeposit); + const memeHearterValue = await memeBase.memeHearters(nonce1, deployer.address); + expect(memeHearterValue).to.equal(smallDeposit); + let accountActivity = await memeBase.mapAccountActivities(deployer.address); + expect(accountActivity).to.equal(1); + + // Heart a new token by other accounts - negative case + await expect( + memeBase.connect(signers[1]).heartThisMeme(nonce1, {value: 0}) + ).to.be.revertedWith("Native token amount must be greater than zero"); + await expect( + memeBase.connect(signers[1]).heartThisMeme(nonce2, {value: smallDeposit}) + ).to.be.revertedWith("Meme not yet summoned"); + // Check that launch campaign meme cannot be hearted (as a pseudo test) + await expect( + memeBase.connect(signers[1]).heartThisMeme(nonce0, {value: smallDeposit}) + ).to.be.revertedWith("Meme already unleashed"); + // Check that launch campaign meme cannot be collected + await expect( + memeBase.connect(signers[1]).collectThisMeme("0xFD49CbaE7bD16743bF9Fbb97bdFB30158e0b857e") + ).to.be.revertedWith("Meme not unleashed"); + // // Check that launch campaign meme cannot be purged + await expect( + memeBase.connect(signers[1]).purgeThisMeme("0xFD49CbaE7bD16743bF9Fbb97bdFB30158e0b857e") + ).to.be.revertedWith("Meme not unleashed"); + + // Heart a new token by other accounts - positive cases + await expect( + memeBase.connect(signers[1]).heartThisMeme(nonce1, {value: smallDeposit}) + ).to.emit(memeBase, "Hearted") + .withArgs(signers[1].address, nonce1, smallDeposit); + + totalDeposit = totalDeposit.add(smallDeposit) + memeSummon = await memeBase.memeSummons(nonce1); + expect(memeSummon.nativeTokenContributed).to.equal(ethers.BigNumber.from(smallDeposit).mul(2)); + accountActivity = await memeBase.mapAccountActivities(signers[1].address); + expect(accountActivity).to.equal(1); + await expect( + memeBase.connect(signers[2]).heartThisMeme(nonce1, {value: smallDeposit}) + ).to.emit(memeBase, "Hearted") + .withArgs(signers[2].address, nonce1, smallDeposit); + + totalDeposit = totalDeposit.add(smallDeposit) + memeSummon = await memeBase.memeSummons(nonce1); + expect(memeSummon.nativeTokenContributed).to.equal(ethers.BigNumber.from(smallDeposit).mul(3)); + accountActivity = await memeBase.mapAccountActivities(signers[2].address); + expect(accountActivity).to.equal(1); + + await expect( + memeBase.unleashThisMeme(nonce1) + ).to.be.revertedWith("Cannot unleash yet"); + + // nothing should be scheduled for ascendance yet + let scheduledForAscendance = await memeBase.scheduledForAscendance(); + expect(scheduledForAscendance).to.equal(0); + + // Increase time to for 24 hours+ + await helpers.time.increase(oneDay + 10); + + // Update oracle price + await buyBackBurner.updateOraclePrice(); + + // native token balance should be equal to contributions + let balanceNow = ethers.BigNumber.from(smallDeposit).mul(3); + baseBalance = await ethers.provider.getBalance(memeBase.address); + expect(baseBalance).to.equal(balanceNow); + + // Unleash the meme token - positive and negative cases + await expect( + memeBase.unleashThisMeme(nonce2) + ).to.be.revertedWith("Meme not yet summoned"); + await expect( + memeBase.unleashThisMeme(nonce1, { gasLimit }) + ).to.emit(memeBase, "Unleashed") + // .withArgs(deployer.address, null, null, null, 0) + .and.to.emit(memeBase, "Collected"); + // .withArgs(deployer.address, null, null); + await expect( + memeBase.unleashThisMeme(nonce1) + ).to.be.revertedWith("Meme already unleashed"); + + accountActivity = await memeBase.mapAccountActivities(deployer.address); + expect(accountActivity).to.equal(2); + + // Get first token address + const memeToken = await memeBase.memeTokens(0); + console.log("First new meme token contract:", memeToken); + + // Try to collect fees right away when the TWAP data is still unavailable + await expect( + memeBase.collectFees([memeToken]) + ).to.be.revertedWith("OLD"); + + memeSummon = await memeBase.memeSummons(nonce1); + expect(memeSummon.nativeTokenContributed).to.equal(ethers.BigNumber.from(smallDeposit).mul(3)); + + // Schedule for ascendance (~90% of it went to LP) + scheduledForAscendance = await memeBase.scheduledForAscendance(); + expect(scheduledForAscendance).to.gte(ethers.BigNumber.from(smallDeposit).mul(3).div(10)); + + // Wrapped mative token balance (~90% of it went to LP) + baseBalance = await weth.balanceOf(memeBase.address); + expect(baseBalance).to.gte(scheduledForAscendance); + + // Pure native token balance (everything should have been wrapped by now) + baseBalance = await ethers.provider.getBalance(memeBase.address); + expect(baseBalance).to.equal(0); + + // Increase time to for 24 hours+ + await expect( + memeBase.purgeThisMeme(memeToken) + ).to.be.revertedWith("Purge only allowed from 24 hours after unleash"); + await helpers.time.increase(oneDay + 10); + + // Purge remaining allocation - positive and negative case + await memeBase.purgeThisMeme(memeToken); + + let memeInstance = await ethers.getContractAt("Meme", memeToken); + // Meme balance now must be zero + baseBalance = await memeInstance.balanceOf(memeBase.address); + expect(baseBalance).to.equal(0); + + // Test failing schedule for ascendance + await expect( + memeBase.scheduleForAscendance() + ).to.be.revertedWith("Not enough to cover launch campaign") + + //// Second test unleashing of a meme + + // Summon a new meme token + await memeBase.summonThisMeme(name, symbol, totalSupply, {value: defaultDeposit}); + + // Heart a new token by other accounts + await memeBase.connect(signers[1]).heartThisMeme(nonce2, {value: defaultDeposit}); + await memeBase.connect(signers[2]).heartThisMeme(nonce2, {value: defaultDeposit}); + + // Update total deposit + totalDeposit = totalDeposit.add(defaultDeposit.mul(3)); + + // Increase time to for 24 hours+ + await helpers.time.increase(oneDay + 10); + + // Unleash the meme token + await expect( + memeBase.unleashThisMeme(nonce2, { gasLimit }) + ).to.emit(memeBase, "Unleashed") + .and.to.emit(memeBase, "Collected"); + + // Get meme token two + const memeTokenTwo = await memeBase.memeTokens(1); + console.log("Second new meme contract:", memeTokenTwo); + + const LIQUIDITY_AGNT = await memeBase.LIQUIDITY_AGNT(); + scheduledForAscendance = await memeBase.scheduledForAscendance(); + const scheduledPart1 = (smallDeposit.mul(3)).div(10); + const scheduledPart2 = (defaultDeposit.mul(3)).div(10); + let expectedScheduledForAscendance = scheduledPart1.add(scheduledPart2); + // due to rounding will have higher amount than expected + expect(scheduledForAscendance).to.gte(expectedScheduledForAscendance); + + // Deployer has already collected + await expect( + memeBase.collectThisMeme(memeTokenTwo) + ).to.be.revertedWith("No token allocation"); + + // Collect by the first signer + await memeBase.connect(signers[1]).collectThisMeme(memeTokenTwo); + + // Wait for 24 more hours + await helpers.time.increase(oneDay + 10); + + // Second signer cannot collect + await expect( + memeBase.connect(signers[2]).collectThisMeme(memeTokenTwo) + ).to.be.revertedWith("Collect only allowed until 24 hours after unleash"); + + // Purge remaining allocation + await memeBase.purgeThisMeme(memeTokenTwo); + + // Try to purge again + await expect( + memeBase.purgeThisMeme(memeTokenTwo) + ).to.be.revertedWith("Has been purged or nothing to purge"); + + // Wait for 10 more seconds + await helpers.time.increase(10); + + // Collect fees + scheduledForAscendance = await memeBase.scheduledForAscendance(); + // Try to collect fees when there were no swaps + await expect( + memeBase.collectFees([memeToken, memeTokenTwo]) + ).to.be.revertedWith("Zero fees available"); + + let newScheduledForAscendance = await memeBase.scheduledForAscendance(); + // since no fees to collect, expect identical + expect(newScheduledForAscendance).to.equal(scheduledForAscendance); + + // Send to buyBackBurner + await expect( + memeBase.scheduleForAscendance({ gasLimit }) + ).to.emit(memeBase, "Unleashed") + .and.to.emit(memeBase, "OLASJourneyToAscendance"); + + // Try to send to buyBackBurner again + await expect( + memeBase.scheduleForAscendance() + ).to.be.revertedWith("Nothing to send"); + + // Get campaign token + const campaignToken = await memeBase.memeTokens(2); + console.log("Campaign token contract:", campaignToken); + scheduledForAscendance = await memeBase.scheduledForAscendance(); + expect(scheduledForAscendance).to.equal(0); + + // Check the contract balances - must be no native and wrapped token left after all the unleashes + baseBalance = await ethers.provider.getBalance(memeBase.address); + expect(baseBalance).to.equal(0); + + // Check the wrapped native token contract balance + baseBalance = await weth.balanceOf(memeBase.address); + expect(baseBalance).to.equal(0); + + // Check the number of meme tokens + const numTokens = await memeBase.numTokens(); + expect(numTokens).to.equal(3); + + // Swap tokens + const factoryABI = fs.readFileSync("abis/uniswap/factory.json", "utf8"); + const factory = new ethers.Contract(parsedData.factoryAddress, factoryABI, ethers.provider); + const quoterABI = fs.readFileSync("abis/uniswap/quoter.json", "utf8"); + const quoter = new ethers.Contract(parsedData.quoterAddress, quoterABI, ethers.provider); + const routerABI = fs.readFileSync("abis/uniswap/swaprouter.json", "utf8"); + const router = new ethers.Contract(parsedData.routerV3Address, routerABI, ethers.provider); + const poolAddress = await factory.getPool(weth.address, memeToken, fee); + const poolABI = fs.readFileSync("abis/uniswap/pool.json", "utf8"); + const pool = new ethers.Contract(poolAddress, poolABI, ethers.provider); + + //let slot0 = await pool.slot0(); + //console.log("0. slot0:", slot0); + //let observations0 = await pool.observations(0); + //console.log("0. observations0:", observations0); + + const memeTokenInstance = await ethers.getContractAt("Meme", memeToken); + const memeBalance = await memeTokenInstance.balanceOf(deployer.address); + const amount = memeBalance.div(3); + // Approve tokens + await memeTokenInstance.approve(parsedData.routerV3Address, amount); + + const quote = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + 60 * 10), + amountIn: amount, + sqrtPriceLimitX96: 0, + }; + + // Get amount out + let quotedAmountOut = await quoter.callStatic.quoteExactInputSingle(quote); + // Amount our must be bigger + expect(quotedAmountOut.amountOut).to.gt(0); + + let params = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + oneDay), + amountIn: amount, + amountOutMinimum: quotedAmountOut.amountOut, + sqrtPriceLimitX96: 0, + }; + + // Swap tokens + await router.connect(deployer).exactInputSingle(params); + + //slot0 = await pool.slot0(); + //console.log("1. slot0:", slot0); + //observations0 = await pool.observations(0); + //console.log("1. observations0:", observations0); + + // Wait for 1800 seconds to have enough time for the oldest observation + await helpers.time.increase(1800); + + // Collect fees for the first time + await memeBase.collectFees([memeToken]); + + // Approve tokens + await memeTokenInstance.approve(parsedData.routerV3Address, amount); + // Get amount out for another swap + quotedAmountOut = await quoter.callStatic.quoteExactInputSingle(quote); + // Amount our must be bigger + expect(quotedAmountOut.amountOut).to.gt(0); + + params = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + oneDay), + amountIn: amount, + amountOutMinimum: quotedAmountOut.amountOut, + sqrtPriceLimitX96: 0, + }; + + // Perform another swap + await router.connect(deployer).exactInputSingle(params); + + //slot0 = await pool.slot0(); + //console.log("2. slot0:", slot0); + //observations0 = await pool.observations(0); + //console.log("2. observations0:", observations0); + + // Wait for 100 seconds + await helpers.time.increase(100); + + // Approve tokens + await memeTokenInstance.approve(parsedData.routerV3Address, amount); + // Get amount out for another swap + quotedAmountOut = await quoter.callStatic.quoteExactInputSingle(quote); + // Amount our must be bigger + expect(quotedAmountOut.amountOut).to.gt(0); + + params = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + oneDay), + amountIn: amount, + amountOutMinimum: quotedAmountOut.amountOut, + sqrtPriceLimitX96: 0, + }; + + // Perform another swap + await router.connect(deployer).exactInputSingle(params); + + //slot0 = await pool.slot0(); + //console.log("3. slot0:", slot0); + //observations0 = await pool.observations(0); + //console.log("3. observations0:", observations0); + + // Wait for 100 seconds + await helpers.time.increase(100); + + // Try to collect fees - but not enough time passed after huge swaps + // NOTE: In order for revert to work correctly one needs to remove gasLimit, as it's conflicting with the estimation + await expect( + memeBase.collectFees([memeToken]) + ).to.be.revertedWith("Price deviation too high"); + + // Wait for 1200 seconds - not more than 1800 seconds, because after 1800 of inactivity the price is considered correct + await helpers.time.increase(1200); + + // Collect fees + await expect( + memeBase.collectFees([memeToken], { gasLimit }) + ).to.emit(memeBase, "FeesCollected"); + + // Try to collect fees again + await expect( + memeBase.collectFees([memeToken]) + ).to.be.revertedWith("Zero fees available"); + + // Update oracle price + await buyBackBurner.updateOraclePrice(); + + // Try to swap native token for OLAS right away + // NOTE: Comment this out when testing on Tenderly fork as it correctly moves the time along with blocks + await expect( + buyBackBurner.buyBack(ethers.utils.parseEther("5")) + ).to.be.revertedWith("Before swap slippage limit is breached"); + + // Wait for 10 seconds more in order not to engage with oracle in the same timestamp + await helpers.time.increase(10); + + // Try to do a very big swap that completely unbalances the pool + await expect( + buyBackBurner.buyBack(0) + ).to.be.revertedWith("BAL#304"); + + // Fail to do swaps breaching the after-swap limit + await expect( + buyBackBurner.buyBack(ethers.utils.parseEther("10")) + ).to.be.revertedWith("After swap slippage limit is breached"); + + // Swap native token for OLAS + await buyBackBurner.buyBack(ethers.utils.parseEther("5")); +}; + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/test/MemeCelo.js b/test/MemeCelo.js index 2998a37..9dbf9a3 100644 --- a/test/MemeCelo.js +++ b/test/MemeCelo.js @@ -20,39 +20,44 @@ const main = async () => { const payload = "0x"; const oneDay = 86400; const twoDays = 2 * oneDay; + const nonce = 1; signers = await ethers.getSigners(); deployer = signers[0]; - const Meme = await ethers.getContractFactory("Meme"); - const meme = await Meme.deploy(name, symbol, 18, totalSupply); - await meme.deployed(); + // UniswapPriceOracle + const UniswapPriceOracle = await ethers.getContractFactory("UniswapPriceOracle"); + const uniswapPriceOracle = await UniswapPriceOracle.deploy(parsedData.celoAddress, parsedData.maxOracleSlippage, + parsedData.pairAddress); + await uniswapPriceOracle.deployed(); - const celo = await ethers.getContractAt("Meme", parsedData.celoAddress); + // BuyBackBurnerUniswap implementation and proxy + const BuyBackBurnerUniswap = await ethers.getContractFactory("BuyBackBurnerUniswap"); + const buyBackBurnerImplementation = await BuyBackBurnerUniswap.deploy(); + await buyBackBurnerImplementation.deployed(); + + // Initialize buyBackBurner + const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "uint256"], + [[parsedData.olasAddress, parsedData.celoAddress, uniswapPriceOracle.address, + parsedData.routerV2Address], parsedData.maxBuyBackSlippage]); + const proxyData = buyBackBurnerImplementation.interface.encodeFunctionData("initialize", [proxyPayload]); + const BuyBackBurnerProxy = await ethers.getContractFactory("BuyBackBurnerProxy"); + const buyBackBurnerProxy = await BuyBackBurnerProxy.deploy(buyBackBurnerImplementation.address, proxyData); + await buyBackBurnerProxy.deployed(); + + const buyBackBurner = await ethers.getContractAt("BuyBackBurnerUniswap", buyBackBurnerProxy.address); const MemeCelo = await ethers.getContractFactory("MemeCelo"); - const memeCelo = await MemeCelo.deploy(parsedData.olasAddress, parsedData.cusdAddress, parsedData.routerAddress, - parsedData.factoryAddress, parsedData.minNativeTokenValue, parsedData.celoAddress, - parsedData.l2TokenBridgeAddress, parsedData.oracleAddress); + const memeCelo = await MemeCelo.deploy(parsedData.olasAddress, parsedData.celoAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue); await memeCelo.deployed(); // Summon a new meme token await memeCelo.summonThisMeme(name, symbol, totalSupply, {value: defaultDeposit}); - const memeToken = await memeCelo.memeTokens(0); - console.log("New meme contract:", memeToken); // Heart a new token by other accounts - await memeCelo.connect(signers[1]).heartThisMeme(memeToken, {value: defaultDeposit}); - await memeCelo.connect(signers[2]).heartThisMeme(memeToken, {value: defaultDeposit}); - - // Increase time to for 24 hours+ - await helpers.time.increase(oneDay + 100); - - // Unleash the meme token - await memeCelo.unleashThisMeme(memeToken, 0); - - // Collect by the first signer - await memeCelo.collectThisMeme(memeToken); + await memeCelo.connect(signers[1]).heartThisMeme(nonce, {value: defaultDeposit}); + await memeCelo.connect(signers[2]).heartThisMeme(nonce, {value: defaultDeposit}); }; main() diff --git a/test/MemeEthereum.js b/test/MemeEthereum.js new file mode 100644 index 0000000..4635c07 --- /dev/null +++ b/test/MemeEthereum.js @@ -0,0 +1,465 @@ +/*global describe, context, beforeEach, it*/ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const helpers = require("@nomicfoundation/hardhat-network-helpers"); + +// This works on a fork only! +const main = async () => { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + const parsedData = JSON.parse(dataFromJSON); + + const badName = ""; + const badSymbol = ""; + const name = "Meme"; + const symbol = "MM"; + const totalSupply = "1" + "0".repeat(24); + const smallDeposit = ethers.utils.parseEther("1"); + const defaultDeposit = ethers.utils.parseEther("1500"); + const defaultHash = "0x" + "5".repeat(64); + const payload = "0x"; + const oneDay = 86400; + const twoDays = 2 * oneDay; + const gasLimit = 10000000; + const fee = 10000; + const nonce0 = 1; + const nonce1 = 2; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + console.log("deployer address:", deployer.address); + console.log("Balance of deployer:", await ethers.provider.getBalance(deployer.address)); + console.log("signers[1] address:", signers[1].address); + console.log("Balance of signer 1:", await ethers.provider.getBalance(signers[1].address)); + console.log("signers[2] address:", signers[2].address); + console.log("Balance of signer 2", await ethers.provider.getBalance(signers[2].address)); + + // UniswapPriceOracle + const UniswapPriceOracle = await ethers.getContractFactory("UniswapPriceOracle"); + const uniswapPriceOracle = await UniswapPriceOracle.deploy(parsedData.wethAddress, parsedData.maxOracleSlippage, + parsedData.pairAddress); + await uniswapPriceOracle.deployed(); + + // BuyBackBurnerUniswap implementation and proxy + const BuyBackBurnerUniswap = await ethers.getContractFactory("BuyBackBurnerUniswap"); + const buyBackBurnerImplementation = await BuyBackBurnerUniswap.deploy(); + await buyBackBurnerImplementation.deployed(); + + // Initialize buyBackBurner + const proxyPayload = ethers.utils.defaultAbiCoder.encode(["address[]", "uint256"], + [[parsedData.olasAddress, parsedData.wethAddress, uniswapPriceOracle.address, + parsedData.routerV2Address], parsedData.maxBuyBackSlippage]); + const proxyData = buyBackBurnerImplementation.interface.encodeFunctionData("initialize", [proxyPayload]); + const BuyBackBurnerProxy = await ethers.getContractFactory("BuyBackBurnerProxy"); + const buyBackBurnerProxy = await BuyBackBurnerProxy.deploy(buyBackBurnerImplementation.address, proxyData); + await buyBackBurnerProxy.deployed(); + + const buyBackBurner = await ethers.getContractAt("BuyBackBurnerUniswap", buyBackBurnerProxy.address); + + const MemeEthereum = await ethers.getContractFactory("MemeEthereum"); + const memeEthereum = await MemeEthereum.deploy(parsedData.olasAddress, parsedData.wethAddress, + parsedData.uniV3positionManagerAddress, buyBackBurner.address, parsedData.minNativeTokenValue); + await memeEthereum.deployed(); + + const wethABI = fs.readFileSync("abis/uniswap/weth.json", "utf8"); + const weth = new ethers.Contract(parsedData.wethAddress, wethABI, ethers.provider); + + let ethBalance = await weth.balanceOf(memeEthereum.address); + expect(ethBalance).to.equal(0); + + // Summon a new meme token - negative cases + const minNativeTokenValue = await memeEthereum.minNativeTokenValue(); + const MIN_TOTAL_SUPPLY = await memeEthereum.MIN_TOTAL_SUPPLY(); + const uint128MaxPlusOne = BigInt(2) ** BigInt(128); + await expect( + memeEthereum.summonThisMeme(badName, badSymbol, totalSupply, {value: minNativeTokenValue}) + ).to.be.revertedWith("Name and symbol must not be empty"); + await expect( + memeEthereum.summonThisMeme(name, badSymbol, totalSupply, {value: minNativeTokenValue}) + ).to.be.revertedWith("Name and symbol must not be empty"); + await expect( + memeEthereum.summonThisMeme(name, symbol, totalSupply, {value: minNativeTokenValue.sub(1)}) + ).to.be.revertedWith("Minimum native token value is required to summon"); + await expect( + memeEthereum.summonThisMeme(name, symbol, MIN_TOTAL_SUPPLY.sub(1), {value: minNativeTokenValue}) + ).to.be.revertedWith("Minimum total supply is not met"); + await expect( + memeEthereum.summonThisMeme(name, symbol, uint128MaxPlusOne, {value: minNativeTokenValue}) + ).to.be.revertedWith("Maximum total supply overflow"); + + // Summon a new meme token - positive cases + await expect( + memeEthereum.summonThisMeme(name, symbol, totalSupply, {value: smallDeposit}) + ).to.emit(memeEthereum, "Summoned") + .withArgs(deployer.address, nonce0, smallDeposit) + .and.to.emit(memeEthereum, "Hearted") + .withArgs(deployer.address, nonce0, smallDeposit); + + let totalDeposit = smallDeposit; + let memeSummon = await memeEthereum.memeSummons(nonce0); + expect(memeSummon.name).to.equal(name); + expect(memeSummon.symbol).to.equal(symbol); + expect(memeSummon.totalSupply).to.equal(totalSupply); + expect(memeSummon.nativeTokenContributed).to.equal(smallDeposit); + const memeHearterValue = await memeEthereum.memeHearters(nonce0, deployer.address); + expect(memeHearterValue).to.equal(smallDeposit); + let accountActivity = await memeEthereum.mapAccountActivities(deployer.address); + expect(accountActivity).to.equal(1); + + // Heart a new token by other accounts - negative case + await expect( + memeEthereum.connect(signers[1]).heartThisMeme(nonce0, {value: 0}) + ).to.be.revertedWith("Native token amount must be greater than zero"); + await expect( + memeEthereum.connect(signers[1]).heartThisMeme(nonce1, {value: smallDeposit}) + ).to.be.revertedWith("Meme not yet summoned"); + // Check that launch campaign meme cannot be collected + await expect( + memeEthereum.connect(signers[1]).collectThisMeme("0xFD49CbaE7bD16743bF9Fbb97bdFB30158e0b857e") + ).to.be.revertedWith("Meme not unleashed"); + // // Check that launch campaign meme cannot be purged + await expect( + memeEthereum.connect(signers[1]).purgeThisMeme("0xFD49CbaE7bD16743bF9Fbb97bdFB30158e0b857e") + ).to.be.revertedWith("Meme not unleashed"); + + // Heart a new token by other accounts - positive cases + await expect( + memeEthereum.connect(signers[1]).heartThisMeme(nonce0, {value: smallDeposit}) + ).to.emit(memeEthereum, "Hearted") + .withArgs(signers[1].address, nonce0, smallDeposit); + + totalDeposit = totalDeposit.add(smallDeposit) + memeSummon = await memeEthereum.memeSummons(nonce0); + expect(memeSummon.nativeTokenContributed).to.equal(ethers.BigNumber.from(smallDeposit).mul(2)); + accountActivity = await memeEthereum.mapAccountActivities(signers[1].address); + expect(accountActivity).to.equal(1); + await expect( + memeEthereum.connect(signers[2]).heartThisMeme(nonce0, {value: smallDeposit}) + ).to.emit(memeEthereum, "Hearted") + .withArgs(signers[2].address, nonce0, smallDeposit); + + totalDeposit = totalDeposit.add(smallDeposit) + memeSummon = await memeEthereum.memeSummons(nonce0); + expect(memeSummon.nativeTokenContributed).to.equal(ethers.BigNumber.from(smallDeposit).mul(3)); + accountActivity = await memeEthereum.mapAccountActivities(signers[2].address); + expect(accountActivity).to.equal(1); + + await expect( + memeEthereum.unleashThisMeme(nonce0) + ).to.be.revertedWith("Cannot unleash yet"); + + // nothing should be scheduled for ascendance yet + let scheduledForAscendance = await memeEthereum.scheduledForAscendance(); + expect(scheduledForAscendance).to.equal(0); + + // Increase time to for 24 hours+ + await helpers.time.increase(oneDay + 10); + + // native token balance should be equal to contributions + let balanceNow = ethers.BigNumber.from(smallDeposit).mul(3); + ethBalance = await ethers.provider.getBalance(memeEthereum.address); + expect(ethBalance).to.equal(balanceNow); + + // Unleash the meme token - positive and negative cases + await expect( + memeEthereum.unleashThisMeme(nonce1) + ).to.be.revertedWith("Meme not yet summoned"); + await expect( + memeEthereum.unleashThisMeme(nonce0, { gasLimit }) + ).to.emit(memeEthereum, "Unleashed") + // .withArgs(deployer.address, null, null, null, 0) + .and.to.emit(memeEthereum, "Collected"); + // .withArgs(deployer.address, null, null); + await expect( + memeEthereum.unleashThisMeme(nonce0) + ).to.be.revertedWith("Meme already unleashed"); + + accountActivity = await memeEthereum.mapAccountActivities(deployer.address); + expect(accountActivity).to.equal(2); + + // Get first token address + const memeToken = await memeEthereum.memeTokens(0); + console.log("First new meme token contract:", memeToken); + + // Try to collect fees right away when the TWAP data is still unavailable + await expect( + memeEthereum.collectFees([memeToken]) + ).to.be.revertedWith("OLD"); + + memeSummon = await memeEthereum.memeSummons(nonce0); + expect(memeSummon.nativeTokenContributed).to.equal(ethers.BigNumber.from(smallDeposit).mul(3)); + + // Schedule for ascendance (~90% of it went to LP) + scheduledForAscendance = await memeEthereum.scheduledForAscendance(); + expect(scheduledForAscendance).to.gte(ethers.BigNumber.from(smallDeposit).mul(3).div(10)); + + // Wrapped mative token balance (~90% of it went to LP) + ethBalance = await weth.balanceOf(memeEthereum.address); + expect(ethBalance).to.gte(scheduledForAscendance); + + // Pure native token balance (everything should have been wrapped by now) + ethBalance = await ethers.provider.getBalance(memeEthereum.address); + expect(ethBalance).to.equal(0); + + // Increase time to for 24 hours+ + await expect( + memeEthereum.purgeThisMeme(memeToken) + ).to.be.revertedWith("Purge only allowed from 24 hours after unleash"); + await helpers.time.increase(oneDay + 10); + + // Purge remaining allocation - positive and negative case + await memeEthereum.purgeThisMeme(memeToken); + + let memeInstance = await ethers.getContractAt("Meme", memeToken); + // Meme balance now must be zero + ethBalance = await memeInstance.balanceOf(memeEthereum.address); + expect(ethBalance).to.equal(0); + + //// Second test unleashing of a meme + + // Summon a new meme token + await memeEthereum.summonThisMeme(name, symbol, totalSupply, {value: defaultDeposit}); + + // Heart a new token by other accounts + await memeEthereum.connect(signers[1]).heartThisMeme(nonce1, {value: defaultDeposit}); + await memeEthereum.connect(signers[2]).heartThisMeme(nonce1, {value: defaultDeposit}); + + // Update total deposit + totalDeposit = totalDeposit.add(defaultDeposit.mul(3)); + + // Increase time to for 24 hours+ + await helpers.time.increase(oneDay + 10); + + // Unleash the meme token + await expect( + memeEthereum.unleashThisMeme(nonce1, { gasLimit }) + ).to.emit(memeEthereum, "Unleashed") + .and.to.emit(memeEthereum, "Collected"); + + // Get campaign token + const memeTokenTwo = await memeEthereum.memeTokens(1); + console.log("Second new meme contract:", memeTokenTwo); + + // Deployer has already collected + await expect( + memeEthereum.collectThisMeme(memeTokenTwo) + ).to.be.revertedWith("No token allocation"); + + // Collect by the first signer + await memeEthereum.connect(signers[1]).collectThisMeme(memeTokenTwo); + + // Wait for 24 more hours + await helpers.time.increase(oneDay + 10); + + // Second signer cannot collect + await expect( + memeEthereum.connect(signers[2]).collectThisMeme(memeTokenTwo) + ).to.be.revertedWith("Collect only allowed until 24 hours after unleash"); + + // Purge remaining allocation + await memeEthereum.purgeThisMeme(memeTokenTwo); + + // Try to purge again + await expect( + memeEthereum.purgeThisMeme(memeTokenTwo) + ).to.be.revertedWith("Has been purged or nothing to purge"); + + // Wait for 10 more seconds + await helpers.time.increase(10); + + // Collect fees + scheduledForAscendance = await memeEthereum.scheduledForAscendance(); + // Try to collect fees when there were no swaps + await expect( + memeEthereum.collectFees([memeToken, memeTokenTwo]) + ).to.be.revertedWith("Zero fees available"); + + let newScheduledForAscendance = await memeEthereum.scheduledForAscendance(); + // since no fees to collect, expect identical + expect(newScheduledForAscendance).to.equal(scheduledForAscendance); + + // Send to buyBackBurner + await expect( + memeEthereum.scheduleForAscendance() + ).to.emit(memeEthereum, "OLASJourneyToAscendance"); + + // Try to send to buyBackBurner again + await expect( + memeEthereum.scheduleForAscendance() + ).to.be.revertedWith("Nothing to send"); + + scheduledForAscendance = await memeEthereum.scheduledForAscendance(); + expect(scheduledForAscendance).to.equal(0); + + // Check the contract balances - must be no native and wrapped token left after all the unleashes + ethBalance = await ethers.provider.getBalance(memeEthereum.address); + expect(ethBalance).to.equal(0); + + // Check the wrapped native token contract balance + ethBalance = await weth.balanceOf(memeEthereum.address); + expect(ethBalance).to.equal(0); + + // Check the number of meme tokens + const numTokens = await memeEthereum.numTokens(); + expect(numTokens).to.equal(2); + + // Swap tokens + const factoryABI = fs.readFileSync("abis/uniswap/factory.json", "utf8"); + const factory = new ethers.Contract(parsedData.factoryAddress, factoryABI, ethers.provider); + const quoterABI = fs.readFileSync("abis/uniswap/quoter.json", "utf8"); + const quoter = new ethers.Contract(parsedData.quoterAddress, quoterABI, ethers.provider); + const routerABI = fs.readFileSync("abis/uniswap/swaprouter.json", "utf8"); + const router = new ethers.Contract(parsedData.routerV3Address, routerABI, ethers.provider); + const poolAddress = await factory.getPool(weth.address, memeToken, fee); + const poolABI = fs.readFileSync("abis/uniswap/pool.json", "utf8"); + const pool = new ethers.Contract(poolAddress, poolABI, ethers.provider); + + //let slot0 = await pool.slot0(); + //console.log("0. slot0:", slot0); + //let observations0 = await pool.observations(0); + //console.log("0. observations0:", observations0); + + const memeTokenInstance = await ethers.getContractAt("Meme", memeToken); + const memeBalance = await memeTokenInstance.balanceOf(deployer.address); + const amount = memeBalance.div(3); + // Approve tokens + await memeTokenInstance.approve(parsedData.routerV3Address, amount); + + const quote = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + 60 * 10), + amountIn: amount, + sqrtPriceLimitX96: 0, + }; + + // Get amount out + let quotedAmountOut = await quoter.callStatic.quoteExactInputSingle(quote); + // Amount our must be bigger + expect(quotedAmountOut.amountOut).to.gt(0); + + let params = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + oneDay), + amountIn: amount, + amountOutMinimum: quotedAmountOut.amountOut, + sqrtPriceLimitX96: 0, + }; + + // Swap tokens + await router.connect(deployer).exactInputSingle(params); + + //slot0 = await pool.slot0(); + //console.log("1. slot0:", slot0); + //observations0 = await pool.observations(0); + //console.log("1. observations0:", observations0); + + // Wait for 1800 seconds to have enough time for the oldest observation + await helpers.time.increase(1800); + + // Collect fees for the first time + await memeEthereum.collectFees([memeToken], { gasLimit }); + + // Approve tokens + await memeTokenInstance.approve(parsedData.routerV3Address, amount); + // Get amount out for another swap + quotedAmountOut = await quoter.callStatic.quoteExactInputSingle(quote); + // Amount our must be bigger + expect(quotedAmountOut.amountOut).to.gt(0); + + params = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + oneDay), + amountIn: amount, + amountOutMinimum: quotedAmountOut.amountOut, + sqrtPriceLimitX96: 0, + }; + + // Perform another swap + await router.connect(deployer).exactInputSingle(params); + + //slot0 = await pool.slot0(); + //console.log("2. slot0:", slot0); + //observations0 = await pool.observations(0); + //console.log("2. observations0:", observations0); + + // Wait for 100 seconds + await helpers.time.increase(100); + + // Approve tokens + await memeTokenInstance.approve(parsedData.routerV3Address, amount); + // Get amount out for another swap + quotedAmountOut = await quoter.callStatic.quoteExactInputSingle(quote); + // Amount our must be bigger + expect(quotedAmountOut.amountOut).to.gt(0); + + params = { + tokenIn: memeTokenInstance.address, + tokenOut: weth.address, + fee, + recipient: deployer.address, + deadline: Math.floor(new Date().getTime() / 1000 + oneDay), + amountIn: amount, + amountOutMinimum: quotedAmountOut.amountOut, + sqrtPriceLimitX96: 0, + }; + + // Perform another swap + await router.connect(deployer).exactInputSingle(params); + + //slot0 = await pool.slot0(); + //console.log("3. slot0:", slot0); + //observations0 = await pool.observations(0); + //console.log("3. observations0:", observations0); + + // Wait for 100 seconds + await helpers.time.increase(100); + + // Try to collect fees - but not enough time passed after huge swaps + // NOTE: In order for revert to work correctly one needs to remove gasLimit, as it's conflicting with the estimation + await expect( + memeEthereum.collectFees([memeToken]) + ).to.be.revertedWith("Price deviation too high"); + + // Wait for 1200 seconds - not more than 1800 seconds, because after 1800 of inactivity the price is considered correct + await helpers.time.increase(1200); + + // Collect fees + await expect( + memeEthereum.collectFees([memeToken], { gasLimit }) + ).to.emit(memeEthereum, "FeesCollected"); + + // Try to collect fees again + await expect( + memeEthereum.collectFees([memeToken]) + ).to.be.revertedWith("Zero fees available"); + + // Wait for 10 seconds more in order not to engage with oracle in the same timestamp + await helpers.time.increase(10); + + // Try to do a very big swap that completely unbalances the pool + await expect( + buyBackBurner.buyBack(0) + ).to.be.revertedWith("After swap slippage limit is breached"); + + // After swap slippage limit is not going to be fully simulated as swaps on Uniswap V2 provide TWAP updates + // Swap native token for OLAS + await buyBackBurner.buyBack(ethers.utils.parseEther("5")); +}; + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/yarn.lock b/yarn.lock index c3d2eec..68259e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,9 +12,9 @@ ethers "^5.5.4" "@babel/code-frame@^7.0.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.0.tgz#9374b5cd068d128dac0b94ff482594273b1c2815" - integrity sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g== + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: "@babel/helper-validator-identifier" "^7.25.9" js-tokens "^4.0.0" @@ -38,9 +38,9 @@ eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.6.1": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.0.tgz#1b8e62d1244557927b9a7fc7a96e5bbd62e1870e" - integrity sha512-gh7PdNombP8ftL8TinYC8Xd7WEypB8EKV4PI2h0eMzndKjPCXuo2zUiZtD2Hu+MSPt02Ty2MdS788ADl9ai1rA== + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -76,7 +76,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -301,7 +301,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -442,12 +442,12 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@ledgerhq/cryptoassets-evm-signatures@^13.5.1": - version "13.5.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets-evm-signatures/-/cryptoassets-evm-signatures-13.5.1.tgz#a63938961aed8987f226d8d46b7456e6de625899" - integrity sha512-ktyMb4nx6WGzHZPezfiITwZ5NJDa4twRoeGY81Xb/8JQqOtJprfpL89niJZk1teUT5rcwehGRoJJBl4B94Ea8Q== +"@ledgerhq/cryptoassets-evm-signatures@^13.5.2": + version "13.5.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets-evm-signatures/-/cryptoassets-evm-signatures-13.5.2.tgz#1c31cb1d0b5f95e0c7a7d47af0b8f78bb9efbc7f" + integrity sha512-OjjzuiMMEIYEbXeueJB6mXwlvYhru28b43buAVOeggZ2XmdlT0kBvt7Cjn4bDPqff/glWR7vQdytIr7b77m2EQ== dependencies: - "@ledgerhq/live-env" "^2.4.0" + "@ledgerhq/live-env" "^2.4.1" axios "1.7.7" "@ledgerhq/devices@^8.4.4": @@ -460,14 +460,14 @@ rxjs "^7.8.1" semver "^7.3.5" -"@ledgerhq/domain-service@^1.2.10": - version "1.2.10" - resolved "https://registry.yarnpkg.com/@ledgerhq/domain-service/-/domain-service-1.2.10.tgz#96f07fb056a5c62a5895b6183a605f86b1587aa7" - integrity sha512-2VFcikYqzWGq6TJyJocC0UqwReD3qLx4ttk/LOr0z+eM1qHS9v32tGEkEzCNycV7wRs39fUi3xRrhs8RT780GA== +"@ledgerhq/domain-service@^1.2.13": + version "1.2.13" + resolved "https://registry.yarnpkg.com/@ledgerhq/domain-service/-/domain-service-1.2.13.tgz#35429a928583e34630756eb9eb9b3eef6126159b" + integrity sha512-OOfmvfneTOmpFVe4GKzRBzU1MmWITGnJ7EYwsO02as2Ra4m5GeR1cFX5Sm1a6emri+nvbCYkHUUTcbBawOUHFA== dependencies: "@ledgerhq/errors" "^6.19.1" "@ledgerhq/logs" "^6.12.0" - "@ledgerhq/types-live" "^6.52.4" + "@ledgerhq/types-live" "^6.54.0" axios "1.7.7" eip55 "^2.1.1" react "^18.2.0" @@ -478,32 +478,34 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.19.1.tgz#d9ac45ad4ff839e468b8f63766e665537aaede58" integrity sha512-75yK7Nnit/Gp7gdrJAz0ipp31CCgncRp+evWt6QawQEtQKYEDfGo10QywgrrBBixeRxwnMy1DP6g2oCWRf1bjw== -"@ledgerhq/evm-tools@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@ledgerhq/evm-tools/-/evm-tools-1.2.4.tgz#636d0c5b194727285645346845f36eb697e2aa1e" - integrity sha512-3panbP6OWBvU/K5nyYqMsjNiccEniHC8CcS/cpKY3n2I1wbH0gmJD1tw6+fo75kyrSAwaBEwwr5sZ1M0cU6fsA== +"@ledgerhq/evm-tools@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/evm-tools/-/evm-tools-1.3.0.tgz#1dcbe67abb28c2c5f6f04cfa5c38853427505a7e" + integrity sha512-NeMhQlcEJRkgM4Yaap+Xngm2wIib3wUoXJTvIbBt8L/yJu5A0fN8v84pprh50JC7e1X0sL4r8do8XqdxXb9Gpg== dependencies: - "@ledgerhq/cryptoassets-evm-signatures" "^13.5.1" - "@ledgerhq/live-env" "^2.4.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ledgerhq/cryptoassets-evm-signatures" "^13.5.2" + "@ledgerhq/live-env" "^2.4.1" axios "1.7.7" crypto-js "4.2.0" - ethers "5.7.2" "@ledgerhq/hw-app-eth@^6.24.0": - version "6.40.3" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-6.40.3.tgz#47afd839d3628848fbe851bac470640b7da2f52f" - integrity sha512-/hLv09xZmvqEEwZLiGoAdgdRsn1c+gsPte8BGgnKqjJC5GJYRtbBeRvGcxCvc+pmR+nRKg18BAw9FEhBIXQhiQ== - dependencies: - "@ethersproject/abi" "^5.5.0" - "@ethersproject/rlp" "^5.5.0" - "@ledgerhq/cryptoassets-evm-signatures" "^13.5.1" - "@ledgerhq/domain-service" "^1.2.10" + version "6.42.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-6.42.0.tgz#9812f4c602d707cc038ba9b8c8e278669062b00c" + integrity sha512-xOwo4H8f4En3vqca/fuxMbH2Q0GNdrYRvy/AV30V3HHbYD+WyFBZYz+iVvBbL2u6Sn9zQHeQC4je3psQ9BMvcQ== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ledgerhq/cryptoassets-evm-signatures" "^13.5.2" + "@ledgerhq/domain-service" "^1.2.13" "@ledgerhq/errors" "^6.19.1" - "@ledgerhq/evm-tools" "^1.2.4" + "@ledgerhq/evm-tools" "^1.3.0" "@ledgerhq/hw-transport" "^6.31.4" "@ledgerhq/hw-transport-mocker" "^6.29.4" "@ledgerhq/logs" "^6.12.0" - "@ledgerhq/types-live" "^6.52.4" + "@ledgerhq/types-live" "^6.54.0" axios "1.7.7" bignumber.js "^9.1.2" semver "^7.3.5" @@ -552,10 +554,10 @@ "@ledgerhq/logs" "^6.12.0" events "^3.3.0" -"@ledgerhq/live-env@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/live-env/-/live-env-2.4.0.tgz#0072a3adf22828e03e4ce34f34ac7f5549a3667d" - integrity sha512-hXkaGPdMZUHbbjfezMKfqUa8LA5gnXfYsnGdQcXorRhdRBqc7w5xtYSlc53Vos88mbDij7iL7NrhDXF//IFd5Q== +"@ledgerhq/live-env@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/live-env/-/live-env-2.4.1.tgz#37022d8eb20f08f1d98961f83d8f33084b537160" + integrity sha512-ZiVUfN1F5rnj6g3IUqOsHvitiKd7rtGy7FY7VBOXbG9qN7XLeLfmJhnzh/5yjX14dXhVOeAlPd1UzmmpxkRU6A== dependencies: rxjs "^7.8.1" utility-types "^3.10.0" @@ -565,10 +567,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== -"@ledgerhq/types-live@^6.52.4": - version "6.52.4" - resolved "https://registry.yarnpkg.com/@ledgerhq/types-live/-/types-live-6.52.4.tgz#6098c2204c9f0f818a1f9daf15df78a260acf21b" - integrity sha512-cKo+PcGeTxILPeCLdFAu5XiRCPZYDQ6Iz68Y7+fLq13VW8jblpWPHJQybQ2I2gJnzGQle6EPSckfH58qSg6AYA== +"@ledgerhq/types-live@^6.54.0": + version "6.54.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/types-live/-/types-live-6.54.0.tgz#4c69ba94676880d7447884001ec77e3f2a4d775c" + integrity sha512-8X/VqkxUShQTwmpHSH0JQwCG36FSXBuunzexZUPztt8ZJjh48h1E/Fz21gwub4i68rWZDPlL+f9FD72+v+5B3A== dependencies: bignumber.js "^9.1.2" rxjs "^7.8.1" @@ -602,9 +604,9 @@ integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== "@noble/hashes@^1.4.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" - integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== + version "1.6.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" @@ -632,53 +634,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz#6eaa64a6ea5201e4c92b121f2b7fd197b26e450a" - integrity sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ== - -"@nomicfoundation/edr-darwin-x64@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz#d15ca89e9deef7d0a710cf90e79f3cc270a5a999" - integrity sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg== - -"@nomicfoundation/edr-linux-arm64-gnu@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz#e73c41ca015dfddb5f4cb6cd3d9b2cbe5cc28989" - integrity sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA== - -"@nomicfoundation/edr-linux-arm64-musl@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz#90906f733e4ad26657baeb22d28855d934ab7541" - integrity sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q== - -"@nomicfoundation/edr-linux-x64-gnu@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz#11b8bd73df145a192e5a08199e5e81995fcde502" - integrity sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA== - -"@nomicfoundation/edr-linux-x64-musl@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz#a34b9a2c9e34853207824dc81622668a069ca642" - integrity sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw== - -"@nomicfoundation/edr-win32-x64-msvc@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz#ca035c6f66ae9f88fa3ef123a1f3a2099cce7a5a" - integrity sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw== - -"@nomicfoundation/edr@^0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.4.tgz#1cd336c46a60f5af774e6cf0f1943f49f63dded6" - integrity sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw== - dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.6.4" - "@nomicfoundation/edr-darwin-x64" "0.6.4" - "@nomicfoundation/edr-linux-arm64-gnu" "0.6.4" - "@nomicfoundation/edr-linux-arm64-musl" "0.6.4" - "@nomicfoundation/edr-linux-x64-gnu" "0.6.4" - "@nomicfoundation/edr-linux-x64-musl" "0.6.4" - "@nomicfoundation/edr-win32-x64-msvc" "0.6.4" +"@nomicfoundation/edr-darwin-arm64@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz#37a31565d7ef42bed9028ac44aed82144de30bd1" + integrity sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw== + +"@nomicfoundation/edr-darwin-x64@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz#3252f6e86397af460b7a480bfe1b889464d75b89" + integrity sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w== + +"@nomicfoundation/edr-linux-arm64-gnu@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz#e7dc2934920b6cfabeb5ee7a5e26c8fb0d4964ac" + integrity sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A== + +"@nomicfoundation/edr-linux-arm64-musl@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz#00459cd53e9fb7bd5b7e32128b508a6e89079d89" + integrity sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ== + +"@nomicfoundation/edr-linux-x64-gnu@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz#5c9e4e2655caba48e0196977cba395bbde6fe97d" + integrity sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg== + +"@nomicfoundation/edr-linux-x64-musl@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz#9c220751b66452dc43a365f380e1e236a0a8c5a9" + integrity sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A== + +"@nomicfoundation/edr-win32-x64-msvc@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz#90d3ac2a6a8a687522bda5ff2e92dd97e68126ea" + integrity sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A== + +"@nomicfoundation/edr@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.5.tgz#b3b1ebcdd0148cfe67cca128e7ebe8092e200359" + integrity sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.6.5" + "@nomicfoundation/edr-darwin-x64" "0.6.5" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.5" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.5" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.5" + "@nomicfoundation/edr-linux-x64-musl" "0.6.5" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.5" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -923,10 +925,10 @@ dependencies: antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" - integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== "@typechain/ethers-v5@^11.1.2": version "11.1.2" @@ -965,9 +967,11 @@ "@types/chai" "*" "@types/chai@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.0.tgz#7f981e71e69c9b2d422f58f78de1c59179782133" - integrity sha512-+DwhEHAaFPPdJ2ral3kNHFQXnTfscEEFsUxzD+d7nlcLrFK23JtNjH71RGasTcHb88b4vVi4mTyfpf8u2L8bdA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.1.tgz#2c3705555cf11f5f59c836a84c44afcfe4e5689d" + integrity sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA== + dependencies: + "@types/deep-eql" "*" "@types/concat-stream@^1.6.0": version "1.6.1" @@ -976,6 +980,11 @@ dependencies: "@types/node" "*" +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -1002,16 +1011,16 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/mocha@^10.0.3": - version "10.0.9" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.9.tgz#101e9da88d2c02e5ac8952982c23b224524d662a" - integrity sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q== + version "10.0.10" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== "@types/node@*": - version "22.8.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.8.1.tgz#b39d4b98165e2ae792ce213f610c7c6108ccfa16" - integrity sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg== + version "22.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== dependencies: - undici-types "~6.19.8" + undici-types "~6.20.0" "@types/node@^10.0.3": version "10.17.60" @@ -1031,9 +1040,9 @@ "@types/node" "*" "@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.16" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + version "6.9.17" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" + integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== "@types/secp256k1@^4.0.1": version "4.0.6" @@ -1240,7 +1249,7 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -axios@1.7.7, axios@^1.5.1: +axios@1.7.7: version "1.7.7" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== @@ -1256,6 +1265,15 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +axios@^1.5.1: + version "1.7.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.8.tgz#1997b1496b394c21953e68c14aaa51b7b5de3d6e" + integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1315,9 +1333,9 @@ bn.js@4.11.6: integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + version "4.12.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" @@ -1536,12 +1554,12 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" clean-stack@^2.0.0: version "2.2.0" @@ -1691,9 +1709,9 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: sha.js "^2.4.8" cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -1821,9 +1839,9 @@ elliptic@6.5.4: minimalistic-crypto-utils "^1.0.1" elliptic@^6.5.2, elliptic@^6.5.7: - version "6.6.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210" - integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA== + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -2120,7 +2138,7 @@ ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@5.7.2, ethers@^5.5.4, ethers@^5.6.1, ethers@^5.7.0, ethers@^5.7.2: +ethers@^5.5.4, ethers@^5.6.1, ethers@^5.7.0, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -2233,6 +2251,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fdir@^6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2252,13 +2275,6 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -2282,9 +2298,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== fmix@^0.1.0: version "0.1.0" @@ -2399,7 +2415,7 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -2442,18 +2458,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -2526,11 +2530,11 @@ globby@^10.0.1: slash "^3.0.0" gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.1.0.tgz#df8f0839c2d48caefc32a025a49294d39606c912" + integrity sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA== dependencies: - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.4" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" @@ -2617,13 +2621,13 @@ hardhat-tracer@^2.6.0: ethers "^5.6.1" hardhat@^2.22.14: - version "2.22.15" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.15.tgz#319b4948f875968fde3f0d09a7edfe74e16b1365" - integrity sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw== + version "2.22.17" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.17.tgz#96036bbe6bad8eb6a6b65c54dc5fbc1324541612" + integrity sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.6.4" + "@nomicfoundation/edr" "^0.6.5" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -2635,7 +2639,6 @@ hardhat@^2.22.14: aggregate-error "^3.0.0" ansi-escapes "^4.3.0" boxen "^5.1.2" - chalk "^2.4.2" chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" @@ -2643,10 +2646,9 @@ hardhat@^2.22.14: env-paths "^2.2.0" ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - find-up "^2.1.0" + find-up "^5.0.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" json-stream-stringify "^3.1.4" @@ -2655,12 +2657,14 @@ hardhat@^2.22.14: mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" + picocolors "^1.1.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" + tinyglobby "^0.2.6" tsort "0.0.1" undici "^5.14.0" uuid "^8.3.2" @@ -2689,14 +2693,16 @@ has-property-descriptors@^1.0.2: es-define-property "^1.0.0" has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.1.0.tgz#deb10494cbbe8809bce168a3b961f42969f5ed43" + integrity sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q== + dependencies: + call-bind "^1.0.7" has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== hash-base@^3.0.0: version "3.1.0" @@ -3046,14 +3052,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -3172,7 +3170,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -3211,9 +3209,9 @@ mnemonist@^0.38.0: obliterator "^2.0.0" mocha@^10.0.0, mocha@^10.2.0: - version "10.7.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" - integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" @@ -3300,9 +3298,9 @@ node-emoji@^1.10.0: lodash "^4.17.21" node-gyp-build@^4.2.0, node-gyp-build@^4.5.0: - version "4.8.2" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.2.tgz#4f802b71c1ab2ca16af830e6c1ea7dd1ad9496fa" - integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== node-hid@2.1.2: version "2.1.2" @@ -3344,9 +3342,9 @@ object-assign@^4.1.0: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== obliterator@^2.0.0: version "2.0.4" @@ -3394,13 +3392,6 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -3408,13 +3399,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -3429,11 +3413,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3456,11 +3435,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -3502,7 +3476,7 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" -picocolors@^1.0.0: +picocolors@^1.0.0, picocolors@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -3512,6 +3486,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -3586,9 +3565,9 @@ punycode@^2.1.0: integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qs@^6.4.0, qs@^6.9.4: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + version "6.13.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e" + integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== dependencies: side-channel "^1.0.6" @@ -3997,12 +3976,12 @@ solhint@^3.6.2: prettier "^2.8.3" solidity-coverage@^0.8.5: - version "0.8.13" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.13.tgz#8eeada2e82ae19d25568368aa782a2baad0e0ce7" - integrity sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA== + version "0.8.14" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.14.tgz#db9bfcc10e3bc369fc074b35b267d665bcc6ae2e" + integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== dependencies: "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.18.0" + "@solidity-parser/parser" "^0.19.0" chalk "^2.4.2" death "^1.1.0" difflib "^0.2.4" @@ -4170,9 +4149,9 @@ sync-rpc@^1.2.1: get-port "^3.1.0" table@^6.8.0, table@^6.8.1: - version "6.8.2" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" - integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -4223,6 +4202,14 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" +tinyglobby@^0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4253,9 +4240,9 @@ tslib@^1.9.3: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" - integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsort@0.0.1: version "0.0.1" @@ -4323,10 +4310,10 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -undici-types@~6.19.8: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== undici@^5.14.0: version "5.28.4"