PERIODIC_VOLUME_POLICY
리셋 주기(24h, 30d 등)에 걸쳐 denom별 누적 트랜잭션 금액 한도를 적용합니다.
설정된 리셋 주기에 걸쳐 발신자별 denom별 누적 트랜잭션 금액을 추적하고, 누적 합계가 한도를 넘는 트랜잭션을 거절합니다. 각 트랜잭션을 독립적으로 검사하는 VOLUME_POLICY와는 구별됩니다. 일/월 전송 상한 및 Travel Rule 스타일 임계값에 사용합니다.
Solidity struct + ABI
IPcl.sol에서:struct UnitPeriodicVolumePolicy {
uint256 maxAmount; // 리셋 주기당 최대 총 금액
uint64 resetPeriodSeconds; // 주기 길이 (초, 예: 24h은 86400)
}
struct PeriodicVolumePolicy {
string[] tokens; // denom 이름, 예: "aokrw"
UnitPeriodicVolumePolicy[] limits; // 병렬 배열 — limits[i]가 tokens[i]에 적용
} ABI 튜플 약칭:
(string[] tokens, (uint256 maxAmount, uint64 resetPeriodSeconds)[] limits).PolicySet.policy용 인코딩:UnitPeriodicVolumePolicy[] memory limits = new UnitPeriodicVolumePolicy[](1);
limits[0] = UnitPeriodicVolumePolicy({
maxAmount: 1_000_000 ether, // 주기당 1,000,000 OKRW (aokrw 단위)
resetPeriodSeconds: 86_400 // 24h
});
string[] memory toks = new string[](1);
toks[0] = "aokrw";
PeriodicVolumePolicy memory pvp = PeriodicVolumePolicy({
tokens: toks,
limits: limits
});
bytes memory policyBytes = abi.encode(pvp); 정책 평가 방식
전송되는 각 토큰에 대해 PCL은 (스코프, 발신자, denom)별
PeriodicVolume 누적자를 유지합니다.struct PeriodicVolume {
uint256 amount; // 현재 주기 누적 금액
uint256 maxAmount; // 정책 한도
uint64 resetPeriodSeconds; // 주기 길이 (초)
uint64 resetAt; // 현재 주기가 끝나는 unix timestamp
} 흐름은 다음과 같습니다.
1.
2.
3. 그 외에는 입장이 허용되고
누적자는 발신자별로 관리되며, 여러 수신자에게 보내더라도 카운터가 분리되지 않습니다.
1.
block.timestamp >= resetAt이면 amount = 0으로 리셋하고 resetAt을 진행합니다.2.
amount + value > maxAmount이면 거절됩니다(ExceededPeriodicVolume).3. 그 외에는 입장이 허용되고
value를 amount에 누적합니다.누적자는 발신자별로 관리되며, 여러 수신자에게 보내더라도 카운터가 분리되지 않습니다.
globalPeriodicVolume(user, asset) 또는 contractPeriodicVolume(contract, user, selector, asset)로 누적자를 조회합니다.거절 시 발생하는 ReasonCode
ExceededPeriodicVolume(uint256 maxLimit, uint256 value, uint256 resetAt) — 지갑 UX는 "일/월 한도 도달; <resetAt>에 초기화" 표시. resetAt 필드는 unix timestamp이므로 사용자 로케일로 렌더.주요 활용 사례
- Travel Rule 스타일 임계값을 적용합니다(예: 미인증 사용자에
maxAmount: 1,000,000 OKRW per 24h). - 사기 방지 / 속도 한도로 사용합니다(예: 핫 지갑을 30d당 10 M OKRW로 상한 적용해 침해를 더 빨리 포착합니다).
EAS_POLICY와 결합합니다. EAS 조건부 변형OKRW_EAS_PERIODIC_VOLUME_LIMIT_POLICY는 인증 vs 미인증 사용자에게 다른 한도를 적용할 수 있어, 더 일반적인 프로덕션 설정입니다.