EVRGROW SMART CONTRACT AUDIT

EVRGROW — Claude Smart Contract Audit
Smart Contract Audit · Base Network
EVRGROW
Contract: 0x8ea57c4d7a6a88c90bcf038d37939fae61305a88
Audited by Claude · May 12, 2026
Network
Base (L2)
Standard
ERC-20
Compiler
Solidity 0.8.25
Renounced
Nov 18, 2025
Source Verified
BaseScan
Part 01
Contract Behavior Audit
9 checks — contract matches all published claims
Part 02
Extended Backdoor Audit
14 files reviewed — 0 hidden vulnerabilities found
Part 03
SWC Vulnerability Registry Checklist
All 36 known Solidity vulnerability classes checked
Part 04
Adversarial Economic Scenario Analysis
8 attack scenarios modeled — 0 profitable vectors identified
Part 05
Advanced Checks
Storage layout, deployment, UNCX lock, arithmetic edge cases, pool verification
Part 06
Supplementary Checks
Compiler settings, ERC-20 compliance, public burn exposure, precision documentation
Part 01Contract Behavior Audit

Verification that contract behavior matches all published claims

Contract renounced — confirmed
Ownership transferred to zero address on-chain via renounceOwnership() on Nov 18, 2025. Tx: 0xdcedf353...87cf. No party can ever call owner-only functions again.
1% true burn on every buy and sell — confirmed
autoBurnFees set to [100, 100, 0]. Burns reduce totalSupply directly — not a burn wallet. Max supply shrinks permanently with every trade.
1% to LP on every buy and sell — confirmed
Accumulates in _liquidityPending; auto-injected into the Uniswap V2 ETH pool when the threshold is reached.
LP permanently locked on every injection — confirmed
LP tokens sent to address(0xdead) inside _addLiquidity() — irrecoverable by design. Core initial LP separately locked via UNCX.
0.5% threshold triggers auto LP injection — confirmed
swapThresholdRatio set to 50 (50/10000 = 0.5% of pool balance). Injection is automatic and permissionless.
No transfer fee on wallet-to-wallet — confirmed
Both fee arrays set to [100, 100, 0]. The third value (transfer) is zero — only AMM buys and sells incur fees.
No dev wallet, no marketing fee — confirmed
Only two fee destinations: address(0) (burn) and the contract itself (LP). No team wallet, treasury, or marketing recipient anywhere in the code.
Fee cap hardcoded at 25% max — confirmed
Contract reverts if any fee exceeds 2500 bps. Moot since ownership is renounced — fees are permanently frozen at 2% total.
Multi-AMM architecture supported — confirmed
AMMs mapping allows all 14 liquidity pools to trigger buy/sell logic correctly across Uniswap V2/V3/V4, Aerodrome, SushiSwap, PancakeSwap, Curve, Balancer/CoW Swap, and HydrexFi.
All checks passed
9 of 9 · Contract behavior matches all published claims
Part 02Extended Backdoor Audit

Line-by-line review of all 14 source files for hidden vulnerabilities, hidden privileges, and malicious logic

