{"id":"d338674e-659d-4af3-959a-ef91dec76b3b","shortId":"p7Q7gg","kind":"skill","title":"defi-protocol-templates","tagline":"Implement DeFi protocols with production-ready templates for staking, AMMs, governance, and lending systems. Use when building decentralized finance applications or smart contract protocols.","description":"# DeFi Protocol Templates\n\nProduction-ready templates for common DeFi protocols including staking, AMMs, governance, lending, and flash loans.\n\n## Do not use this skill when\n\n- The task is unrelated to defi protocol templates\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources/implementation-playbook.md`.\n\n## Use this skill when\n\n- Building staking platforms with reward distribution\n- Implementing AMM (Automated Market Maker) protocols\n- Creating governance token systems\n- Developing lending/borrowing protocols\n- Integrating flash loan functionality\n- Launching yield farming platforms\n\n## Staking Contract\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract StakingRewards is ReentrancyGuard, Ownable {\n    IERC20 public stakingToken;\n    IERC20 public rewardsToken;\n\n    uint256 public rewardRate = 100; // Rewards per second\n    uint256 public lastUpdateTime;\n    uint256 public rewardPerTokenStored;\n\n    mapping(address => uint256) public userRewardPerTokenPaid;\n    mapping(address => uint256) public rewards;\n    mapping(address => uint256) public balances;\n\n    uint256 private _totalSupply;\n\n    event Staked(address indexed user, uint256 amount);\n    event Withdrawn(address indexed user, uint256 amount);\n    event RewardPaid(address indexed user, uint256 reward);\n\n    constructor(address _stakingToken, address _rewardsToken) {\n        stakingToken = IERC20(_stakingToken);\n        rewardsToken = IERC20(_rewardsToken);\n    }\n\n    modifier updateReward(address account) {\n        rewardPerTokenStored = rewardPerToken();\n        lastUpdateTime = block.timestamp;\n\n        if (account != address(0)) {\n            rewards[account] = earned(account);\n            userRewardPerTokenPaid[account] = rewardPerTokenStored;\n        }\n        _;\n    }\n\n    function rewardPerToken() public view returns (uint256) {\n        if (_totalSupply == 0) {\n            return rewardPerTokenStored;\n        }\n        return rewardPerTokenStored +\n            ((block.timestamp - lastUpdateTime) * rewardRate * 1e18) / _totalSupply;\n    }\n\n    function earned(address account) public view returns (uint256) {\n        return (balances[account] *\n            (rewardPerToken() - userRewardPerTokenPaid[account])) / 1e18 +\n            rewards[account];\n    }\n\n    function stake(uint256 amount) external nonReentrant updateReward(msg.sender) {\n        require(amount > 0, \"Cannot stake 0\");\n        _totalSupply += amount;\n        balances[msg.sender] += amount;\n        stakingToken.transferFrom(msg.sender, address(this), amount);\n        emit Staked(msg.sender, amount);\n    }\n\n    function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) {\n        require(amount > 0, \"Cannot withdraw 0\");\n        _totalSupply -= amount;\n        balances[msg.sender] -= amount;\n        stakingToken.transfer(msg.sender, amount);\n        emit Withdrawn(msg.sender, amount);\n    }\n\n    function getReward() public nonReentrant updateReward(msg.sender) {\n        uint256 reward = rewards[msg.sender];\n        if (reward > 0) {\n            rewards[msg.sender] = 0;\n            rewardsToken.transfer(msg.sender, reward);\n            emit RewardPaid(msg.sender, reward);\n        }\n    }\n\n    function exit() external {\n        withdraw(balances[msg.sender]);\n        getReward();\n    }\n}\n```\n\n## AMM (Automated Market Maker)\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ncontract SimpleAMM {\n    IERC20 public token0;\n    IERC20 public token1;\n\n    uint256 public reserve0;\n    uint256 public reserve1;\n\n    uint256 public totalSupply;\n    mapping(address => uint256) public balanceOf;\n\n    event Mint(address indexed to, uint256 amount);\n    event Burn(address indexed from, uint256 amount);\n    event Swap(address indexed trader, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out);\n\n    constructor(address _token0, address _token1) {\n        token0 = IERC20(_token0);\n        token1 = IERC20(_token1);\n    }\n\n    function addLiquidity(uint256 amount0, uint256 amount1) external returns (uint256 shares) {\n        token0.transferFrom(msg.sender, address(this), amount0);\n        token1.transferFrom(msg.sender, address(this), amount1);\n\n        if (totalSupply == 0) {\n            shares = sqrt(amount0 * amount1);\n        } else {\n            shares = min(\n                (amount0 * totalSupply) / reserve0,\n                (amount1 * totalSupply) / reserve1\n            );\n        }\n\n        require(shares > 0, \"Shares = 0\");\n        _mint(msg.sender, shares);\n        _update(\n            token0.balanceOf(address(this)),\n            token1.balanceOf(address(this))\n        );\n\n        emit Mint(msg.sender, shares);\n    }\n\n    function removeLiquidity(uint256 shares) external returns (uint256 amount0, uint256 amount1) {\n        uint256 bal0 = token0.balanceOf(address(this));\n        uint256 bal1 = token1.balanceOf(address(this));\n\n        amount0 = (shares * bal0) / totalSupply;\n        amount1 = (shares * bal1) / totalSupply;\n\n        require(amount0 > 0 && amount1 > 0, \"Amount0 or amount1 = 0\");\n\n        _burn(msg.sender, shares);\n        _update(bal0 - amount0, bal1 - amount1);\n\n        token0.transfer(msg.sender, amount0);\n        token1.transfer(msg.sender, amount1);\n\n        emit Burn(msg.sender, shares);\n    }\n\n    function swap(address tokenIn, uint256 amountIn) external returns (uint256 amountOut) {\n        require(tokenIn == address(token0) || tokenIn == address(token1), \"Invalid token\");\n\n        bool isToken0 = tokenIn == address(token0);\n        (IERC20 tokenIn_, IERC20 tokenOut, uint256 resIn, uint256 resOut) = isToken0\n            ? (token0, token1, reserve0, reserve1)\n            : (token1, token0, reserve1, reserve0);\n\n        tokenIn_.transferFrom(msg.sender, address(this), amountIn);\n\n        // 0.3% fee\n        uint256 amountInWithFee = (amountIn * 997) / 1000;\n        amountOut = (resOut * amountInWithFee) / (resIn + amountInWithFee);\n\n        tokenOut.transfer(msg.sender, amountOut);\n\n        _update(\n            token0.balanceOf(address(this)),\n            token1.balanceOf(address(this))\n        );\n\n        emit Swap(msg.sender, isToken0 ? amountIn : 0, isToken0 ? 0 : amountIn, isToken0 ? 0 : amountOut, isToken0 ? amountOut : 0);\n    }\n\n    function _mint(address to, uint256 amount) private {\n        balanceOf[to] += amount;\n        totalSupply += amount;\n    }\n\n    function _burn(address from, uint256 amount) private {\n        balanceOf[from] -= amount;\n        totalSupply -= amount;\n    }\n\n    function _update(uint256 res0, uint256 res1) private {\n        reserve0 = res0;\n        reserve1 = res1;\n    }\n\n    function sqrt(uint256 y) private pure returns (uint256 z) {\n        if (y > 3) {\n            z = y;\n            uint256 x = y / 2 + 1;\n            while (x < z) {\n                z = x;\n                x = (y / x + x) / 2;\n            }\n        } else if (y != 0) {\n            z = 1;\n        }\n    }\n\n    function min(uint256 x, uint256 y) private pure returns (uint256) {\n        return x <= y ? x : y;\n    }\n}\n```\n\n## Governance Token\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract GovernanceToken is ERC20Votes, Ownable {\n    constructor() ERC20(\"Governance Token\", \"GOV\") ERC20Permit(\"Governance Token\") {\n        _mint(msg.sender, 1000000 * 10**decimals());\n    }\n\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal override(ERC20Votes) {\n        super._afterTokenTransfer(from, to, amount);\n    }\n\n    function _mint(address to, uint256 amount) internal override(ERC20Votes) {\n        super._mint(to, amount);\n    }\n\n    function _burn(address account, uint256 amount) internal override(ERC20Votes) {\n        super._burn(account, amount);\n    }\n}\n\ncontract Governor is Ownable {\n    GovernanceToken public governanceToken;\n\n    struct Proposal {\n        uint256 id;\n        address proposer;\n        string description;\n        uint256 forVotes;\n        uint256 againstVotes;\n        uint256 startBlock;\n        uint256 endBlock;\n        bool executed;\n        mapping(address => bool) hasVoted;\n    }\n\n    uint256 public proposalCount;\n    mapping(uint256 => Proposal) public proposals;\n\n    uint256 public votingPeriod = 17280; // ~3 days in blocks\n    uint256 public proposalThreshold = 100000 * 10**18;\n\n    event ProposalCreated(uint256 indexed proposalId, address proposer, string description);\n    event VoteCast(address indexed voter, uint256 indexed proposalId, bool support, uint256 weight);\n    event ProposalExecuted(uint256 indexed proposalId);\n\n    constructor(address _governanceToken) {\n        governanceToken = GovernanceToken(_governanceToken);\n    }\n\n    function propose(string memory description) external returns (uint256) {\n        require(\n            governanceToken.getPastVotes(msg.sender, block.number - 1) >= proposalThreshold,\n            \"Proposer votes below threshold\"\n        );\n\n        proposalCount++;\n        Proposal storage newProposal = proposals[proposalCount];\n        newProposal.id = proposalCount;\n        newProposal.proposer = msg.sender;\n        newProposal.description = description;\n        newProposal.startBlock = block.number;\n        newProposal.endBlock = block.number + votingPeriod;\n\n        emit ProposalCreated(proposalCount, msg.sender, description);\n        return proposalCount;\n    }\n\n    function vote(uint256 proposalId, bool support) external {\n        Proposal storage proposal = proposals[proposalId];\n        require(block.number >= proposal.startBlock, \"Voting not started\");\n        require(block.number <= proposal.endBlock, \"Voting ended\");\n        require(!proposal.hasVoted[msg.sender], \"Already voted\");\n\n        uint256 weight = governanceToken.getPastVotes(msg.sender, proposal.startBlock);\n        require(weight > 0, \"No voting power\");\n\n        proposal.hasVoted[msg.sender] = true;\n\n        if (support) {\n            proposal.forVotes += weight;\n        } else {\n            proposal.againstVotes += weight;\n        }\n\n        emit VoteCast(msg.sender, proposalId, support, weight);\n    }\n\n    function execute(uint256 proposalId) external {\n        Proposal storage proposal = proposals[proposalId];\n        require(block.number > proposal.endBlock, \"Voting not ended\");\n        require(!proposal.executed, \"Already executed\");\n        require(proposal.forVotes > proposal.againstVotes, \"Proposal failed\");\n\n        proposal.executed = true;\n\n        // Execute proposal logic here\n\n        emit ProposalExecuted(proposalId);\n    }\n}\n```\n\n## Flash Loan\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IFlashLoanReceiver {\n    function executeOperation(\n        address asset,\n        uint256 amount,\n        uint256 fee,\n        bytes calldata params\n    ) external returns (bool);\n}\n\ncontract FlashLoanProvider {\n    IERC20 public token;\n    uint256 public feePercentage = 9; // 0.09% fee\n\n    event FlashLoan(address indexed borrower, uint256 amount, uint256 fee);\n\n    constructor(address _token) {\n        token = IERC20(_token);\n    }\n\n    function flashLoan(\n        address receiver,\n        uint256 amount,\n        bytes calldata params\n    ) external {\n        uint256 balanceBefore = token.balanceOf(address(this));\n        require(balanceBefore >= amount, \"Insufficient liquidity\");\n\n        uint256 fee = (amount * feePercentage) / 10000;\n\n        // Send tokens to receiver\n        token.transfer(receiver, amount);\n\n        // Execute callback\n        require(\n            IFlashLoanReceiver(receiver).executeOperation(\n                address(token),\n                amount,\n                fee,\n                params\n            ),\n            \"Flash loan failed\"\n        );\n\n        // Verify repayment\n        uint256 balanceAfter = token.balanceOf(address(this));\n        require(balanceAfter >= balanceBefore + fee, \"Flash loan not repaid\");\n\n        emit FlashLoan(receiver, amount, fee);\n    }\n}\n\n// Example flash loan receiver\ncontract FlashLoanReceiver is IFlashLoanReceiver {\n    function executeOperation(\n        address asset,\n        uint256 amount,\n        uint256 fee,\n        bytes calldata params\n    ) external override returns (bool) {\n        // Decode params and execute arbitrage, liquidation, etc.\n        // ...\n\n        // Approve repayment\n        IERC20(asset).approve(msg.sender, amount + fee);\n\n        return true;\n    }\n}\n```\n\n## Resources\n\n- **references/staking.md**: Staking mechanics and reward distribution\n- **references/liquidity-pools.md**: AMM mathematics and pricing\n- **references/governance-tokens.md**: Governance and voting systems\n- **references/lending-protocols.md**: Lending/borrowing implementation\n- **references/flash-loans.md**: Flash loan security and use cases\n- **assets/staking-contract.sol**: Production staking template\n- **assets/amm-contract.sol**: Full AMM implementation\n- **assets/governance-token.sol**: Governance system\n- **assets/lending-protocol.sol**: Lending platform template\n\n## Best Practices\n\n1. **Use Established Libraries**: OpenZeppelin, Solmate\n2. **Test Thoroughly**: Unit tests, integration tests, fuzzing\n3. **Audit Before Launch**: Professional security audits\n4. **Start Simple**: MVP first, add features incrementally\n5. **Monitor**: Track contract health and user activity\n6. **Upgradability**: Consider proxy patterns for upgrades\n7. **Emergency Controls**: Pause mechanisms for critical issues\n\n## Common DeFi Patterns\n\n- **Time-Weighted Average Price (TWAP)**: Price oracle resistance\n- **Liquidity Mining**: Incentivize liquidity provision\n- **Vesting**: Lock tokens with gradual release\n- **Multisig**: Require multiple signatures for critical operations\n- **Timelocks**: Delay execution of governance decisions\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["defi","protocol","templates","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-defi-protocol-templates","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/defi-protocol-templates","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34831 github stars · SKILL.md body (14,758 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T06:51:02.689Z","embedding":null,"createdAt":"2026-04-18T21:35:53.717Z","updatedAt":"2026-04-24T06:51:02.689Z","lastSeenAt":"2026-04-24T06:51:02.689Z","tsv":"'0':232,248,285,288,313,316,341,344,456,472,474,519,521,525,618,620,623,627,695,945 '0.09':1037 '0.3':591 '0.8.0':140,371,723,1009 '1':681,697,880,1204 '10':744,834 '100':161 '1000':597 '10000':1078 '100000':833 '1000000':743 '17280':825 '18':835 '1e18':256,272 '2':680,691,1210 '3':674,826,1218 '4':1225 '5':1233 '6':1241 '7':1248 '9':1036 '997':596 'account':224,230,234,236,238,261,268,271,274,776,783 'action':88 'activ':1240 'add':1230 'addliquid':435 'address':172,177,182,191,198,205,211,213,223,231,260,296,392,398,405,412,424,426,446,451,480,483,502,507,546,556,559,566,588,608,611,630,642,748,750,763,775,796,811,841,847,863,1016,1041,1049,1056,1067,1092,1105,1130 'aftertokentransf':747 'againstvot':803 'alreadi':936,983 'amm':15,43,110,359,1168,1193 'amount':195,202,278,284,290,293,298,302,306,312,318,321,324,328,402,409,633,637,639,645,649,651,753,760,766,772,778,784,1019,1045,1059,1071,1076,1085,1094,1118,1133,1156 'amount0':437,448,459,464,496,509,518,522,531,536 'amount0in':416 'amount0out':420 'amount1':439,453,460,467,498,513,520,524,533,539 'amount1in':418 'amount1out':422 'amountin':549,590,595,617,621 'amountinwithfe':594,600,602 'amountout':553,598,605,624,626 'appli':80 'applic':25 'approv':1150,1154 'arbitrag':1147 'ask':1325 'asset':1017,1131,1153 'assets/amm-contract.sol':1191 'assets/governance-token.sol':1195 'assets/lending-protocol.sol':1198 'assets/staking-contract.sol':1187 'audit':1219,1224 'autom':111,360 'averag':1262 'bal0':500,511,530 'bal1':505,515,532 'balanc':185,267,291,319,356 'balanceaft':1103,1108 'balancebefor':1065,1070,1109 'balanceof':395,635,647 'best':82,1202 'block':829 'block.number':879,899,901,923,929,976 'block.timestamp':228,253 'bool':563,808,812,853,914,1027,1142 'borrow':1043 'boundari':1333 'build':22,103 'burn':404,526,541,641,774 'byte':1022,1060,1136 'callback':1087 'calldata':1023,1061,1137 'cannot':286,314 'case':1186 'clarif':1327 'clarifi':74 'clear':1300 'common':38,1256 'consid':1243 'constraint':76 'constructor':210,423,733,862,1048 'contract':28,131,147,374,728,785,1028,1124,1236 'control':1250 'creat':115 'criteria':1336 'critic':1254,1284 'day':827 'decentr':23 'decim':745 'decis':1291 'decod':1143 'defi':2,6,30,39,60,1257 'defi-protocol-templ':1 'delay':1287 'describ':1304 'descript':799,844,872,897,907 'detail':93 'develop':119 'differ':66 'distribut':108,1166 'domain':67 'earn':235,259 'els':461,692,956 'emerg':1249 'emit':299,325,348,485,540,613,903,959,996,1115 'end':932,980 'endblock':807 'environ':1316 'environment-specif':1315 'erc20':734 'erc20permit':738 'erc20votes':731,756,769,781 'establish':1206 'etc':1149 'event':189,196,203,396,403,410,836,845,857,1039 'exampl':94,1120 'execut':809,966,984,992,1086,1146,1288 'executeoper':1015,1091,1129 'exit':353 'expert':1321 'extern':279,354,440,493,550,873,916,969,1025,1063,1139 'fail':989,1099 'farm':128 'featur':1231 'fee':592,1021,1038,1047,1075,1095,1110,1119,1135,1157 'feepercentag':1035,1077 'financ':24 'first':1229 'flash':47,123,999,1097,1111,1121,1181 'flashloan':1040,1055,1116 'flashloanprovid':1029 'flashloanreceiv':1125 'forvot':801 'full':1192 'function':125,240,258,275,303,329,352,434,489,544,628,640,652,663,698,746,761,773,868,910,965,1014,1054,1128 'fuzz':1217 'getreward':330,358 'goal':75 'gov':737 'govern':16,44,116,713,735,739,1173,1196,1290 'governancetoken':729,789,791,864,865,866,867 'governancetoken.getpastvotes':877,940 'governor':786 'gradual':1277 'hasvot':813 'health':1237 'id':795 'identifi':136,367,719,1005 'ierc20':152,155,216,219,376,379,429,432,568,570,1030,1052,1152 'iflashloanreceiv':1013,1089,1127 'implement':5,109,1179,1194 'import':141,143,145,372,724,726,1010 'incentiv':1270 'includ':41 'increment':1232 'index':192,199,206,399,406,413,839,848,851,860,1042 'input':79,1330 'instruct':73 'insuffici':1072 'integr':122,1215 'interfac':1012 'intern':754,767,779 'invalid':561 'issu':1255 'istoken0':564,576,616,619,622,625 'lastupdatetim':167,227,254 'launch':126,1221 'lend':18,45,1199 'lending/borrowing':120,1178 'librari':1207 'licens':135,366,718,1004 'limit':1292 'liquid':1073,1148,1268,1271 'loan':48,124,1000,1098,1112,1122,1182 'lock':1274 'logic':994 'maker':113,362 'map':171,176,181,391,810,817 'market':112,361 'match':1301 'mathemat':1169 'mechan':1163,1252 'memori':871 'min':463,699 'mine':1269 'mint':397,475,486,629,741,762 'miss':1338 'mit':137,368,720,1006 'modifi':221 'monitor':1234 'msg.sender':282,292,295,301,310,320,323,327,334,338,343,346,350,357,445,450,476,487,527,535,538,542,587,604,615,742,878,895,906,935,941,950,961,1155 'multipl':1281 'multisig':1279 'mvp':1228 'need':64 'newpropos':889 'newproposal.description':896 'newproposal.endblock':900 'newproposal.id':892 'newproposal.proposer':894 'newproposal.startblock':898 'nonreentr':280,308,332 'open':97 'openzeppelin':1208 'openzeppelin/contracts/access/ownable.sol':146,727 'openzeppelin/contracts/security/reentrancyguard.sol':144 'openzeppelin/contracts/token/erc20/extensions/erc20votes.sol':725 'openzeppelin/contracts/token/erc20/ierc20.sol':142,373,1011 'oper':1285 'oracl':1266 'outcom':86 'output':1310 'outsid':70 'overrid':755,768,780,1140 'ownabl':151,732,788 'param':1024,1062,1096,1138,1144 'pattern':1245,1258 'paus':1251 'per':163 'permiss':1331 'platform':105,129,1200 'power':948 'practic':83,1203 'pragma':138,369,721,1007 'price':1171,1263,1265 'privat':187,634,646,658,667,704 'product':10,34,1188 'production-readi':9,33 'profession':1222 'propos':793,797,819,821,842,869,882,887,890,917,919,920,970,972,973,988,993 'proposal.againstvotes':957,987 'proposal.endblock':930,977 'proposal.executed':982,990 'proposal.forvotes':954,986 'proposal.hasvoted':934,949 'proposal.startblock':924,942 'proposalcount':816,886,891,893,905,909 'proposalcr':837,904 'proposalexecut':858,997 'proposalid':840,852,861,913,921,962,968,974,998 'proposalthreshold':832,881 'protocol':3,7,29,31,40,61,114,121 'provid':87 'provis':1272 'proxi':1244 'public':153,156,159,166,169,174,179,184,242,262,307,331,377,380,383,386,389,394,790,815,820,823,831,1031,1034 'pure':668,705 'readi':11,35 'receiv':1057,1082,1084,1090,1117,1123 'reentrancyguard':150 'references/flash-loans.md':1180 'references/governance-tokens.md':1172 'references/lending-protocols.md':1177 'references/liquidity-pools.md':1167 'references/staking.md':1161 'releas':1278 'relev':81 'removeliquid':490 'repaid':1114 'repay':1101,1151 'requir':78,96,283,311,470,517,554,876,922,928,933,943,975,981,985,1069,1088,1107,1280,1329 'res0':655,660 'res1':657,662 'reserve0':384,466,579,584,659 'reserve1':387,469,580,583,661 'resin':573,601 'resist':1267 'resourc':1160 'resources/implementation-playbook.md':98 'resout':575,599 'return':244,249,251,264,266,441,494,551,669,706,708,874,908,1026,1141,1158 'review':1322 'reward':107,162,180,209,233,273,336,337,340,342,347,351,1165 'rewardpaid':204,349 'rewardpertoken':226,241,269 'rewardpertokenstor':170,225,239,250,252 'rewardr':160,255 'rewardstoken':157,214,218,220 'rewardstoken.transfer':345 'safeti':1332 'scope':72,1303 'second':164 'secur':1183,1223 'send':1079 'share':443,457,462,471,473,477,488,492,510,514,528,543 'signatur':1282 'simpl':1227 'simpleamm':375 'skill':53,101,1295 'skill-defi-protocol-templates' 'smart':27 'solid':132,139,363,370,715,722,1001,1008 'solmat':1209 'source-sickn33' 'spdx':134,365,717,1003 'spdx-license-identifi':133,364,716,1002 'specif':1317 'sqrt':458,664 'stake':14,42,104,130,190,276,287,300,1162,1189 'stakingreward':148 'stakingtoken':154,212,215,217 'stakingtoken.transfer':322 'stakingtoken.transferfrom':294 'start':927,1226 'startblock':805 'step':89 'stop':1323 'storag':888,918,971 'string':798,843,870 'struct':792 'substitut':1313 'success':1335 'super._aftertokentransfer':757 'super._burn':782 'super._mint':770 'support':854,915,953,963 'swap':411,545,614 'system':19,118,1176,1197 'task':56,1299 'templat':4,12,32,36,62,1190,1201 'test':1211,1214,1216,1319 'thorough':1212 'threshold':885 'time':1260 'time-weight':1259 'timelock':1286 'token':117,562,714,736,740,1032,1050,1051,1053,1080,1093,1275 'token.balanceof':1066,1104 'token.transfer':1083 'token0':378,425,428,430,557,567,577,582 'token0.balanceof':479,501,607 'token0.transfer':534 'token0.transferfrom':444 'token1':381,427,431,433,560,578,581 'token1.balanceof':482,506,610 'token1.transfer':537 'token1.transferfrom':449 'tokenin':547,555,558,565,569,585 'tokenout':571 'tokenout.transfer':603 'tool':69 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'totalsuppli':188,247,257,289,317,390,455,465,468,512,516,638,650 'track':1235 'trader':414 'transferfrom':586 'treat':1308 'true':951,991,1159 'twap':1264 'uint256':158,165,168,173,178,183,186,194,201,208,245,265,277,305,335,382,385,388,393,401,408,415,417,419,421,436,438,442,491,495,497,499,504,548,552,572,574,593,632,644,654,656,665,670,677,700,702,707,752,765,777,794,800,802,804,806,814,818,822,830,838,850,855,859,875,912,938,967,1018,1020,1033,1044,1046,1058,1064,1074,1102,1132,1134 'unit':1213 'unrel':58 'updat':478,529,606,653 'updatereward':222,281,309,333 'upgrad':1242,1247 'use':20,51,99,1185,1205,1293 'user':193,200,207,1239 'userrewardpertokenpaid':175,237,270 'valid':85,1318 'verif':91 'verifi':1100 'vest':1273 'view':243,263 'vote':883,911,925,931,937,947,978,1175 'votecast':846,960 'voter':849 'votingperiod':824,902 'weight':856,939,944,955,958,964,1261 'withdraw':304,315,355 'withdrawn':197,326 'x':678,683,686,687,689,690,701,709,711 'y':666,673,676,679,688,694,703,710,712 'yield':127 'z':671,675,684,685,696","prices":[{"id":"4de92146-c6a3-45c4-9da1-1f59e5ce86b1","listingId":"d338674e-659d-4af3-959a-ef91dec76b3b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:35:53.717Z"}],"sources":[{"listingId":"d338674e-659d-4af3-959a-ef91dec76b3b","source":"github","sourceId":"sickn33/antigravity-awesome-skills/defi-protocol-templates","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/defi-protocol-templates","isPrimary":false,"firstSeenAt":"2026-04-18T21:35:53.717Z","lastSeenAt":"2026-04-24T06:51:02.689Z"}],"details":{"listingId":"d338674e-659d-4af3-959a-ef91dec76b3b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"defi-protocol-templates","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34831,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"2cc146532050559b97ff374ee545fb50e7b5f897","skill_md_path":"skills/defi-protocol-templates/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/defi-protocol-templates"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"defi-protocol-templates","description":"Implement DeFi protocols with production-ready templates for staking, AMMs, governance, and lending systems. Use when building decentralized finance applications or smart contract protocols."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/defi-protocol-templates"},"updatedAt":"2026-04-24T06:51:02.689Z"}}