Kelp DAO (https://www.kelpdao.xyz/restake/ ) is liquid restaking protocol currently building on top of EigenLayer.
It gives users access to multiple benefits like restaking rewards, staking rewards, DeFi and liquidity.
.
.
Install dependencies
npm install
forge install
copy .env.example to .env and fill in the values
This is a list of the most frequently needed commands.
Delete the build artifacts and cache directories:
Compile the contracts:
Format the contracts:
Get a gas report:
$ forge test --gas-report
Lint the contracts:
Check Makefile
to see a list of deploy commands for different use-cases.
Below are few sample deploy commands.
make deploy-lrt-local-test
General Deploy Script Instructions
Create a Deploy script in script/Deploy.s.sol
:
and run the script:
$ forge script script/Deploy.s.sol --broadcast --fork-url http://localhost:8545
For instructions on how to deploy to a testnet or mainnet, check out the
Solidity Scripting tutorial.
Follow this pattern
contractAddress=<contractAddress> contractPath=<contract-path> make verify-lrt-proxy-testnet
Example:
contractAddress=0xE7b647ab9e0F49093926f06E457fa65d56cb456e contractPath=contracts/LRTConfig.sol:LRTConfig make verify-lrt-proxy-testnet
Verify contracts on Blockscout
Flatten contract and copy to clipboard
forge flatten contracts/LRTConfig.sol:LRTConfig | pbcopy
Go to Blockscout and click on the contract address
Click on the Contract
tab
Click on Verify and Publish
button
Paste the flattened contract in the Contract Code
field
Click on Verify and Publish
button
Note: you may need to find the exact EVM compiler for the contract, e.g. Paris, Shaghai, etc
Run the tests:
Generate test coverage and output result to the terminal:
Generate test coverage with lcov report (you'll have to open the ./coverage/index.html
file in your browser, to do so
simply copy paste the path):
$ npm test:coverage:report
Using Static Analyzer for the contracts
Lib used Aderyn
Example:
aderyn -s contracts/FeeReceiver.sol
See List of options here
or run aderyn --help
.
.
Contract Name
Address
ProxyFactory
0x4ae77FdfB3BBBe99598CAfaE4c369b604b6d9e02
ProxyAdmin
0xa6A6b35d84B20077c6f3d30b86547fF837260407
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
LRTConfig
0x6d7888Bc794C1104C64c28F4e849B7AE68231b6d
RSETH
0xb4EA9175e99232560ac5dC2Bcbe4d7C833a15D56
LRTDepositPool
0xd51d846ba5032b9284b12850373ae2f053f977b3
LRTOracle
0xE92Ca437CA55AAbED0CBFFe398e384B997D4CCe9
ChainlinkPriceOracle
0x750604fAbF4828d1CaA19022238bc8C0DD6C50D5
EthXPriceOracle
0x6DA0235202D9443674abe6d0355AdD147B6396A2
NodeDelegator Proxy Addresses
NodeDelegator proxy 1: 0x560B95A0Ba942A7E15645F655731244680fA030B
NodeDelegator proxy 2: 0x32c1329fE006CDE9dac246293135E98e0070Afa0
NodeDelegator proxy 3: 0x5520e0ECE7a82a72325417732131dbeCe0b5F0Fb
NodeDelegator proxy 4: 0x385C2636bAe9145eb9A52a05A58f181440c2fcE3
NodeDelegator proxy 5: 0x8C58090994913Cb3cb017F544156d76F6c42F37c
Contract Name
Address
ProxyFactory
0x673a669425457bCabeb247f56552A0Fd8141cee2
ProxyAdmin
0xb61e0E39b6d4030C36A176f576aaBE44BF59Dc78
ProxyAdmin Owner
0x49bD9989E31aD35B0A62c20BE86335196A3135B1
TimeLock
0x49bD9989E31aD35B0A62c20BE86335196A3135B1
Timelock Proposer
0xb3696a817D01C8623E66D156B6798291fa10a46d
Contract Name
Proxy Address
LRTConfig
0x947Cb49334e6571ccBFEF1f1f1178d8469D65ec7
RSETH
0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7
LRTDepositPool
0x036676389e48133B63a802f8635AD39E752D375D
LRTOracle
0x349A73444b1a310BAe67ef67973022020d70020d
ChainlinkPriceOracle
0x78C12ccE8346B936117655Dd3D70a2501Fd3d6e6
SfrxETHPriceOracle
0x8546A7C8C3C537914C3De24811070334568eF427
EthXPriceOracle
0x3D08ccb47ccCde84755924ED6B0642F9aB30dFd2
SwETHPriceOracle
0xCB8f20a144bFA15066148A1F29F1091d15B25f93
RETHPriceOracle
0x585839c360872731Fc271183b9F703654ce08275
FeeReceiver
0xdbC3363De051550D122D9C623CBaff441AFb477C
KelpEarnedPoint
0x8E3A59427B1D87Db234Dd4ff63B25E4BF94672f4
MerkleDistributor
0x2DDB11443bD9Ceb92d4951A05f55eb7096EB53d3
LRTConverter
0x598dbcb99711E5577fF76ef4577417197B939Dfa
LRTWithdrawalManager
0x62De59c08eB5dAE4b7E6F7a8cAd3006d6965ec16
LRTUnstakingVault
0xc66830E2667bc740c0BED9A71F18B14B8c8184bA
NodeDelegator Proxy Addresses
NodeDelegator proxy index 0: 0x07b96Cf1183C9BFf2E43Acf0E547a8c4E4429473
NodeDelegator proxy index 1: 0x429554411C8f0ACEEC899100D3aacCF2707748b3
NodeDelegator proxy index 2: 0x92B4f5b9ffa1b5DB3b976E89A75E87B332E6e388
NodeDelegator proxy index 3: 0x9d2Fc9287e1c3A1A814382B40AAB13873031C4ad
NodeDelegator proxy index 4: 0xe8038228ff1aEfD007D7A22C9f08DDaadF8374E4
NodeDelegator proxy index 5: 0x049EA11D337f185b1Aa910d98e8Fbd991f0FBA7B
NodeDelegator proxy index 6: 0x545D69B99759E7b670Df243b882700121d6d3AB9
NodeDelegator proxy index 7: 0xee5470E1519972C3eA95249d60EBD064af2D53D3
NodeDelegator proxy index 8: 0x4C798C4653b1257D5149910523D7a6eeD5712F83
NodeDelegator proxy index 9: 0x79f17234746344E0365D40be50d8d43DB9082c32
NodeDelegator proxy index 10: 0x395884D1974a839702bcFCBa176AC7871c788946
NodeDelegator proxy index 11: 0xFc561966ceaAa09f4d6CBa4AdD54778c2bF1cB85
Contract Name
Address
ProxyFactory
0x81E5c1483c6869e95A4f5B00B41181561278179F
ProxyAdmin
0x4938c803EBe999FB0A5527310662624f2E7A38C1
ProxyAdmin Owner
0x96D97D66d4290C9182A09470a5775FF90DAf922c
Contract Name
Proxy Address
RSETHPool
0x376A7564AF88242D6B8598A5cfdD2E9759711B61
Contract Name
Address
ProxyFactory
0x68A9EC5b93F04a60c77F486a664f283B2E4E2B72
ProxyAdmin
0x2B1CbD412565c0a2D32E62Ab7304bb464C644cc1
ProxyAdmin Owner
0x84efef1439f1b6f264866f65062ba49df764be08
Contract Name
Proxy Address
RsETHTokenWrapper
0x9dd4f9EeE9B05D1ebec1d4aAE7Ae9F5d8D235CD4
Contract Name
Address
ProxyFactory
0x30c2B5f5c74B855d99792E485bDBcE1dD2f2e1A9
ProxyAdmin
0x68A9EC5b93F04a60c77F486a664f283B2E4E2B72
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
RsETHTokenWrapper
0xe7903B1F75C534Dd8159b313d92cDCfbC62cB3Cd
RSETHPoolV2
0xbDf612E616432AA8e8D7d8cC1A9c934025371c5C
Contract Name
Address
ProxyFactory
0x30c2B5f5c74B855d99792E485bDBcE1dD2f2e1A9
ProxyAdmin
0x68A9EC5b93F04a60c77F486a664f283B2E4E2B72
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
RsETHTokenWrapper
0xe7903B1F75C534Dd8159b313d92cDCfbC62cB3Cd
RSETHPoolV2
0x1558959f1a032F83f24A14Ff539944A926C51bdf
Contract Name
Address
ProxyFactory
0xAd6626758Bd6d2e6f68Da203087248f59ca4fB97
ProxyAdmin
0xDf3f5926Fd14Ed048B04941189da54BdEDD478d0
ProxyAdmin Owner
0x7Da95539762Dd11005889F6B72a6674A4888B56d
Contract Name
Proxy Address
RsETHTokenWrapper
0xEDfa23602D0EC14714057867A78d01e94176BEA0
RSETHPoolV2
0x291088312150482826b3A37d5A69a4c54DAa9118
Contract Name
Address
ProxyFactory
0x5c6AB8B02b29cd205580C02681d27Cb6246eEFbc
ProxyAdmin
0xa465eAfAfEE5629eE92832e14C37df4723816d58
ProxyAdmin Owner
0x0d30A563e38Fe2926b37783A046004A7869adE6C
Contract Name
Proxy Address
RsETHTokenWrapper
0x87eEE96D50Fb761AD85B1c982d28A042169d61b1
RSETHPoolV2
0xaAA687e218F9B53183A6AA9639FBD9D6e69EcB73
Contract Name
Address
ProxyFactory
0x1373A61449C26CC3F48C1B4c547322eDAa36eB12
ProxyAdmin
0xAD3B3ECd2130AaaB5f1fd9aEC82879Bd8D56742D
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
RsETHTokenWrapper
0xa25b25548B4C98B0c7d3d27dcA5D5ca743d68b7F
RSETHPoolV2
0xb80deaecd7F4Bca934DE201B11a8711644156a0a
Contract Name
Address
ProxyFactory
0x4938c803EBe999FB0A5527310662624f2E7A38C1
ProxyAdmin
0x352E20158C9916579b337d1332F462B26A8A699c
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
RsETHTokenWrapper
0xD2671165570f41BBB3B0097893300b6EB6101E6C
RSETHPoolV2
0x057297e44A3364139EDCF3e1594d6917eD7688c2
Contract Name
Address
ProxyFactory
0xe119D214a6efa7d3cF60e6E59481EDe1B0064A6B
ProxyAdmin
0x3222d3De5A9a3aB884751828903044CC4ADC627e
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
RsETHTokenWrapper
0x5A71f5888EE05B36Ded9149e6D32eE93812EE5e9
RSETHPoolV3
0x4Ef626efE4a3A279a9DC7e7a91C1c9CaaAE8e159
Contract Name
Address
WETHOracle
0x6F27976308001119a8e89cB447333DaaA3043CE7
Contract Name
Address
ProxyAdmin
0xd836801C07e9b471Fa3c525bc13bC4333c51F25F
ProxyAdmin Owner
0x7AAd74b7f0d60D5867B59dbD377a71783425af47
Contract Name
Proxy Address
RsETHTokenWrapper
0xd4169E045bcF9a86cC00101225d9ED61D2F51af2
RSETHPoolV2
0x41b300f5A619973b20931f0944C85DB229d5E27f
.
.
Name
Safe Address
ETH Mainnet Manager
0xCbcdd778AA25476F203814214dD3E9b9c46829A1
ETH Mainnet Admin
0xb9577E83a6d9A6DE35047aa066E3758221FE0DA2
ETH Mainnet External Admin
0xb3696a817D01C8623E66D156B6798291fa10a46d
BSC
0xb4222155CDB309Ecee1bA64d56c8bAb0475a95b0
Optimism
0x0d30A563e38Fe2926b37783A046004A7869adE6C
Arbitrum
0x96D97D66d4290C9182A09470a5775FF90DAf922c
Polygon ZKEVM
0x424Fc153C4005F8D5f23E08d94F5203D99E9B160
Manta
0x84eFeF1439F1b6F264866F65062Ba49Df764bE08
ZkSync
0xeD38DA849b20Fa27B07D073053C5F5aAe6A2dB6b
Base
0x7Da95539762Dd11005889F6B72a6674A4888B56d
.
.
Network
Address
Arbitrum
0xe119D214a6efa7d3cF60e6E59481EDe1B0064A6B
Optimism
0x68A9EC5b93F04a60c77F486a664f283B2E4E2B72
BSC
0x4186BFC76E2E237523CBC30FD220FE055156b41F
Network
Address
Arbitrum
0x4186BFC76E2E237523CBC30FD220FE055156b41F
Optimism
0x4186BFC76E2E237523CBC30FD220FE055156b41F
Manta
0x4186BFC76E2E237523CBC30FD220FE055156b41F
Mode
0x4186BFC76E2E237523CBC30FD220FE055156b41F
Blast
0x4186BFC76E2E237523CBC30FD220FE055156b41F
Scroll
0x65421ba909200b81640d98B979d07487C9781B66
Base
0x1Bc71130A0e39942a7658878169764Bbd8A45993
.
.
RSETH Price/Rate Providers
Contract Name
Proxy Address
RSETHMultiChainRateProvider
0x0788906B19bA8f8d0e8a7015f0714DF3179D9aB6
RSETHRateProvider
0xF1cccBa5558D31628216489A1435e068b1fd2C8A
OneETHPriceOracle
0x4cB8d6DCd56d6b371210E70837753F2a835160c4
RSETHPriceFeed (Morph)
0x4B9C66c2C0d3706AabC6d00D2a6ffD2B68A4E383
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x3222d3De5A9a3aB884751828903044CC4ADC627e
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x1373A61449C26CC3F48C1B4c547322eDAa36eB12
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHRateProvider on ETH mainnet as provider)
0x4186BFC76E2E237523CBC30FD220FE055156b41F
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x30CE1444834dbd91e23317179A39d875B16F0DCd
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x38dd27B51E2E6868D99B615097c03A3DE7fa7AA8
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x38dd27B51E2E6868D99B615097c03A3DE7fa7AA8
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0xc9BcFbB1Bf6dd20Ba365797c1Ac5d39FdBf095Da
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x7781ae9B47FeCaCEAeCc4FcA8d0b6187E3eF9ba7
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x81E5c1483c6869e95A4f5B00B41181561278179F
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x30CE1444834dbd91e23317179A39d875B16F0DCd
Contract Name
Proxy Address
RSETHRateReceiver (Uses RSETHMultiChainRateProvider as provider on ETH mainnet)
0x6C2e862E7d03e1C9dDa1b30De69b201c7c52e3dB