아래 버튼을 클릭하면 오픈소스 컨트랙트 저장소를 확인할 수 있습니다.
구조체
SpendPermission
지출 권한의 전체 파라미터를 정의합니다.
SpendPermission 구조체의 필드는 아래 정의된 순서를 정확히 따라야 합니다.
| 필드 | 타입 | 설명 |
|---|
account | address | 이 지출 권한이 유효한 스마트 계정입니다. |
spender | address | account의 토큰을 지출할 수 있는 주체입니다. |
token | address | 토큰 주소입니다. ERC-7528 네이티브 토큰 주소 또는 ERC-20 컨트랙트 주소를 사용합니다. |
allowance | uint160 | 각 period 동안 지출할 수 있는 최대 한도입니다. |
period | uint48 | 사용된 allowance를 주기적으로 초기화하는 시간 길이입니다. 단위는 초입니다. |
start | uint48 | 이 지출 권한이 유효해지는 시작 시각입니다. Unix 초 단위를 사용합니다. |
end | uint48 | 이 지출 권한이 유효한 종료 시각입니다. Unix 초 단위를 사용합니다. |
salt | uint256 | 나머지 데이터가 같더라도 서로 다른 지출 권한을 구분하기 위한 임의 salt 값입니다. |
extraData | bytes | 권한에 포함할 임의 데이터입니다. |
PeriodSpend
현재 활성 기간 동안 누적된 지출량을 설명합니다.
| 필드 | 타입 | 설명 |
|---|
start | uint48 | 기간 시작 시각입니다. Unix 초 단위를 사용합니다. |
end | uint48 | 기간 종료 시각입니다. Unix 초 단위를 사용합니다. |
spend | uint160 | 해당 기간 동안 누적된 지출 금액입니다. |
컨트랙트 함수
approve
account에서 직접 호출해 지출 권한을 승인합니다. SpendPermission에 지정된 account만 호출할 수 있습니다.
function approve(SpendPermission calldata spendPermission) external;
approveWithSignature
account 소유자의 서명으로 지출 권한을 승인합니다. 필요 시 자동 계정 생성을 지원하는 ERC-6492 서명과 호환됩니다.
function approveWithSignature(SpendPermission calldata spendPermission, bytes calldata signature) external;
spend
지출 권한을 사용해 account에서 spender로 토큰을 전송합니다. 권한에 지정된 spender만 호출할 수 있습니다.
function spend(SpendPermission memory spendPermission, uint160 value) external;
revoke
지출 권한을 영구적으로 비활성화합니다. 권한에 지정된 account만 호출할 수 있습니다.
function revoke(SpendPermission calldata spendPermission) external;
revokeAsSpender
지출 권한을 영구적으로 비활성화합니다. 권한에 지정된 spender만 호출할 수 있습니다.
function revokeAsSpender(SpendPermission calldata spendPermission) external;
getHash
EIP-712에 따라 서명용 SpendPermission 구조체 해시를 생성합니다.
function getHash(SpendPermission memory spendPermission) public view returns (bytes32);
isApproved
현재 시간이 권한의 유효 기간 안에 있는지와 무관하게, 해당 지출 권한이 승인되었는지 확인합니다.
function isApproved(SpendPermission memory spendPermission) public view returns (bool);
isRevoked
현재 시간이 권한의 유효 기간 안에 있는지와 무관하게, 해당 지출 권한이 철회되었는지 확인합니다.
function isRevoked(SpendPermission memory spendPermission) public view returns (bool);
isValid
현재 시간이 권한의 유효 기간 안에 있는지와 무관하게, 해당 지출 권한이 승인되었고 철회되지 않았는지 확인합니다.
function isValid(SpendPermission memory spendPermission) public view returns (bool);
getLastUpdatedPeriod
지출 권한의 마지막으로 갱신된 기간에 대한 start, end, 누적 spend 값을 조회합니다.
function getLastUpdatedPeriod(SpendPermission memory spendPermission) public view returns (PeriodSpend memory);
getCurrentPeriod
현재 기간에 대한 start, end, 누적 spend 값을 조회합니다. 현재 시간이 권한의 유효 기간 밖이면 revert되지만, 지출 권한이 승인되었는지 또는 철회되었는지는 검사하지 않습니다.
function getCurrentPeriod(SpendPermission memory spendPermission) public view returns (PeriodSpend memory);