
proxy-patterns
by IvanTorresEdge
SKILL.md
name: proxy-patterns description: Proxy patterns for upgradeable smart contracts. Use when implementing or reviewing upgradeable contracts.
Proxy Patterns Skill
Reference skill for proxy patterns in Solidity. Detailed proxy implementations are covered in the contract-patterns skill.
When to Use
Use this skill when:
- Implementing upgradeable contracts
- Choosing proxy pattern
- Understanding proxy mechanics
- Reviewing upgrade implementations
Related Skills
For detailed proxy implementations, see:
- contract-patterns:
patterns/upgradeable-contracts.md - upgrade-safety: Safe upgrade practices
- security-audit:
checklists/upgrade-checklist.md
Proxy Pattern Overview
Pattern Comparison
| Pattern | Upgrade Location | Best For | Complexity |
|---|---|---|---|
| UUPS | Implementation | Most cases | Medium |
| Transparent | Proxy | Admin separation | Low |
| Beacon | Beacon contract | Multiple instances | High |
| Diamond | Facet contracts | Large contracts | Very High |
UUPS (Universal Upgradeable Proxy Standard)
Recommended for most use cases
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
contract MyContract is UUPSUpgradeable, OwnableUpgradeable {
constructor() {
_disableInitializers();
}
function initialize() public initializer {
__Ownable_init(msg.sender);
__UUPSUpgradeable_init();
}
function _authorizeUpgrade(address) internal override onlyOwner {}
}
Pros:
- Gas efficient
- Flexible upgrade authorization
- Smaller proxy contract
Cons:
- Can brick if _authorizeUpgrade removed
- More complex implementation
Detailed documentation: See contract-patterns/patterns/upgradeable-contracts.md
Transparent Proxy
Use when admin/user separation is critical
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
// Deploy
TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(
implementationAddress,
adminAddress,
initData
);
Pros:
- Clear admin/user separation
- Admin cannot call implementation functions
- Battle-tested pattern
Cons:
- Higher gas costs
- Larger proxy contract
Detailed documentation: See contract-patterns/patterns/upgradeable-contracts.md
Beacon Proxy
Use for multiple instances sharing implementation
import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol";
// Deploy beacon
UpgradeableBeacon beacon = new UpgradeableBeacon(implementationAddress);
// Deploy proxies
BeaconProxy proxy1 = new BeaconProxy(address(beacon), initData);
BeaconProxy proxy2 = new BeaconProxy(address(beacon), initData);
// Upgrade all
beacon.upgradeTo(newImplementation);
Pros:
- Upgrade multiple contracts at once
- Gas efficient for many instances
- Centralized control
Cons:
- All instances upgrade together
- Additional beacon contract
Detailed documentation: See contract-patterns/patterns/upgradeable-contracts.md
Diamond Pattern (EIP-2535)
Use for contracts exceeding size limits
Complex pattern with multiple facets. See EIP-2535 for specification.
Storage Layout Rules
Critical for all proxy patterns:
// V1
contract V1 {
uint256 public value;
address public owner;
}
// V2 - ✅ Safe upgrade
contract V2 {
uint256 public value; // Same position
address public owner; // Same position
uint256 public newValue; // Added at end
}
// V2 - ❌ Unsafe upgrade
contract V2Bad {
address public owner; // ❌ Changed position
uint256 public value; // ❌ Changed position
}
Rules:
- Never delete state variables
- Never change types
- Never change order
- Only add at the end
- Use storage gaps in base contracts
Quick Pattern Selection
Choose UUPS if:
- You want gas efficiency
- You need flexible upgrade control
- You're comfortable with the pattern
Choose Transparent if:
- You need strict admin/user separation
- Gas cost is less critical
- You want simplicity
Choose Beacon if:
- Deploying many similar contracts
- Need to upgrade all together
- Want centralized upgrade control
Choose Diamond if:
- Contract exceeds 24KB limit
- Need modular functionality
- Comfortable with complexity
Related Documentation
- Implementation examples:
contract-patterns/patterns/upgradeable-contracts.md - Security checklist:
security-audit/checklists/upgrade-checklist.md - Upgrade safety:
upgrade-safety/SKILL.md - Example contract:
contract-patterns/examples/upgradeable-example.sol
Note: This is a reference skill. For detailed implementations and examples, see the contract-patterns skill.
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です