diff --git a/blockmanager.go b/blockmanager.go index 9dfeed02..59c5bbe8 100644 --- a/blockmanager.go +++ b/blockmanager.go @@ -164,8 +164,8 @@ type blockManager struct { started int32 shutdown int32 blockChain *btcchain.BlockChain - requestedTxns map[btcwire.ShaHash]bool - requestedBlocks map[btcwire.ShaHash]bool + requestedTxns map[btcwire.ShaHash]struct{} + requestedBlocks map[btcwire.ShaHash]struct{} receivedLogBlocks int64 receivedLogTx int64 lastBlockLogTime time.Time @@ -701,8 +701,8 @@ func (b *blockManager) fetchHeaderBlocks() { iv := btcwire.NewInvVect(btcwire.InvTypeBlock, node.sha) if !b.haveInventory(iv) { - b.requestedBlocks[*node.sha] = true - b.syncPeer.requestedBlocks[*node.sha] = true + b.requestedBlocks[*node.sha] = struct{}{} + b.syncPeer.requestedBlocks[*node.sha] = struct{}{} gdmsg.AddInvVect(iv) numRequested++ } @@ -954,8 +954,8 @@ func (b *blockManager) handleInvMsg(imsg *invMsg) { // Request the block if there is not already a pending // request. if _, exists := b.requestedBlocks[iv.Hash]; !exists { - b.requestedBlocks[iv.Hash] = true - imsg.peer.requestedBlocks[iv.Hash] = true + b.requestedBlocks[iv.Hash] = struct{}{} + imsg.peer.requestedBlocks[iv.Hash] = struct{}{} gdmsg.AddInvVect(iv) numRequested++ } @@ -964,8 +964,8 @@ func (b *blockManager) handleInvMsg(imsg *invMsg) { // Request the transaction if there is not already a // pending request. if _, exists := b.requestedTxns[iv.Hash]; !exists { - b.requestedTxns[iv.Hash] = true - imsg.peer.requestedTxns[iv.Hash] = true + b.requestedTxns[iv.Hash] = struct{}{} + imsg.peer.requestedTxns[iv.Hash] = struct{}{} gdmsg.AddInvVect(iv) numRequested++ } @@ -1304,8 +1304,8 @@ func newBlockManager(s *server) (*blockManager, error) { bm := blockManager{ server: s, - requestedTxns: make(map[btcwire.ShaHash]bool), - requestedBlocks: make(map[btcwire.ShaHash]bool), + requestedTxns: make(map[btcwire.ShaHash]struct{}), + requestedBlocks: make(map[btcwire.ShaHash]struct{}), lastBlockLogTime: time.Now(), msgChan: make(chan interface{}, cfg.MaxPeers*3), headerList: list.New(), diff --git a/config.go b/config.go index e20340ae..a29c7380 100644 --- a/config.go +++ b/config.go @@ -233,11 +233,11 @@ func validDbType(dbType string) bool { // addrs removed. func removeDuplicateAddresses(addrs []string) []string { result := make([]string, 0, len(addrs)) - seen := map[string]bool{} + seen := map[string]struct{}{} for _, val := range addrs { if _, ok := seen[val]; !ok { result = append(result, val) - seen[val] = true + seen[val] = struct{}{} } } return result diff --git a/peer.go b/peer.go index 5701901e..eb476360 100644 --- a/peer.go +++ b/peer.go @@ -146,11 +146,11 @@ type peer struct { connected int32 disconnect int32 // only to be used atomically persistent bool - knownAddresses map[string]bool + knownAddresses map[string]struct{} knownInventory *MruInventoryMap knownInvMutex sync.Mutex - requestedTxns map[btcwire.ShaHash]bool // owned by blockmanager - requestedBlocks map[btcwire.ShaHash]bool // owned by blockmanager + requestedTxns map[btcwire.ShaHash]struct{} // owned by blockmanager + requestedBlocks map[btcwire.ShaHash]struct{} // owned by blockmanager retryCount int64 prevGetBlocksBegin *btcwire.ShaHash // owned by blockmanager prevGetBlocksStop *btcwire.ShaHash // owned by blockmanager @@ -911,7 +911,7 @@ func (p *peer) pushAddrMsg(addresses []*btcwire.NetAddress) error { msg := btcwire.NewMsgAddr() for _, na := range addresses { // Filter addresses the peer already knows about. - if p.knownAddresses[NetAddressKey(na)] { + if _, ok := p.knownAddresses[NetAddressKey(na)]; ok { continue } @@ -979,7 +979,7 @@ func (p *peer) handleAddrMsg(msg *btcwire.MsgAddr) { } // Add address to known addresses for this peer. - p.knownAddresses[NetAddressKey(na)] = true + p.knownAddresses[NetAddressKey(na)] = struct{}{} } // Add addresses to server address manager. The address manager handles @@ -1616,10 +1616,10 @@ func newPeerBase(s *server, inbound bool) *peer { btcnet: s.netParams.Net, services: btcwire.SFNodeNetwork, inbound: inbound, - knownAddresses: make(map[string]bool), + knownAddresses: make(map[string]struct{}), knownInventory: NewMruInventoryMap(maxKnownInventory), - requestedTxns: make(map[btcwire.ShaHash]bool), - requestedBlocks: make(map[btcwire.ShaHash]bool), + requestedTxns: make(map[btcwire.ShaHash]struct{}), + requestedBlocks: make(map[btcwire.ShaHash]struct{}), requestQueue: list.New(), outputQueue: make(chan outMsg, outputBufferSize), sendQueue: make(chan outMsg, 1), // nonblocking sync diff --git a/rpcserver.go b/rpcserver.go index 9ee0f23b..5a830a8a 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -124,56 +124,56 @@ func init() { // list of commands that we recognise, but for which btcd has no support because // it lacks support for wallet functionality. For these commands the user // should ask a connected instance of btcwallet. -var rpcAskWallet = map[string]bool{ - "addmultisigaddress": true, - "backupwallet": true, - "createencryptedwallet": true, - "createmultisig": true, - "dumpprivkey": true, - "dumpwallet": true, - "encryptwallet": true, - "getaccount": true, - "getaccountaddress": true, - "getaddressesbyaccount": true, - "getbalance": true, - "getnewaddress": true, - "getrawchangeaddress": true, - "getreceivedbyaccount": true, - "getreceivedbyaddress": true, - "gettransaction": true, - "gettxout": true, - "gettxoutsetinfo": true, - "getunconfirmedbalance": true, - "getwalletinfo": true, - "importprivkey": true, - "importwallet": true, - "keypoolrefill": true, - "listaccounts": true, - "listaddressgroupings": true, - "listlockunspent": true, - "listreceivedbyaccount": true, - "listreceivedbyaddress": true, - "listsinceblock": true, - "listtransactions": true, - "listunspent": true, - "lockunspent": true, - "move": true, - "sendfrom": true, - "sendmany": true, - "sendtoaddress": true, - "setaccount": true, - "settxfee": true, - "signmessage": true, - "signrawtransaction": true, - "validateaddress": true, - "verifymessage": true, - "walletlock": true, - "walletpassphrase": true, - "walletpassphrasechange": true, +var rpcAskWallet = map[string]struct{}{ + "addmultisigaddress": struct{}{}, + "backupwallet": struct{}{}, + "createencryptedwallet": struct{}{}, + "createmultisig": struct{}{}, + "dumpprivkey": struct{}{}, + "dumpwallet": struct{}{}, + "encryptwallet": struct{}{}, + "getaccount": struct{}{}, + "getaccountaddress": struct{}{}, + "getaddressesbyaccount": struct{}{}, + "getbalance": struct{}{}, + "getnewaddress": struct{}{}, + "getrawchangeaddress": struct{}{}, + "getreceivedbyaccount": struct{}{}, + "getreceivedbyaddress": struct{}{}, + "gettransaction": struct{}{}, + "gettxout": struct{}{}, + "gettxoutsetinfo": struct{}{}, + "getunconfirmedbalance": struct{}{}, + "getwalletinfo": struct{}{}, + "importprivkey": struct{}{}, + "importwallet": struct{}{}, + "keypoolrefill": struct{}{}, + "listaccounts": struct{}{}, + "listaddressgroupings": struct{}{}, + "listlockunspent": struct{}{}, + "listreceivedbyaccount": struct{}{}, + "listreceivedbyaddress": struct{}{}, + "listsinceblock": struct{}{}, + "listtransactions": struct{}{}, + "listunspent": struct{}{}, + "lockunspent": struct{}{}, + "move": struct{}{}, + "sendfrom": struct{}{}, + "sendmany": struct{}{}, + "sendtoaddress": struct{}{}, + "setaccount": struct{}{}, + "settxfee": struct{}{}, + "signmessage": struct{}{}, + "signrawtransaction": struct{}{}, + "validateaddress": struct{}{}, + "verifymessage": struct{}{}, + "walletlock": struct{}{}, + "walletpassphrase": struct{}{}, + "walletpassphrasechange": struct{}{}, } // Commands that are temporarily unimplemented. -var rpcUnimplemented = map[string]bool{} +var rpcUnimplemented = map[string]struct{}{} // workStateBlockInfo houses information about how to reconstruct a block given // its template and signature script. diff --git a/rpcwebsocket.go b/rpcwebsocket.go index a8a34269..1ecb8078 100644 --- a/rpcwebsocket.go +++ b/rpcwebsocket.go @@ -58,8 +58,8 @@ var wsHandlers = map[string]wsCommandHandler{ // asynchronously to the main input handler goroutine. This allows long-running // operations to run concurrently (and one at a time) while still responding // to the majority of normal requests which can be answered quickly. -var wsAsyncHandlers = map[string]bool{ - "rescan": true, +var wsAsyncHandlers = map[string]struct{}{ + "rescan": struct{}{}, } // WebsocketHandler handles a new websocket client by creating a new wsClient, @@ -618,7 +618,7 @@ func (m *wsNotificationManager) notifyForTxOuts(ops map[btcwire.OutPoint]map[cha } txHex := "" - wscNotified := make(map[chan bool]bool) + wscNotified := make(map[chan bool]struct{}) for i, txOut := range tx.MsgTx().TxOut { _, txAddrs, _, err := btcscript.ExtractPkScriptAddrs( txOut.PkScript, m.server.server.netParams) @@ -647,8 +647,8 @@ func (m *wsNotificationManager) notifyForTxOuts(ops map[btcwire.OutPoint]map[cha for wscQuit, wsc := range cmap { m.addSpentRequest(ops, wsc, op) - if !wscNotified[wscQuit] { - wscNotified[wscQuit] = true + if _, ok := wscNotified[wscQuit]; !ok { + wscNotified[wscQuit] = struct{}{} wsc.QueueNotification(marshalledJSON) } } @@ -683,7 +683,7 @@ func (m *wsNotificationManager) notifyForTxIns(ops map[btcwire.OutPoint]map[chan } txHex := "" - wscNotified := make(map[chan bool]bool) + wscNotified := make(map[chan bool]struct{}) for _, txIn := range tx.MsgTx().TxIn { prevOut := &txIn.PreviousOutpoint if cmap, ok := ops[*prevOut]; ok { @@ -700,8 +700,8 @@ func (m *wsNotificationManager) notifyForTxIns(ops map[btcwire.OutPoint]map[chan m.removeSpentRequest(ops, wsc, prevOut) } - if !wscNotified[wscQuit] { - wscNotified[wscQuit] = true + if _, ok := wscNotified[wscQuit]; !ok { + wscNotified[wscQuit] = struct{}{} wsc.QueueNotification(marshalledJSON) } }