메시지
이 섹션에서는 tokenfactory 메시지의 처리와 해당 상태 업데이트에 대해 설명합니다.메시지
CreateDenom
denom 생성자 주소, subdenom 및 관련 메타데이터(name, symbol, decimals)가 주어지면factory/{creator address}/{subdenom} 형식의 denom을 생성합니다. Subdenom은 [a-zA-Z0-9./]를 포함할 수 있습니다.
allow_admin_burn을 true로 설정하면 admin이 다른 주소에서 토큰을 소각할 수 있습니다.
Params에 설정된 denom 생성 수수료를 생성자 주소에서 커뮤니티 풀로 전송합니다.- bank keeper를 통해
DenomMetaData를 설정합니다. - 생성된 denom
factory/{creator address}/{subdenom}의 admin을 저장하기 위해 해당 denom에 대한AuthorityMetadata를 설정합니다. Admin은 자동으로 Msg 발신자로 설정됩니다. - 생성자별로 생성된 denom의 상태를 유지하는
CreatorPrefixStore에 denom을 추가합니다.
Mint
특정 denom의 발행은 현재 admin에게만 허용됩니다. 현재 admin은 기본적으로 denom의 생성자로 설정됩니다.- 다음 안전 검사 수행
- denom 발행이
tokenfactory모듈을 통해 생성되었는지 확인 - 메시지 발신자가 denom의 admin인지 확인
- denom 발행이
bank모듈을 통해 해당 denom에 대해 지정된 양의 토큰 발행
Burn
특정 denom의 소각은 현재 admin에게만 허용됩니다. 현재 admin은 기본적으로 denom의 생성자로 설정됩니다.- 다음 안전 검사 수행
- denom 발행이
tokenfactory모듈을 통해 생성되었는지 확인 - 메시지 발신자가 denom의 admin인지 확인
- denom 발행이
bank모듈을 통해 해당 denom에 대해 지정된 양의 토큰 소각
ChangeAdmin
denom의 admin을 변경합니다. 이는 denom의 현재 admin만 호출할 수 있습니다. admin 주소가 zero address로 설정된 후에도 토큰 보유자는 자신이 보유한 토큰에 대해MsgBurn을 실행할 수 있습니다.
SetDenomMetadata
특정 denom의 메타데이터 설정은 해당 denom의 admin에게만 허용됩니다. bank 모듈에서 denom 메타데이터를 덮어쓸 수 있습니다. admin은 활성화된 경우 admin burn 기능을 비활성화할 수도 있습니다.- 메시지 발신자가 denom의 admin인지 확인
- denom의 admin을 변경하고 admin burn 기능을 잠재적으로 비활성화하기 위해
AuthorityMetadata상태 항목 수정
체인에서의 기대사항
체인의 주소에 대한 bech32 접두사는 최대 16자까지 가능합니다. 이는 SDK에서 적용되는 denom의 최대 길이가 128바이트이고, longest_subdenom이 44바이트로 설정된 것에서 비롯됩니다. Token factory 토큰의 denom은 다음과 같습니다:factory/{creator address}/{subdenom}
하위 구성 요소로 분리하면 다음과 같습니다:
len(factory) = 72 * len("/") = 2len(longest_subdenom)len(creator_address) = len(bech32(longest_addr_length, chain_addr_prefix)).
32바이트입니다. SDK 오류 수정 설정으로 인해 len(bech32(32, chain_addr_prefix)) = len(chain_addr_prefix) + 1 + 58이 됩니다.
이를 모두 더하면 총 길이 제약은 128 = 7 + 2 + len(longest_subdenom) + len(longest_chain_addr_prefix) + 1 + 58입니다.
따라서 len(longest_subdenom) + len(longest_chain_addr_prefix) = 128 - (7 + 2 + 1 + 58) = 60입니다.
longest_subdenom과 longest_chain_addr_prefix 사이에서 이 60바이트를 어떻게 분할할지에 대한 표준화 선택은 다소 임의적입니다.
이에 대한 고려 사항:
- BIP-0173에 따르면 32바이트 주소(‘data field’)에 대한 기술적으로 가장 긴 HRP는 31바이트입니다. (encode(data) = 59바이트, 최대 길이 = 90바이트에서 비롯됨)
- subdenom은 해시를 포함할 수 있도록 최소 32바이트여야 합니다
- 더 긴 subdenom은 사람이 읽을 수 있는 denom을 생성하는 데 매우 유용합니다
- 체인 주소는 더 짧은 것이 좋습니다. 현재까지 cosmos에서 가장 긴 HRP는 11바이트입니다. (
persistence)
len(longest_subdenom) = 44 및 len(longest_chain_addr_prefix) = 16으로 설정되어 있습니다.
SDK가 denom의 최대 길이를 128바이트에서 늘리면 이러한 제한도 증가해야 합니다.
따라서 파싱을 위해 이러한 최대 길이에 의존하는 코드를 작성하지 마십시오.