Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ Cosmos Hub WebSocket ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ง‘ ํด๋ผ์ด์–ธํŠธ (Go)

์ด ํ”„๋กœ์ ํŠธ๋Š” Go ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๊ฐ„๋‹จํ•œ WebSocket ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค. Cosmos Hub (Atom)์˜ Tendermint RPC ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ํŠธ๋žœ์žญ์…˜ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ , ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ธ”๋ก ๋†’์ด๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

์‹ค์‹œ๊ฐ„ ๊ตฌ๋…: ์•ˆ์ •์ ์ธ ๊ณต์šฉ Tendermint RPC ์—”๋“œํฌ์ธํŠธ์— WebSocket์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ tm.event='Tx' ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ: Cosmos/Tendermint ์ด๋ฒคํŠธ ๋ฉ”์‹œ์ง€(Result ํ•„๋“œ์— ๋ฐ์ดํ„ฐ ํฌํ•จ)๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

๋ธ”๋ก ๋‹จ์œ„ ์บ์‹ฑ: ๋™์ผํ•œ ๋ธ”๋ก ๋†’์ด์˜ ํŠธ๋žœ์žญ์…˜์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ž„์‹œ๋กœ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ธ”๋ก ์ „ํ™˜ ๊ฐ์ง€ ๋ฐ ์ €์žฅ: ์ƒˆ๋กœ์šด ๋ธ”๋ก ๋†’์ด๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ์ด์ „ ๋ธ”๋ก์˜ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ./save ํด๋”์— JSON ํŒŒ์ผ๋กœ ์ž๋™ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ์ตœ์ข… ์ €์žฅ: Ctrl+C ๋˜๋Š” SIGINT ์‹ ํ˜ธ ์ˆ˜์‹  ์‹œ ์บ์‹œ์— ๋‚จ์•„์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

์ „์ œ ์กฐ๊ฑด (Prerequisites)

Go (Golang) (๋ฒ„์ „ 1.18 ์ด์ƒ ๊ถŒ์žฅ)

Git (์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด)

ํ”„๋กœ์ ํŠธ ์‹คํ–‰

์ €์žฅ์†Œ ํด๋ก :

git clone https://github.com/๋‹น์‹ ์˜_์•„์ด๋””/cosmos-ws-client.git cd cosmos-ws-client

์ข…์†์„ฑ ๋‹ค์šด๋กœ๋“œ: Gorilla WebSocket ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

go mod init cosmos-ws-client # ํ”„๋กœ์ ํŠธ ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” (์ด๋ฏธ ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ƒ๋žต) go get github.com/gorilla/websocket

ํด๋ผ์ด์–ธํŠธ ์‹คํ–‰:

go run main.go

ํ”„๋กœ๊ทธ๋žจ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉด ์‹ค์‹œ๊ฐ„ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ๊ฒฐ๊ณผ๋ฌผ ๋ฐ ํด๋” ๊ตฌ์กฐ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ธ”๋ก ์ „ํ™˜์„ ๊ฐ์ง€ํ•˜๋ฉด, ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— save ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ทธ ์•ˆ์— JSON ํŒŒ์ผ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

cosmos-ws-client/ โ”œโ”€โ”€ main.go # ๋ฉ”์ธ Go ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ โ”œโ”€โ”€ go.mod # Go ๋ชจ๋“ˆ ํŒŒ์ผ โ”œโ”€โ”€ go.sum # Go ๋ชจ๋“ˆ ์ฒดํฌ์„ฌ ํŒŒ์ผ โ”œโ”€โ”€ .gitignore # Git์ด ๋ฌด์‹œํ•  ํŒŒ์ผ ์ •์˜ โ””โ”€โ”€ save/ # โœจ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ํด๋” โ”œโ”€โ”€ [BlockHeight].json # ์˜ˆ: 28572307.json โ””โ”€โ”€ [BlockHeight].json

JSON ์ถœ๋ ฅ ์˜ˆ์‹œ ([BlockHeight].json)

์ €์žฅ๋˜๋Š” JSON ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

{ "block_height": "28572307", "total_txs": 3, "transactions": [ { "query": "tm.event='Tx'", "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { "height": "28572307", "log": "[{"msg_index":0,"events":[...]}", "tx": "CoqiAQqIogEKIy9pYmMuY29yZS5jbGllbnQudjEuTXNnV..." } } }, "capture_time": "2025-11-25T20:00:00+09:00" } // ... ๋‚˜๋จธ์ง€ ํŠธ๋žœ์žญ์…˜ ] }

โš™๏ธ ์„ค์ • ๋ฐ ๋งž์ถคํ™”

main.go ํŒŒ์ผ ์ƒ๋‹จ์— ์ •์˜๋œ ์ƒ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RPC ์—”๋“œํฌ์ธํŠธ ๋ณ€๊ฒฝ

ํ˜„์žฌ wss://cosmos-rpc.polkachu.com/websocket์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Tendermint RPC ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด rpcEndpoint ์ƒ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์„ธ์š”.

// main.go ํŒŒ์ผ ๋‚ด const rpcEndpoint = "wss://cosmos-rpc.polkachu.com" const wsPath = "/websocket" // ๋Œ€๋ถ€๋ถ„์˜ ๋…ธ๋“œ์—์„œ ์ด ๊ฒฝ๋กœ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๊ตฌ๋… ์ฟผ๋ฆฌ ๋ณ€๊ฒฝ

ํŠน์ • ์ด๋ฒคํŠธ๋งŒ ๊ตฌ๋…ํ•˜๋ ค๋ฉด subscribeQuery ์ƒ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์„ธ์š”.

// ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ์ด๋ฒคํŠธ ๊ตฌ๋… (๊ธฐ๋ณธ ์„ค์ •) const subscribeQuery = "tm.event='Tx'"

// ํŠน์ • ๋ชจ๋“ˆ์˜ ๋ฉ”์‹œ์ง€ ์œ ํ˜•๋งŒ ๊ตฌ๋… (์˜ˆ: Bank ๋ชจ๋“ˆ์˜ ์†ก๊ธˆ ๋ฉ”์‹œ์ง€) // const subscribeQuery = "message.action='/cosmos.bank.v1beta1.MsgSend'"

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages