마루 주소 형식 이해하기
마루 네트워크에서 사용되는 두 가지 주요 주소 형식인 EVM 16진수와 코스모스 Bech32에 대해 알아보고 이들 간에 변환하는 방법을 배웁니다.
사전 요구사항
- 블록체인 계정에 대한 기본적인 이해.
EVM 16진수 주소
이더리움 및 기타 EVM 체인에서 사용되는 표준 주소 형식입니다.
0x로 시작하는 42자 문자열입니다.- 형식:
0x다음에 40개의 16진수 문자 (예:0x71C7656EC7ab88b098defB751B7401B5f6d8976F). - 사용 시점: 스마트 컨트랙트와 상호작용할 때, 메타마스크와 같은 지갑을 사용할 때, 또는 이더리움 네이티브 도구 및 라이브러리(Ethers.js, Web3.py)를 사용할 때.
코스모스 Bech32 주소
코스모스 SDK 네이티브의 사람이 읽을 수 있는 주소 형식입니다. 네트워크를 식별하는 접두사와 오류를 방지하는 체크섬이 포함됩니다.
- 형식: 네트워크별 접두사(예:
maroo) 다음에 문자열 (예:maroo1...). - 마루 접두사:
config/config.go에 정의된 대로, 마루는 사용자 계정에maroo, 검증인에maroovaloper등을 사용합니다. - 사용 시점:
maroodCLI와 같은 코스모스 네이티브 도구를 사용할 때, 스테이킹 또는 거버넌스 모듈과 상호작용할 때, 또는 IBC 트랜잭션을 보낼 때.
형식 간 변환
두 주소 형식이 모두 동일한 계정을 가리키므로 쉽게 변환할 수 있습니다. 예를 들어, 메타마스크에서
0x 주소를 가지고 있지만 marood CLI를 사용하여 잔액을 조회하려면 maroo 주소가 필요한 경우에 이 변환이 필요합니다.package main
import (
"fmt"
"github.com/cosmos/cosmos-sdk/types"
"github.com/ethereum/go-ethereum/common"
"github.com/delight-labs/maroo/config"
)
func main() {
// SDK 설정에 마루 접두사가 설정되었는지 확인
cfg := types.GetConfig()
config.SetBech32Prefixes(cfg)
cfg.Seal()
// --- 16진수에서 Bech32로 변환 ---
hexAddrStr := "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
hexAddr := common.HexToAddress(hexAddrStr)
bech32Addr, err := types.Bech32ifyAddressBytes("maroo", hexAddr.Bytes())
if err != nil {
panic(err)
}
fmt.Printf("Hex '%s' is Bech32 '%s'\n", hexAddrStr, bech32Addr)
// --- Bech32에서 16진수로 변환 ---
bech32AddrToConvert := "maroo1h82d8f7st5panty5d2p22z3a2q525e593qavpj"
_, addrBytes, err := types.ParseBech32AddressAndBytes(bech32AddrToConvert)
if err != nil {
panic(err)
}
hexResult := common.BytesToAddress(addrBytes)
fmt.Printf("Bech32 '%s' is Hex '%s'\n", bech32AddrToConvert, hexResult.Hex())
} 참고: 많은 마루 블록 탐색기는 계정 페이지에서 두 주소 형식을 자동으로 모두 표시합니다.