마루 주소 형식 이해하기
마루에서 사용되는 다양한 주소 형식과 그들 간의 변환 방법에 대한 안내서입니다.
사전 요구사항
- 블록체인 주소(예: 이더리움 16진수 주소)에 대한 기본적 이해
이더리움 16진수 주소
이것은 이더리움에서 사용하는 표준 42자 주소 형식으로,
예시:
0x로 시작합니다. JSON-RPC를 통해 EVM과 상호작용할 때, 솔리디티 스마트 컨트랙트 내에서, 그리고 MetaMask, Hardhat, Foundry와 같은 도구와 함께 사용됩니다.예시:
0x71C7656EC7ab88b098defB751B7401B5f6d8976F코스모스 Bech32 주소
이것은 Cosmos SDK에서 사용하는 사람이 읽을 수 있는 주소 형식입니다. 마루의 경우
예시:
maroo인 HRP(Human-Readable Part)를 포함하며, 내장된 오류 감지 기능을 제공합니다. 이 형식은 네이티브 Cosmos SDK 트랜잭션, 스테이킹, 거버넌스 및 marood 커맨드 라인 도구를 사용할 때 사용됩니다.예시:
maroo1g9aher02v4dmf49m26de25d2n0a2th8g3z4x9a 참고: 두 주소 형식 모두 동일한 기본 공개 키에서 파생됩니다. 그들은 단지 동일한 계정의 다른 문자열 표현일 뿐입니다.
형식 간 변환
종종 이러한 형식 간에 변환해야 할 필요가 있습니다. 예를 들어, 사용자는
maroo... 주소를 제공할 수 있지만, 스마트 컨트랙트는 0x... 형식이 필요할 수 있습니다. Go와 JavaScript에서 변환하는 방법은 다음과 같습니다.import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ethereum/go-ethereum/common"
)
// Bech32 to Hex
bech32Addr := "maroo1g9aher02v4dmf49m26de25d2n0a2th8g3z4x9a"
accAddr, err := sdk.AccAddressFromBech32(bech32Addr)
if err != nil { panic(err) }
hexAddr := common.BytesToAddress(accAddr.Bytes()).Hex()
// hexAddr is "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
// Hex to Bech32
hexAddrStr := "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
accAddr = common.HexToAddress(hexAddrStr).Bytes()
bech32Addr, err = sdk.Bech32ifyAddressBytes("maroo", accAddr)
if err != nil { panic(err) }
// bech32Addr is "maroo1g9aher02v4dmf49m26de25d2n0a2th8g3z4x9a" 특수 접두사
표준 계정 접두사
maroo 외에도, Cosmos SDK는 config/config.go에 설정된 대로 네트워크 내 다른 역할을 위해 다른 접두사를 정의합니다. 대부분 maroo 접두사와 상호작용하겠지만, 다른 것들도 알아두면 좋습니다:maroovaloper: 검증인 운영자용 (예: 스테이킹 관련 메시지).maroovalcons: 검증인 합의 공개 키용.maroopub: 계정 공개 키용.maroovaloperpub: 검증인 운영자 공개 키용.