개요
Stable SDK의x/bank 모듈은 기본적인 토큰 관리 기능만 제공합니다.
모든 토큰은 제한 없이 다른 계정으로 전송될 수 있으며, 사용자는 다른 계정에 토큰 전송 권한을 위임할 수 없습니다.
이러한 이유로, bank precompile 컨트랙트는 Stable SDK의 기존 x/bank 모듈 위에 추가적인 권한 부여 및 위임 기능을 제공합니다.
목차
개념
이 precompile 컨트랙트는 ERC20 표준 메서드를 제공합니다 - 전송을 위한transfer와 balanceOf, 위임을 위한 transferFrom, approve, allowance 등이 있습니다. 이러한 메서드는 컨트랙트 주소 등록 없이 직접 호출할 수 있습니다.
그러나 mint와 burn 메서드는 x/precompile 모듈에 의해 등록된 컨트랙트 주소가 화이트리스트에 포함되어야 합니다.
x/precompile 모듈의 화이트리스트에 등록하려면 거버넌스 제안이 필요합니다.
설정
컨트랙트 주소와 가스 비용은 사전 정의되어 있습니다.컨트랙트 주소
- “0x0000000000000000000000000000000000001000” - 가스 토큰
- “0x0000000000000000000000000000000000001003” - 거버넌스 토큰
메서드
mint
요청된 수량의 새로운 토큰을 발행하고 계정으로 전송합니다.
발행할 토큰의 수량은 0보다 커야 합니다.
토큰이 성공적으로 발행되고 계정으로 전송되면 PrecompiledBankMint가 발생합니다.
주의사항:
- 거버넌스 토큰 발행은 금지되어 있습니다.
- mint 메서드를 호출하는 컨트랙트는 x/precompile 모듈에 등록되어 있어야 합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| to | address | 발행된 토큰을 받을 주소 |
| amount | uint256 | 발행할 토큰의 수량 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 토큰이 성공적으로 발행되고 계정으로 전송되면 true |
burn
계정에서 요청된 수량의 토큰을 소각합니다.
소각할 토큰의 수량은 0보다 커야 합니다.
토큰이 성공적으로 소각되면 PrecompiledBankBurn이 발생합니다.
주의사항:
- 거버넌스 토큰 소각은 금지되어 있습니다.
- mint 메서드를 호출하는 컨트랙트는 x/precompile 모듈에 등록되어 있어야 합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| from | address | 토큰을 소각할 주소 |
| amount | uint256 | 소각할 토큰의 수량 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 토큰이 성공적으로 소각되면 true |
transfer
발신자로부터 수신자에게 요청된 수량의 토큰을 전송합니다.
토큰은 전송 가능하도록 설정되어 있어야 합니다. 전송할 토큰의 수량은 0보다 커야 합니다.
토큰이 성공적으로 전송되면 PrecompiledBankTransfer가 발생합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| to | address | 토큰을 받을 주소 |
| amount | uint256 | 전송할 토큰의 수량 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 토큰이 성공적으로 전송되면 true |
transferFrom
승인된 spender가 allowance 한도 내에서 소유자로부터 수신자에게 요청된 수량의 토큰을 전송합니다.
토큰은 전송 가능하도록 설정되어 있어야 합니다.
전송할 토큰의 수량은 0보다 크고 현재 allowance보다 작거나 같아야 합니다.
토큰이 성공적으로 전송되면 PrecompiledBankTransfer가 발생합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| from | address | 토큰을 전송할 주소 |
| to | address | 토큰을 받을 주소 |
| amount | uint256 | 전송할 토큰의 수량 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 토큰이 성공적으로 전송되면 true |
multiTransfer
단일 계정에서 여러 계정으로 토큰을 전송합니다.
토큰은 전송 가능하도록 설정되어 있어야 합니다.
각 수신자에게 전송할 토큰의 수량은 0보다 커야 합니다.
토큰이 성공적으로 전송되면 각 수신자마다 PrecompiledBankTransfer가 발생합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| to | address[] | 전송된 토큰을 받을 주소들 |
| amount | uint256[] | 각 수신자에게 전송할 토큰의 수량 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 모든 수신자에게 토큰이 성공적으로 전송되면 true |
approve
spender가 소유자의 계정에서 토큰을 전송할 수 있도록 승인합니다.
승인할 토큰의 수량은 0보다 커야 합니다.
승인이 성공적으로 설정되면 PrecompiledBankApproval이 발생합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| spender | address | 승인할 주소 |
| value | uint256 | 승인할 토큰의 수량 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 승인이 성공적으로 설정되면 true |
revoke
소유자로부터 토큰을 전송할 수 있는 spender의 승인을 취소합니다.
승인이 성공적으로 취소되면 PrecompiledBankRevoke가 발생합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| spender | address | 취소할 주소 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| success | bool | 승인이 성공적으로 취소되면 true |
balanceOf
계정의 토큰 잔액을 반환합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| account | address | 토큰 잔액을 조회할 주소 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| balance | uint256 | 계정의 토큰 수량 |
totalSupply
토큰의 총 공급량을 반환합니다.
입력
없음출력
| 이름 | 타입 | 설명 |
|---|---|---|
| totalSupply | uint256 | 토큰의 총 수량 |
allowance
spender가 owner로부터 여전히 인출할 수 있는 수량을 반환합니다.
입력
| 이름 | 타입 | 설명 |
|---|---|---|
| owner | address | 소유자의 주소 |
| spender | address | spender의 주소 |
출력
| 이름 | 타입 | 설명 |
|---|---|---|
| amount | uint256 | 승인된 토큰의 수량 |
이벤트
이 precompile 컨트랙트에서 발생하는 모든 이벤트는PrecompiledBank 접두사가 붙습니다.
모호함을 피하기 위해, 이 precompile 컨트랙트를 호출하는 토큰 컨트랙트는 동일한 접두사를 가진 이벤트 이름 사용을 피해야 합니다.
PrecompiledBankMint
| 이름 | 타입 | 인덱싱 | 설명 |
|---|---|---|---|
| from | address | Y | 토큰을 발행한 주소 |
| to | address | Y | 발행된 토큰을 받을 주소 |
| amount | uint256 | N | 발행된 토큰의 수량 |
PrecompiledBankBurn
| 이름 | 타입 | 인덱싱 | 설명 |
|---|---|---|---|
| from | address | Y | 토큰을 소각한 주소 |
| to | address | Y | 이 메서드에서는 사용되지 않음 |
| amount | uint256 | N | 소각된 토큰의 수량 |
PrecompiledBankTransfer
| 이름 | 타입 | 인덱싱 | 설명 |
|---|---|---|---|
| from | address | Y | 토큰을 전송한 주소 |
| to | address | Y | 전송된 토큰을 받을 주소 |
| amount | uint256 | N | 전송된 토큰의 수량 |
PrecompiledBankApproval
| 이름 | 타입 | 인덱싱 | 설명 |
|---|---|---|---|
| owner | address | Y | 토큰을 승인한 주소 |
| spender | address | Y | 승인할 주소 |
| value | uint256 | N | 승인된 토큰의 수량 |
PrecompiledBankRevoke
| 이름 | 타입 | 인덱싱 | 설명 |
|---|---|---|---|
| owner | address | Y | 토큰을 취소한 주소 |
| spender | address | Y | 취소할 주소 |
| value | uint256 | N | 승인된 토큰의 수량 |

