-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverify.py
More file actions
52 lines (40 loc) · 1.42 KB
/
verify.py
File metadata and controls
52 lines (40 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""
x402 결제 검증
"""
import logging
from typing import Optional
from eth_account import Account
from eth_account.messages import encode_defunct
logger = logging.getLogger(__name__)
def verify_x402(signature: str, message: Optional[str] = None) -> bool:
"""
x402 결제 서명 검증 (최소 버전 - 해커톤용)
실제 서비스에서는:
- asset, amount, nonce, expiresAt 등도 함께 검증
- 서명 메시지에 모든 결제 정보 포함
- nonce 재사용 방지 체크
Args:
signature: 서명 문자열 (hex)
message: 검증할 메시지 (기본값: "x402-payment")
Returns:
bool: 검증 성공 여부
"""
try:
if not signature:
return False
# 기본 메시지
if message is None:
message = "x402-payment"
# 메시지 인코딩
encoded_message = encode_defunct(text=message)
# 서명에서 주소 복구
recovered_address = Account.recover_message(encoded_message, signature=signature)
if recovered_address:
logger.info(f"x402 검증 성공: {recovered_address}")
return True
else:
logger.warning("x402 검증 실패: 주소 복구 불가")
return False
except Exception as e:
logger.error(f"x402 검증 중 에러: {str(e)}")
return False