Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions input/chainsync/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ import (
)

type BlockContext struct {
BlockNumber uint64 `json:"blockNumber"`
SlotNumber uint64 `json:"slotNumber"`
BlockNumber uint64 `json:"blockNumber"`
SlotNumber uint64 `json:"slotNumber"`
NetworkMagic uint32 `json:"networkMagic"`
}

type BlockEvent struct {
Expand All @@ -30,10 +31,11 @@ type BlockEvent struct {
BlockCbor byteSliceJsonHex `json:"blockCbor,omitempty"`
}

func NewBlockContext(block ledger.Block) BlockContext {
func NewBlockContext(block ledger.Block, networkMagic uint32) BlockContext {
ctx := BlockContext{
BlockNumber: block.BlockNumber(),
SlotNumber: block.SlotNumber(),
BlockNumber: block.BlockNumber(),
SlotNumber: block.SlotNumber(),
NetworkMagic: networkMagic,
}
return ctx
}
Expand Down
8 changes: 4 additions & 4 deletions input/chainsync/chainsync.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ func (c *ChainSync) handleRollBackward(point ocommon.Point, tip ochainsync.Tip)
func (c *ChainSync) handleRollForward(blockType uint, blockData interface{}, tip ochainsync.Tip) error {
switch v := blockData.(type) {
case ledger.Block:
evt := event.New("chainsync.block", time.Now(), NewBlockContext(v), NewBlockEvent(v, c.includeCbor))
evt := event.New("chainsync.block", time.Now(), NewBlockContext(v, c.networkMagic), NewBlockEvent(v, c.includeCbor))
c.eventChan <- evt
c.updateStatus(v.SlotNumber(), v.BlockNumber(), v.Hash(), tip.Point.Slot, hex.EncodeToString(tip.Point.Hash))
case ledger.BlockHeader:
Expand All @@ -221,7 +221,7 @@ func (c *ChainSync) handleRollForward(blockType uint, blockData interface{}, tip
blockEvt := event.New("chainsync.block", time.Now(), NewBlockHeaderContext(v), NewBlockEvent(block, c.includeCbor))
c.eventChan <- blockEvt
for t, transaction := range block.Transactions() {
txEvt := event.New("chainsync.transaction", time.Now(), NewTransactionContext(block, transaction, uint32(t)), NewTransactionEvent(block, transaction, c.includeCbor))
txEvt := event.New("chainsync.transaction", time.Now(), NewTransactionContext(block, transaction, uint32(t), c.networkMagic), NewTransactionEvent(block, transaction, c.includeCbor))
c.eventChan <- txEvt
}
c.updateStatus(v.SlotNumber(), v.BlockNumber(), v.Hash(), tip.Point.Slot, hex.EncodeToString(tip.Point.Hash))
Expand All @@ -230,10 +230,10 @@ func (c *ChainSync) handleRollForward(blockType uint, blockData interface{}, tip
}

func (c *ChainSync) handleBlockFetchBlock(block ledger.Block) error {
blockEvt := event.New("chainsync.block", time.Now(), NewBlockContext(block), NewBlockEvent(block, c.includeCbor))
blockEvt := event.New("chainsync.block", time.Now(), NewBlockContext(block, c.networkMagic), NewBlockEvent(block, c.includeCbor))
c.eventChan <- blockEvt
for t, transaction := range block.Transactions() {
txEvt := event.New("chainsync.transaction", time.Now(), NewTransactionContext(block, transaction, uint32(t)), NewTransactionEvent(block, transaction, c.includeCbor))
txEvt := event.New("chainsync.transaction", time.Now(), NewTransactionContext(block, transaction, uint32(t), c.networkMagic), NewTransactionEvent(block, transaction, c.includeCbor))
c.eventChan <- txEvt
}
c.updateStatus(block.SlotNumber(), block.BlockNumber(), block.Hash(), c.bulkRangeEnd.Slot, hex.EncodeToString(c.bulkRangeEnd.Hash))
Expand Down
4 changes: 3 additions & 1 deletion input/chainsync/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ type TransactionContext struct {
SlotNumber uint64 `json:"slotNumber"`
TransactionHash string `json:"transactionHash"`
TransactionIdx uint32 `json:"transactionIdx"`
NetworkMagic uint32 `json:"networkMagic"`
}

type TransactionEvent struct {
Expand All @@ -36,12 +37,13 @@ type TransactionEvent struct {
TTL uint64 `json:"ttl,omitempty"`
}

func NewTransactionContext(block ledger.Block, tx ledger.Transaction, index uint32) TransactionContext {
func NewTransactionContext(block ledger.Block, tx ledger.Transaction, index uint32, networkMagic uint32) TransactionContext {
ctx := TransactionContext{
BlockNumber: block.BlockNumber(),
SlotNumber: block.SlotNumber(),
TransactionHash: tx.Hash(),
TransactionIdx: index,
NetworkMagic: networkMagic,
}
return ctx
}
Expand Down
27 changes: 23 additions & 4 deletions output/webhook/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ import (
"github.com/blinklabs-io/snek/internal/version"
)

const (
mainnetNetworkMagic uint32 = 764824073
previewNetworkMagic uint32 = 2
preprodNetworkMagic uint32 = 1
)

type WebhookOutput struct {
errorChan chan error
eventChan chan event.Event
Expand Down Expand Up @@ -135,8 +141,8 @@ func formatWebhook(e *event.Event, format string) []byte {
Name: "Issuer Vkey",
Value: be.IssuerVkey,
})
// TODO: fix this URL for different networks
dme.URL = fmt.Sprintf("https://cexplorer.io/block/%s", be.BlockHash)
baseURL := getBaseURL(bc.NetworkMagic)
dme.URL = fmt.Sprintf("%s/block/%s", baseURL, be.BlockHash)
case "chainsync.rollback":
be := e.Payload.(chainsync.RollbackEvent)
dme.Title = "Cardano Rollback"
Expand Down Expand Up @@ -176,8 +182,8 @@ func formatWebhook(e *event.Event, format string) []byte {
Name: "Transaction Hash",
Value: tc.TransactionHash,
})
// TODO: fix this URL for different networks
dme.URL = fmt.Sprintf("https://cexplorer.io/tx/%s", tc.TransactionHash)
baseURL := getBaseURL(tc.NetworkMagic)
dme.URL = fmt.Sprintf("%s/tx/%s", baseURL, tc.TransactionHash)
default:
dwe.Content = fmt.Sprintf("%v", e.Payload)
}
Expand Down Expand Up @@ -214,6 +220,19 @@ type DiscordMessageEmbedField struct {
Value string `json:"value"`
}

func getBaseURL(networkMagic uint32) string {
switch networkMagic {
case mainnetNetworkMagic:
return "https://cexplorer.io"
case preprodNetworkMagic:
return "https://preprod.cexplorer.io"
case previewNetworkMagic:
return "https://preview.cexplorer.io"
default:
return "https://cexplorer.io" // default to mainnet if unknown network
}
}

func (w *WebhookOutput) SendWebhook(e *event.Event) error {
logger := logging.GetLogger()
logger.Infof("sending event %s to %s", e.Type, w.url)
Expand Down