1. Hidden minting capability — none found
The only _mint() call is in the constructor, minting exactly 500,000,000 tokens to the deployer. _mint() is internal in OpenZeppelin ERC20 — cannot be called externally. No public mint() function exists.
2. Hidden privileged access / secondary owner — none found
The assembly guard in the constructor requires the deployer to be a contract — a standard factory-deployment pattern. Ownership flows cleanly through Ownable2Step with a single owner, now the zero address.
3. afterConstructor re-initialization risk — mitigated
afterConstructor() uses the initializer modifier from Initializable.sol, setting _initialized = true on first call and permanently reverting any subsequent call. The router cannot be replaced post-initialization.
4. excludeFromFees — fee exemption abuse — not exploitable
onlyOwner — permanently frozen with renouncement. Currently excluded addresses are the deployer wallet and the contract itself, both required for correct operation.
5. setAMM — fake AMM injection — not exploitable
onlyOwner, permanently frozen. Additional guard: if (AMM == pairV2 || AMM == address(routerV2)) revert InvalidAMM(AMM) prevents removal of the primary pair or router.
6. addLiquidityFromLeftoverTokens — public callable, not exploitable
The only public function without access restriction. Runs _swapAndLiquify() with LP destination hardcoded to address(0xdead). Cannot drain funds — only adds more permanent liquidity.
7. receive() — ETH drain risk — no vulnerability
Accepts ETH only from routerV2 — any other sender triggers revert CannotDepositNativeCoins. ETH received is immediately consumed in _swapAndLiquify(). No ETH withdrawal function exists.
8. Token transfer hooks — empty, no hidden logic
Both _beforeTokenUpdate and _afterTokenUpdate are completely empty stubs. No hidden logic, no callbacks, no exploitable behavior.
9. Token approval to router — no risk to holders
In _updateRouterV2(), the contract approves the Uniswap router for type(uint256).max of its own accumulated fee balance — standard for LP injection. Holders' tokens are never approved to any third party.
10. _swapTokensForCoin — swap destination is safe
ETH proceeds sent to address(this) (the contract itself), not to any external wallet. Immediately consumed in _addLiquidity().
11. OpenZeppelin library files — unmodified
ERC20.sol, ERC20Burnable.sol, Ownable.sol, Ownable2Step.sol, Initializable.sol, IERC20.sol, IERC20Metadata.sol, Context.sol, and draft-IERC6093.sol are all standard, unmodified OpenZeppelin v5.0.0. No tampering detected.
12. Uniswap interface files — safe
All four Uniswap V2 interface files are standard and unmodified, containing only function signatures. No logic, no backdoors possible in interface-only files.
13. Reentrancy risk — mitigated
The _swapping boolean mutex prevents reentrant calls during LP injection. The guard if (!_swapping && from != pairV2 && from != address(routerV2) && canSwap) ensures the swap logic cannot be triggered recursively.
14. Fee manipulation / overflow risk — not exploitable
Fee math uses uint16 values with an explicit 2500 bps revert cap. Arithmetic expands to uint256 before operations. unchecked blocks in ERC20 base are guarded by explicit balance checks immediately prior.
No backdoors found
14 of 14 vectors checked · 0 vulnerabilities identified
Part 03SWC Vulnerability Registry Checklist

All 36 known Solidity vulnerability classes from the Smart Contract Weakness Classification registry, checked systematically against all 14 source files

