// NotifyBlockConnected creates and marshalls a JSON message to notify // of a new block connected to the main chain. The notification is sent // to each connected wallet. func (s *rpcServer) NotifyBlockConnected(block *btcutil.Block) { hash, err := block.Sha() if err != nil { rpcsLog.Error("Bad block; connected block notification dropped.") return } // TODO: remove int32 type conversion. ntfn := btcws.NewBlockConnectedNtfn(hash.String(), int32(block.Height())) mntfn, _ := json.Marshal(ntfn) s.ws.walletNotificationMaster <- mntfn // Inform any interested parties about txs mined in this block. s.ws.Lock() for _, tx := range block.Transactions() { if clist, ok := s.ws.minedTxNotifications[*tx.Sha()]; ok { var enext *list.Element for e := clist.Front(); e != nil; e = enext { enext = e.Next() c := e.Value.(walletChan) // TODO: remove int32 type conversion after // the int64 -> int32 switch is made. ntfn := btcws.NewTxMinedNtfn(tx.Sha().String(), hash.String(), int32(block.Height()), block.MsgBlock().Header.Timestamp.Unix(), tx.Index()) mntfn, _ := json.Marshal(ntfn) c <- mntfn s.ws.removeMinedTxRequest(c, tx.Sha()) } } } s.ws.Unlock() }
// MarshalJSON creates the JSON encoding of the chain notification to pass // to any connected wallet clients. This should never error. func (n blockConnected) MarshalJSON() ([]byte, error) { nn := btcws.NewBlockConnectedNtfn(n.hash.String(), n.height) return nn.MarshalJSON() }
// NotifyNewBlockChainHeight notifies all frontends of a new // blockchain height. This sends the same notification as // btcd, so this can probably be removed. func NotifyNewBlockChainHeight(reply chan []byte, bs wallet.BlockStamp) { ntfn := btcws.NewBlockConnectedNtfn(bs.Hash.String(), bs.Height) mntfn, _ := ntfn.MarshalJSON() reply <- mntfn }
{ name: "accountbalance", f: func() btcjson.Cmd { return btcws.NewAccountBalanceNtfn("abcde", 1.2345, true) }, result: &btcws.AccountBalanceNtfn{ Account: "abcde", Balance: 1.2345, Confirmed: true, }, }, { name: "blockconnected", f: func() btcjson.Cmd { return btcws.NewBlockConnectedNtfn( "000000004811dda1c320ad5d0ea184a20a53acd92292c5f1cb926c3ee82abf70", 153469) }, result: &btcws.BlockConnectedNtfn{ Hash: "000000004811dda1c320ad5d0ea184a20a53acd92292c5f1cb926c3ee82abf70", Height: 153469, }, }, { name: "blockdisconnected", f: func() btcjson.Cmd { return btcws.NewBlockDisconnectedNtfn( "000000004811dda1c320ad5d0ea184a20a53acd92292c5f1cb926c3ee82abf70", 153469) }, result: &btcws.BlockDisconnectedNtfn{