아비트럼(ARB)
아비트럼 지갑 구조
아비트럼 지갑은 다음과 같이 구성되어 있습니다.
- 대표주소
- 수수료주소
- 자식주소
TIP 수수료주소는 토큰 집금 시 필요한 수수료(ETH)를 자식주소에 충전할 때 사용합니다.수수료주소는 중앙화 지갑에서 토큰 집금 시 필요한 수수료(ETH)를 자식주소에 충전할 때 사용하거나, 필요에 따라 수수료(ETH)를 자식주소에 충전할 때 사용합니다.
입금
입금 상태
외부에서 보낸 자산이 대표주소나 자식주소에 도착하면 옥텟은 이를 입금으로 인식합니다. 단, 입금 트랜잭션이 블록에 포함되었더라도 입금을 완료로 처리하지 않습니다. 트랜잭션의 완결성을 보장하기 위해 추가로 블록이 생성되어야 해당 트랜잭션을 완료(FINALIZED)로 처리합니다. 외부에서 자산을 보냈으나 대표주소나 자식주소에 도착하지 않았다면 해당 트랜잭션은 인식되지 않습니다. 따라서 입금 트랜잭션에는 실패(FAILED) 상태가 없습니다.
| 상태명 | 내용 |
|---|---|
UNFINALIZED | 입금 트랜잭션이 블록에 포함된 상태 |
FINALIZED | 입금 트랜잭션이 블록에 포함된 뒤 다음 블록이 생성된 상태 |
집금
집금은 중앙화 지갑에서만 가능합니다.
집금 과정 및 수수료
자식주소에 보관된 자산은 집금을 요청하기 전까지는 대표주소로 이동하지 않습니다. 따라서 대표주소의 잔액이 부족하지 않도록 주기적으로 집금을 진행해야 합니다.
특정 자산의 집금을 요청하면 모든 자식주소에 보관된 ETH 또는 토큰이 대표주소로 이동합니다. 이때 자식주소 당 트랜잭션이 1개씩 발생합니다. 예를 들어 자식주소 10개에 ETH가 보관되어 있다면 총 10개의 트랜잭션이 발생하게 됩니다.
1. ETH 집금
ETH 집금 수수료는 트랜잭션 당 1회씩 발생하며, 집금할 자산에서 차감됩니다. 집금할 자산이 예상 수수료보다 적은 자식주소에서는 집금이 진행되지 않습니다. 집금 진행 과정은 다음과 같습니다.
- 집금을 요청합니다.
- 집금을 실행할 자식주소 별 트랜잭션을 생성합니다.
- 최적 수수료를 계산한 뒤 트랜잭션을 전파합니다.
- 트랜잭션이 블록에 반영되면 집금이 완료됩니다.
2. 토큰 집금
토큰 집금 수수료는 트랜잭션 당 1회씩 발생합니다. 이때 자식주소에 수수료로 지불할 ETH가 없다면 수수료주소에서 자식주소로 ETH를 충전해줍니다. 이 과정에서도 수수료(수수료 충전 비용)가 발생합니다. 자식주소는 전송받은 ETH를 수수료로 지불하고 집금을 진행합니다. 집금 진행 과정은 다음과 같습니다.
- 집금을 요청합니다.
- 집금 수수료로 사용할 ETH를 수수료주소에서 자식주소로 충전합니다.
- 집금을 실행할 자식주소 별 트랜잭션을 생성합니다.
- 최적 수수료를 계산한 뒤 트랜잭션을 전파합니다.
- 트랜잭션이 블록에 반영되면 집금이 완료됩니다.
집금 상태
집금 상태는 집금 과정에 따라 7가지로 구분됩니다. 자식주소에 보관된 자산은 집금 대기(AWAITING_GATHERING) 상태입니다.
집금 요청 시 수수료 충전이 필요하다면 자산의 상태가 수수료 충전 대기 중(AWAITING_FEE_INJECTION)으로 변경됩니다. 수수료 충전 트랜잭션이 생성되면 자산의 상태가 수수료 충전 중(FEE_INJECTING)으로 변경됩니다. 수수료 충전을 실패한 경우 자산의 상태가 수수료 충전 실패(FEE_INJECTION_FAILED) 처리됩니다.
수수료 충전을 성공하여 집금 트랜잭션이 생성되면 자산의 상태가 집금 중(GATHERING)으로 변경됩니다. 해당 트랜잭션이 블록에 포함되면 자산의 상태가 집금 완료(COMPLETED) 처리되며 집금이 완료됩니다.
집금을 시도했으나 트랜잭션이 실패한 경우 자산의 상태가 집금 실패(GATHERING_FAILED) 상태로 남게 됩니다. 수수료 충전 실패 및 집금 실패 상태인 자산은 다시 집금 대상에 포함됩니다. 집금을 시도했으나 수수료가 부족하여 트랜잭션이 생성되지 못한 경우 집금 대기(AWAITING_GATHERING) 상태로 남게 됩니다.
| 상태명 | 내용 |
|---|---|
AWAITING_GATHERING | 집금 대기 중 |
AWAITING_FEE_INJECTION | 수수료 충전 대기 중 |
FEE_INJECTING | 수수료 충전 중 |
FEE_INJECTION_FAILED | 수수료 충전 실패 |
GATHERING | 집금 트랜잭션 생성 |
COMPLETED | 집금 트랜잭션 완료 |
GATHERING_FAILED | 집금 트랜잭션 실패 |
출금
출금 상태
입금과는 달리 출금은 트랜잭션이 블록에 포함된 즉시 출금 완료(FINALIZED) 처리됩니다.
| 상태명 | 내용 |
|---|---|
AWAITING_DECISION | 출금 승인 대기 중인 상태 |
REJECTED | 출금이 거절된 상태 |
AWAITING_WITHDRAWAL | 출금이 승인되어 출금 대기 중인 상태 |
PENDING | 출금 트랜잭션이 생성된 상태 |
FINALIZED | 출금 트랜잭션이 블록에 포함된 상태 |
FAILED | 출금 트랜잭션이 실패한 상태 |
잔액 조회 기준
주소 잔액 조회 API를 호출하면 특정 주소에 보관된 자산의 잔액을 확인할 수 있습니다. 이때 조회되는 잔액은 총 잔액(Total Balance)과 사용 가능 잔액(Liquid Balance)으로 나누어집니다.
- 총 잔액은 confirmation이 1 이상인 모든 자산을 의미합니다.
- 사용 가능 잔액은 집금 또는 출금 가능한 자산을 의미합니다. 자식주소의 사용 가능 잔액은 집금 가능한 자산을 의미하며, 대표주소의 사용 가능 잔액은 출금 가능한 자산을 의미합니다.
수수료
예상 수수료
예상 수수료는 가스 단가와 가스 한도를 곱하여 계산합니다.
예상 수수료 = 가스 한도(Gas Limit) x 가스 단가(Max Fee Per Gas)
- 일반적으로는 Gas Limit에 고정된 값을 사용하는 것과는 달리, 아비트럼에서는 변동되는 값을 사용합니다.
- Max Fee Per Gas는 가스 당 수수료의 최댓값입니다. 수수료 조회 API를 호출하여 이 값을 조회할 수 있습니다. 실제 가스 당 수수료는 이보다 작을 수 있습니다.
트랜잭션 수수료
트랜잭션에 사용된 수수료는 가스 단가와 사용한 가스의 양을 곱하여 계산합니다.
트랜잭션 수수료 = 총 가스 사용량(Usage by Txn) x 가스 단가(Gas Price)
Updated 8 days ago