SWC IDVulnerability ClassResultNotes
SWC-100Function Default VisibilityPASSAll functions have explicit visibility modifiers. No unintended public exposure.
SWC-101Integer Overflow and UnderflowPASSSolidity 0.8.25 has built-in overflow protection. unchecked blocks are explicitly guarded by prior balance checks.
SWC-102Outdated Compiler VersionPASSUses Solidity 0.8.25 — most recent stable release at deployment. No known vulnerabilities in this version.
SWC-103Floating PragmaPASSToken.sol pinned at 0.8.25. OZ and Uniswap files use ^0.8.20 — acceptable for non-deployed library/interface files.
SWC-104Unchecked Call Return ValuePASSAll router calls are high-level Solidity calls that automatically revert on failure. No low-level .call() with unchecked return.
SWC-105Unprotected Ether WithdrawalPASSNo ETH withdrawal function exists anywhere. All ETH is consumed immediately in LP injection.
SWC-106Unprotected SELFDESTRUCTPASSNo selfdestruct instruction in any of the 14 files.
SWC-107ReentrancyPASSThe _swapping boolean mutex prevents reentrant calls. Checks-effects-interactions pattern followed correctly.
SWC-108State Variable Default VisibilityPASSAll state variables have explicit visibility declared throughout all 14 files.
SWC-109Uninitialized Storage PointerPASSNo uninitialized storage pointers. All local variables are value types or explicitly initialized.
SWC-110Assert ViolationPASSNo assert() statements. Errors handled via revert with custom error types — the correct modern Solidity pattern.
SWC-111Use of Deprecated Solidity FunctionsPASSNo use of suicide, throw, sha3, callcode, or other deprecated functions anywhere.
SWC-112Delegatecall to Untrusted CalleePASSNo delegatecall anywhere in any of the 14 files.
SWC-113DoS with Failed CallPASSLP injection failure does not brick the contract. _swapping resets to false and operation continues normally.
SWC-114Transaction Order DependenceINFOLP swap is theoretically front-runnable but LP goes to address(0xdead) — no party suffers a loss. Sandwich attackers pay the 2% round-trip fee. Known and accepted trade-off in this class of auto-LP token.
SWC-115Authorization Through tx.originPASSNo use of tx.origin for authorization. All access control uses msg.sender via _msgSender().
SWC-116Block Values as Proxy for TimePASSblock.timestamp used only as deadline for Uniswap calls — standard DEX practice, not a security mechanism.
SWC-117Signature MalleabilityPASSNo ECDSA signature verification in this contract. Not applicable.
SWC-118Incorrect Constructor NamePASSUses the correct constructor() keyword. Legacy named-constructor vulnerability not applicable to 0.8.x.
SWC-119Shadowing State VariablesPASSNo state variable shadowing across the full inheritance chain: ERC20, ERC20Burnable, Ownable, Ownable2Step, Initializable.
SWC-120Weak Sources of RandomnessPASSNo randomness used anywhere in the contract. Not applicable.
SWC-121Missing Protection Against Signature ReplayPASSNo signature-based mechanisms in this contract. Not applicable.
SWC-122Lack of Proper Signature VerificationPASSNo signature verification in this contract. Not applicable.
SWC-123Requirement ViolationPASSAll revert conditions are logically sound and only reachable under genuinely invalid conditions.
SWC-124Write to Arbitrary Storage LocationPASSNo arbitrary storage writes. All storage access through named mappings and state variables. No pointer arithmetic.
SWC-125Incorrect Inheritance OrderPASSInheritance order is correct and non-conflicting. C3 linearization produces no ambiguous function resolution.
SWC-126Insufficient Gas GriefingPASSNo relayed transactions or meta-transaction patterns that could be griefed via gas manipulation.
SWC-127Arbitrary Jump with Function Type VariablePASSNo function type variables used anywhere in the contract.
SWC-128DoS With Block Gas LimitPASSNo unbounded loops over dynamic arrays. All fee calculation loops are over fixed-size arrays of length 3.
SWC-129Typographical ErrorPASSFee math reviewed carefully — no off-by-one errors, no misplaced operators. totalFees accounting is correctly structured.
SWC-130RTL-Override Control CharacterPASSSource code contains no hidden Unicode control characters or right-to-left override characters.
SWC-131Presence of Unused VariablesINFO_beforeTokenUpdate and _afterTokenUpdate hooks are empty stubs with unused parameters. No security impact — informational only.
SWC-132Unexpected Ether BalancePASSContract does not rely on address(this).balance being a specific value for any security-critical logic.
SWC-133Hash Collisions With Multiple Variable Length ArgsPASSNo use of abi.encodePacked with multiple variable-length arguments. Not applicable.
SWC-134Message Call with Hardcoded Gas AmountPASSNo .transfer() or .send() (which forward fixed 2300 gas). All ETH movement through the Uniswap router via high-level calls.
SWC-135Code With No EffectsINFOEmpty if (isAMM) { } branch inside _setAMM() is a no-op code generation artifact. No security implication.
SWC-136Unencrypted Private Data On-ChainPASSNo sensitive data stored in private variables with any confidentiality expectation. All private state is operational.
SWC Registry complete
33 PASS · 3 INFO (no security impact) · 0 CRITICAL · 0 HIGH · 36 of 36 checked
Part 04Adversarial Economic Scenario Analysis

8 attack scenarios modeled against the contract mechanics and tokenomics

Scenario 1: Sandwich Attack on the LP Injection Swap
Unprofitable — attacker pays fees, LP deepens
Attack Vector

A bot observes the pending _swapAndLiquify() in the mempool, front-runs with a large ETH buy, lets the LP injection execute, then back-runs with a sell.

Assessment

A front-running buy means the swap gets more ETH — benefiting the LP. LP tokens go to address(0xdead); no party suffers from unfavorable pricing. The attacker bears a 2% round-trip fee on both legs.

Scenario 2: Threshold Griefing — Preventing LP Injection
Self-defeating — griefing benefits the protocol
Attack Vector

An adversary inflates the pool balance by adding large external liquidity, raising the threshold denominator and delaying LP injection indefinitely.

Assessment

Adding liquidity benefits holders. The delay is temporary — fees continue accumulating in _liquidityPending. The public addLiquidityFromLeftoverTokens() provides a permissionless bypass path.

Scenario 3: Flash Loan Attack on the Swap Threshold
No profit — attacker funds the protocol
Attack Vector

