소스 정보
- 저장소
- tradingstrategy-ai/web3-ethereum-defi
- 최근 소스 활동
- 2026년 1월 4일 21:08
- 감지된 SKILL.md 언어
- 영어
- 스타
- 823
- 포크
- 187
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tradingstrategy-ai/web3-ethereum-defi --skill more-vaults명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Categorise a DeFi vault's investment strategy from its address, link, name, and published strategy context. Use when adding or reviewing StrategyTag classifications for VaultBase adapters or native perpetual DEX vault exports, including their maintained tags.py mappings.
Add support for a new ERC-4626 vault protocol. Use when the user wants to integrate a new vault protocol like IPOR, Plutus, Morpho, etc. Requires vault smart contract address, protocol name, and protocol slug as inputs.
Add a new vault curator to feed metadata and curator detection. Use when the user wants to add a verified curator, protocol-managed curator, or curator alias discovered from vault data.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | more-vaults |
| description | Add more vault smart contract types to an existing protocol |
This skill guides you through adding more smart contract types to the existing vaults.
Before starting, gather the following information from the user:
HARDCODED_PROTOCOLS classification later, as there is no point to create complex vault smart contract detection patterns if the protocol does not need it.implementation() function or similareth_defi/abi/{protocol_slug}/
eth_defi/abi/{protocol_slug}/{ContractName}.json
eth_defi/abi/lagoon/ as a reference for structureUpdate the existing vault protocol Python module to contain a class definitions.
The vault class should be in a new module next to the existing module:
"""Module docstring describing the protocol."""
import datetime
import logging
from eth_typing import BlockIdentifier
from eth_defi.erc_4626.vault import ERC4626Vault
logger = logging.getLogger(__name__)
class {VaultClassName}(ERC4626Vault):
"""Protocol vault support.
Add few lines descriptiong of the protocol here, from the protocol documentation.
- Add links to protocol documentation
- Add links to example contracts on block explorers
- Add links to github
"""
def has_custom_fees(self) -> bool:
"""Whether this vault has deposit/withdrawal fees."""
return False # Adjust based on protocol
def get_management_fee(self, block_identifier: BlockIdentifier) -> float:
"""Get the current management fee as a percent.
:return:
0.1 = 10%
"""
# Implement based on protocol's fee structure
# Generated: Human can add details later
return None
def get_performance_fee(self, block_identifier: BlockIdentifier) -> float | None:
"""Get the current performance fee as a percent.
:return:
0.1 = 10%
"""
# Implement based on protocol's fee structure
# Generated: Human can add details later
return None
def get_estimated_lock_up() -> datetime.timedelta | :
() -> :
For get_link() check the protocol website to find a direct link URL pattern to its vault. Usual formats:
get_chain_name(chain_id).lower() or simiarEdit eth_defi/erc_4626/classification.py:
create_probe_calls(), add a probe call that uniquely identifies this protocol:
getProtocolSpecificData(), custom role constants, etc. and compare them to what is already implemented in create_probe_calls()HARDCODED_PROTOCOLS in classification.py insteadIf you cannot find a such accessor function in the ABI or vault smart contract source, interrupt the skill and ask for user intervention.
# {Protocol Name}
# {Block explorer link}
{protocol_slug}_call = EncodedCall.from_keccak_signature(
address=address,
signature=Web3.keccak(text="uniqueFunction()")[0:4],
function="uniqueFunction",
data=b"",
extra_data=None,
)
yield {protocol_slug}_call
identify_vault_features(), add detection logic:if calls["uniqueFunction"].success:
features.add(ERC4626Feature.{protocol_slug}_like)
In eth_defi/erc_4626/classification.py, add a case for the new protocol in create_vault_instance():
elif ERC4626Feature.{protocol_slug}_like in features:
from eth_defi.erc_4626.vault_protocol.{protocol_slug}.vault import {ProtocolName}Vault
return {ProtocolName}Vault(web3, spec, token_cache=token_cache, features=features)
Update tests/erc_4626/vault_protocol/test_{protocol_slug}.py following the pattern in tests/erc_4626/vault_protocol/test_plutus.py and. tests/erc_4626/vault_protocol/test_goat.py:
"""Test {Protocol Name} vault metadata"""
import os
from pathlib import Path
import pytest
from web3 import Web3
import flaky
from eth_defi.erc_4626.classification import create_vault_instance_autodetect
from eth_defi.erc_4626.core import get_vault_protocol_name
from eth_defi.erc_4626.vault_protocol.{protocol_slug}.vault import {ProtocolName}Vault
from eth_defi.provider.anvil import fork_network_anvil, AnvilLaunch
from eth_defi.provider.multi_provider import create_multi_provider_web3
from eth_defi.vault.base import VaultTechnicalRisk
from eth_defi.erc_4626.core import ERC4626Feature
JSON_RPC_{CHAIN} = os.environ.get("JSON_RPC_{CHAIN}")
pytestmark = pytest.mark.skipif(
JSON_RPC_{CHAIN} is None,
reason="JSON_RPC_{CHAIN} needed to run these tests"
)
@pytest.fixture(scope="module")
def anvil_{chain}_fork(request) -> AnvilLaunch:
"""Fork at a specific block for reproducibility"""
launch = fork_network_anvil(JSON_RPC_{CHAIN}, fork_block_number={block_number})
try:
yield launch
finally:
launch.close()
@pytest.fixture(scope="module")
def web3(anvil_{chain}_fork):
web3 = create_multi_provider_web3(anvil_{chain}_fork.json_rpc_url)
web3
{protocol_slug}(
web3: Web3,
tmp_path: Path,
):
vault = create_vault_instance_autodetect(
web3,
vault_address=,
)
(vault, {ProtocolName}Vault)
vault.get_protocol_name() ==
fork_block_number.After adding it, run the test module and fix any issues.
Rerun all tests for the vault protocl for which we added more vaults.
Format the newly added files with poetry run ruff format.
In docs/source/vaults include the newly created module alongside the existing module.
Remember to update index.rst.
After implementation, verify:
eth_defi/abi/{protocol_slug}/ERC4626VaultERC4626Feature enum has the new protocolget_vault_protocol_name() returns the correct namecreate_probe_calls() has a unique probe for the protocolidentify_vault_features() correctly identifies the protocolcreate_vault_instance() creates the correct vault classsource .local-test.env && poetry run pytest tests/erc_4626/vault_protocol/test_{protocol_slug}.py -vIf there are problems with the checklist, ask for human assistance.
CHANGELOG.md and add a note of added new protocolAfter everything is done, open a pull request, but only if the user asks you to.
gh pr create \
--title "Add new vault protocol: {protocol name}" \
--body $'Protocol: {protocok name}\nHomepage: {homepage link}\nGithub: {github link}\nDocs: {docs link}\nExample contract: {blockchain explorer link}" \
--base master
To find a function that uniquely identifies the protocol:
Read the ABI and look for:
SAY_TRADER_ROLE() for Plutus)getPerformanceFeeData() for IPOR)MORPHO() for Morpho)Verify the function is truly unique by checking it doesn't exist in other protocols
Some protocols may need name-based detection if no unique function exists:
name = calls["name"].result
if name:
name = name.decode("utf-8", errors="ignore")
if "ProtocolName" in name:
features.add(ERC4626Feature.{protocol_slug}_like)
The ABI JSON file should contain the contract's ABI array. Example:
{
"abi": [
{
"inputs": [],
"name": "totalAssets",
"outputs": [{ "type": "uint256" }],
"stateMutability": "view",
"type": "function"
}
]
}
Or just the array directly:
[
{
"inputs": [],
"name": "totalAssets",
"outputs": [{ "type": "uint256" }],
"stateMutability": "view",
"type": "function"
}
]