Was macht solidity-security?
Meistere die Best Practices für Smart-Contract-Sicherheit, um häufige Schwachstellen zu vermeiden und sichere Solidity-Muster zu implementieren. Verwende dies beim Schreiben von Smart Contracts, beim Auditieren bestehender Verträge oder bei der Implementierung von Sicherheitsmaßnahmen für Blockchain-Anwendungen.
Überblick
Diese Fähigkeit hilft Entwicklern, Sichere Smart Contracts zu erstellen, indem sie sich auf die wichtigsten Sicherheitsprinzipien konzentriert:
- Prävention von Schwachstellen: Vermeidung von Reentrancy, Integer-Überläufen, unbefugtem Zugriff, Frontrunning und anderen häufigen Angriffen.
- Sichere Muster: Implementierung von Checks-Effects-Interactions, Pull-over-Push-Zahlungen und Zugriffskontrollen.
- Audit-Tools: Nutzung von statischen Analysewerkzeugen wie Slither und MythX für automatisierte Sicherheitsprüfungen.
- Bewährte Bibliotheken: Einsatz von OpenZeppelin Contracts für sichere Implementierungen von ERC20, ERC721 und Zugriffssteuerung.
Plattformen
Diese Fähigkeit wurde für die Verwendung mit den folgenden KI-Agenten und Entwicklungsumgebungen entwickelt:
- Claude Code – Ideal für Architektur- und Code-Reviews mit Schwerpunkt Sicherheit.
- Cursor – Nutzt die KI-Integration für Echtzeit-Sicherheitswarnungen während des Schreibens.
- Codex – Automatisiert Sicherheitsprüfungen in CI/CD-Pipelines.
- Remix, Hardhat, Foundry – Alle Frameworks werden für die Integration von Sicherheitstools unterstützt.
Beispiel-Workflow
Neuen sicheren Vertrag erstellen
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract SafeVault is Ownable, ReentrancyGuard {
mapping(address => uint256) private balances;
event Deposited(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
function deposit() external payable {
require(msg.value > 0, "Betrag muss größer als 0 sein");
balances[msg.sender] += msg.value;
emit Deposited(msg.sender, msg.value);
}
function withdraw(uint256 _amount) external nonReentrant {
require(balances[msg.sender] >= _amount, "Nicht genügend Guthaben");
balances[msg.sender] -= _amount;
// Checks-Effects-Interactions: Guthaben wird vor dem externen Aufruf aktualisiert
(bool sent, ) = msg.sender.call{value: _amount}("");
require(sent, "Senden fehlgeschlagen");
emit Withdrawn(msg.sender, _amount);
}
function getBalance(address _user) external view returns (uint256) {
return balances[_user];
}
}
Audit-Checkliste
| Kategorie | Prüfung | Status |
|---|---|---|
| Reentrancy | Ist nonReentrant auf allen externen Funktionen? | ☐ |
| Arithmetik | Werden SafeMath oder Solidity 0.8+ verwendet? | ☐ |
| Zugriffskontrolle | Sind sensible Funktionen geschützt? (OnlyOwner, etc.) | ☐ |
| Aufrufe | Werden externe Aufrufe nach Zustandsänderungen vermieden? | ☐ |
| Fallback | Ist die Fallback-Funktion minimal und sicher? | ☐ |
| Selfdestruct | Ist Selfdestruct blockiert oder kontrolliert? | ☐ |