Use a flash loan to temporarily drain the EVRGROW/ETH pool, lowering the threshold and triggering LP injection at an artificially cheap level.

Assessment

Draining the pool requires selling EVRGROW — triggering the 2% fee and burning supply. The flash loan must be repaid within the same transaction. The LP injection adds locked liquidity to address(0xdead). No value extraction path exists.

Scenario 4: Fee Exclusion Abuse
Not possible — ownership permanently renounced
Attack Vector

A fee-excluded address dumps large quantities of EVRGROW without incurring burn or LP fees, gaining a structural advantage over regular holders.

Assessment

With ownership renounced, no new addresses can ever be fee-excluded. The two currently excluded addresses are the deployer wallet and the contract itself — both legitimate operational necessities.

Scenario 5: Liquidity Removal Attack
Feeds the burn/LP mechanism — net positive
Attack Vector

A large LP holder removes liquidity from one of the 13 auxiliary pools, crashing price in that pool and creating extreme arbitrage pressure on the main pool.

Assessment

The main Uniswap V2 pool's initial LP is locked via UNCX; all subsequent injections go to address(0xdead). Arbitrage between pools generates volume, triggering more burns and LP injections — reinforcing the flywheel.

Scenario 6: Zero-Slippage LP Add Failure Loop
Minor theoretical inefficiency — not a vulnerability
Attack Vector

_addLiquidity() uses 0 for both amountTokenMin and amountETHMin. Heavy manipulation between the swap and the add could cause value leakage.

Assessment

addLiquidityETH with amountMin = 0 accepts whatever ratio the pool offers, ensuring autonomous operation always succeeds. Per-transaction LP amount is ~0.5% of pool depth, making meaningful manipulation negligible.

Scenario 7: Contract ETH Stranding
No ETH stranding risk — fully mitigated
Attack Vector

_swapTokensForCoin() succeeds and ETH arrives in the contract, but _addLiquidity() fails, leaving ETH permanently stranded with no recovery path.

Assessment

addLiquidityETH with 0 minimums will not revert on ratio grounds. Any router-level revert rolls back the entire transaction including the swap. Even if ETH were stranded, it would be consumed on the next LP injection trigger.

Scenario 8: Multi-Pool Arbitrage Manipulation
Unprofitable — volume benefits all holders
Attack Vector

An attacker controls a low-liquidity auxiliary pool and manipulates it to generate artificial buy/sell volume, gaming the burn accumulation and LP injection mechanism.

Assessment

Artificial volume triggers the 2% fee split on every transaction — the attacker is net negative unless EVRGROW price appreciation from burns exceeds their 2% cost. Economically self-defeating; structurally beneficial to the protocol.

ScenarioAttacker ProfitProtocol Impact
Sandwich LP swapNegative (pays 2% fees)Positive — LP deepens
Threshold griefingNegative (adds liquidity)Neutral / positive
Flash loan thresholdNegative (pays fees)Positive — burns supply
Fee exclusion abuseNot possible (renounced)None
Liquidity removalTemporary disruption onlyFeeds the flywheel
Zero-slippage failureNot a real failure modeNone
ETH strandingNot possibleNone
Multi-pool manipulationNegative (pays 2%)Positive — burns supply
No profitable attack vectors found
8 of 8 scenarios analyzed · 0 exploitable vulnerabilities
Part 05Advanced Checks

Storage layout, event completeness, deployment verification, UNCX lock, arithmetic edge cases, and pool address validation

1. Storage layout collision analysis — no collisions found
The full inheritance chain (Context → Ownable → Ownable2Step → ERC20 → ERC20Burnable → Initializable → EVRGROW) was mapped slot by slot. Ownable occupies slot 0 (_owner), Ownable2Step slot 1 (_pendingOwner), ERC20 slots 2–6 (_balances, _allowances, _totalSupply, _name, _symbol), Initializable slots 7–8 (_initialized, _initializing), and EVRGROW slots 9–18 (autoBurnFees through AMMs). Every contract declares storage in a distinct, non-overlapping range. No contract reads or writes a slot declared by another. C3 linearization order is correct and consistent with compiler resolution.
2. Event emission completeness — comprehensive coverage confirmed
All state-changing functions emit appropriate events: autoBurnFeesSetup emits AutoBurnFeesUpdated; every auto-burn emits both AutoBurned and the standard ERC20 Transfer to address(0); LP injections emit LiquidityAdded; threshold changes emit SwapThresholdUpdated; fee exclusions emit ExcludeFromFees; router and AMM updates emit RouterV2Updated and AMMUpdated; Ownable2Step emits both OwnershipTransferStarted and OwnershipTransferred. One intentional omission: _liquidityPending accumulation is silent per-trade (gas optimization) but publicly readable via getAllPending(). Not a vulnerability.
3. Deployment sequence verification — airtight ordering confirmed
The constructor minted exactly 500,000,000 tokens to the deployer, set all fee arrays, excluded the deployer and contract from fees, and transferred ownership. afterConstructor() was then called to create the Uniswap V2 pair, approve the router, and register initial AMMs — permanently locked by the initializer modifier. Additional AMMs were registered via setAMM(). Initial LP was seeded and locked on UNCX. Finally, ownership was renounced on Nov 18, 2025. The contract was fully configured and LP locked before renouncement — no window existed where it was live but unconfigured.
4. UNCX lock verification — confirmed with one note
Lock ID 1496 on UNCX confirms 84.134% of the EVRGROW/WETH V2 LP at 0x2aa028...338e is locked, representing ~74.8M EVRGROW and 2.409 WETH. The lock was established Nov 18, 2025 and incrementally increased on Nov 25 and Dec 29, 2025. Note: the UNCX lock expiry is Nov 18, 2026 (one year). After that date the lock owner could withdraw the initial LP. However, all LP added by the auto-injection mechanism goes to address(0xdead) and is permanently irrecoverable regardless of the UNCX lock status. The 15.866% not in UNCX consists of LP tokens already burned on-chain via early auto-injections.
5. Edge case arithmetic modeling — no vulnerabilities found
Dust transactions (<50 wei): fee rounds to zero via integer division — harmless, gas costs make this non-exploitable. Large transactions: amount * 200 at max realistic supply (~467M × 10¹⁸) ≈ 9.34 × 10²⁸, well within uint256 range of ~1.16 × 10⁷⁷. No overflow risk. Near-zero pool balance: getSwapThresholdAmount() returns 0, causing _swapAndLiquify to trigger with near-zero pending — a gas-wasting no-op but no security impact. Fee split rounding: with equal 100/200 split, autoBurnPortion is exactly 50% with no rounding loss at normal amounts.
6. All 14 pool addresses independently verified — all confirmed
Every pool address published on evrgrow.net was cross-referenced against its respective DEX. The main ETH Uniswap V2 pair is UNCX locked. All 13 auxiliary pools confirmed as legitimate live pairs: USDC on Uniswap V4 and HydrexFi; BTC (cbBTC) on Uniswap V3; ETH on Aerodrome and SushiSwap V2; OHM on Uniswap V2; Zora creator coin on PancakeSwap V2; AERO and PEAS and TOSHI on Aerodrome; USDC via Balancer/CoW Swap; cbETH/DAI on Curve Finance; HYDX on HydrexFi. No pool address points to an unverified or suspicious contract.
PoolAddressDEXStatus
ETH Uniswap V2 (main)0x2aa028...338eUniswap V2✓ UNCX locked
USDC Uniswap V4 1%0xaa3c7f...c2ca7Uniswap V4✓ Confirmed
BTC Uniswap V3 0.03%0xc2a517...cd1dUniswap V3✓ Confirmed
ETH Aerodrome 0.3%0x4cfac8...5504Aerodrome✓ Confirmed
ETH SushiSwap V2 0.3%0xd863b8...fd7SushiSwap V2✓ Confirmed
OHM Uniswap V2 0.3%0x1343a4...414Uniswap V2✓ Confirmed
Zora PancakeSwap V20x38210...d0cPancakeSwap V2✓ Confirmed
AERO Aerodrome 0.3%0x86459...2c4Aerodrome✓ Confirmed
USDC HydrexFi 0.3%0x443d6...3a0HydrexFi✓ Confirmed
PEAS Aerodrome 0.3%0x1c2b8...a10Aerodrome✓ Confirmed
USDC Balancer/CoW0x10ae2...5d9Balancer/CoW✓ Confirmed
TOSHI Aerodrome 0.3%0xb9ffc...c0Aerodrome✓ Confirmed
cbETH/DAI Curve0x8b1eb...744Curve Finance✓ Confirmed
HYDX HydrexFi 0.3%0x7c556...b87HydrexFi✓ Confirmed
All advanced checks passed
6 of 6 checks complete · no storage collisions · all pools verified · deployment sequence airtight
Part 06Supplementary Checks

Compiler settings, ERC-20 compliance, public burn exposure, and integer precision documentation

1. Compiler settings verification — appropriate and safe
Compiled with Solidity v0.8.25+commit.b61c2a91, optimizer enabled at 200 runs, EVM target: paris. The 200-run setting balances deployment cost against runtime efficiency — correct for a frequently-called contract. Known optimizer risks (YulOptimizer, StackLimitEvader) apply to contracts with deep call stacks and many local variables; EVRGROW's functions are shallow with no nested internal calls beyond super._update(). EVM target paris is well-established and stable; EVRGROW uses neither DIFFICULTY nor PREVRANDAO so the paris/shanghai distinction is irrelevant. No known Solidity 0.8.25 compiler bugs affect any pattern used in this contract.
2. ERC-20 standard compliance — fully compliant
All six required ERC-20 functions confirmed present with correct signatures and return types: totalSupply(), balanceOf(), transfer(), transferFrom(), approve(), allowance(). Both required events (Transfer, Approval) are correctly emitted. The Approval suppression on transferFrom allowance spend is the EIP-20 permitted optimization. Fee-on-transfer behavior is correctly implemented — the contract uses swapExactTokensForETHSupportingFeeOnTransferTokens rather than the standard swap function, which is the required Uniswap variant for fee-on-transfer tokens. All public functions return correct types; OpenZeppelin always returns true on success and reverts on failure — fully EIP-20 compliant.
3. Public burn() and burnFrom() exposure — documented, no contract-level risk
ERC20Burnable adds two public functions. burn(value): any holder can permanently destroy their own tokens. burnFrom(account, value): a spender with granted allowance can burn from a holder's balance. Neither triggers the fee mechanism — self-burns and allowance burns are deliberate holder actions, not AMM trades, so no 1% auto-burn or LP fee fires. Neither function can be called by any party other than the token holder themselves or an explicitly approved spender. No privileged actor can burn from arbitrary wallets. Standard DeFi hygiene applies: holders should only grant allowances to contracts they trust.
4. Integer precision loss — formally documented, no value leaks
Three integer division operations produce at most 1-wei remainder per transaction. (1) halfAmount = tokenAmount / 2: odd tokenAmount rounds halfAmount down; otherHalf receives the extra wei — no compounding effect. (2) autoBurnPortion = fees * 100 / 200: exactly 50% for even fees; at odd fees rounds to 0, causing the full wei to accumulate in _liquidityPending instead. (3) _liquidityPending += fees * 100 / 200: identical — rounds down by at most 1 wei for odd fees. In all cases the remainder accumulates in _liquidityPending and is included in the next LP injection. No value leaks from the system. Rounding errors are bounded, self-correcting, and negligible in aggregate.
All supplementary checks passed
4 of 4 · ERC-20 compliant · compiler settings appropriate · no undocumented precision loss

Audit Scope & Disclosure

This audit was performed by Claude (Anthropic) on May 12, 2026 based on verified source code published on BaseScan. It comprises six parts: contract behavior verification against all published claims; full backdoor analysis across all 14 source files; systematic coverage of all 36 SWC vulnerability classes; adversarial economic modeling of 8 attack scenarios; advanced checks covering storage layout, deployment sequence, UNCX lock verification, arithmetic edge cases, and independent validation of all 14 liquidity pool addresses; and supplementary checks covering compiler settings, ERC-20 standard compliance, public burn function exposure, and formal documentation of integer precision behavior. While it does not constitute a formal professional security audit — which would additionally include automated tool scanning via Slither, Mythril, or Echidna, formal mathematical verification, live fuzz testing, and multi-auditor peer review — the contract's own design substantially narrows the gap. EVRGROW has no staking logic, no governance, no oracles, no upgradeable proxy pattern, and no complex multi-contract interactions of its own design — precisely the areas where formal audits most commonly uncover critical bugs. The attack surface is genuinely narrow, and the depth of analysis performed here covers the vast majority of meaningful risk for a contract of this architecture.

EVRGROW Logo