mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-26 16:02:31 +00:00

* [NOD-297] Fix onChainChanged on rpcclient * [NOD-285] create gorm models for db (#378) * [NOD-285] Map API-Server database using GORM * [NOD-285] Add accepting block to transactions and blocks models, and remove accepting block model * [NOD-285] Define model relations * [NOD-285] Fix many to many for Transaction and Block models * [NOD-285] Remove redundant main file * [NOD-296] Send SyncMgr.SubmitBlock errors as rpc errors (#381) * [NOD-296] Send SyncMgr.SubmitBlock errors as rpc errors * [NOD-296] Add error message prefix * [NOD-298] Add comments to gorm models (#382) * [NOD-294] Fix golint in deploy.sh and fix all lint warnings (#380) * [NOD-294] Fix golint in deploy.sh and fixed all lint errors * [NOD-294] Fix typos in comments * [NOD-294] Convert VirtualForTest into alias of *virtualBlock * [NOD-294] Fixed some more typos in comments * [NOD-295] Limit the length of GetData to 50 (#383) * [NOD-295] Fixed bad break condition in addInvsToGetDataMessageFromQueue. * [NOD-295] Fixed the fix for bad break condition in addInvsToGetDataMessageFromQueue. * [NOD-295] Made the check for max invs refer to invsNum instead of MaxInvPerGetDataMsg. * [NOD-297] Fix onChainChanged on rpcclient * [NOD-286] Implement API-Server base structure (#379) * [NOD-286] Implement API-Server base structure * [NOD-286] Add rpc user and password as command line arguments * [NOD-286] Make log directory a CLI argument * [NOD-286] Add db login details as CLI arguments * [NOD-297] Fix onChainChanged on rpcclient and server * [NOD-297] Fix variables and functions names * [NOD-297] Fix AcceptedTxIds -> AcceptedTxIDs
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/daglabs/btcd/util/daghash"
|
|
|
|
"github.com/daglabs/btcd/rpcclient"
|
|
"github.com/daglabs/btcd/util"
|
|
"github.com/daglabs/btcd/wire"
|
|
)
|
|
|
|
type apiServerClient struct {
|
|
*rpcclient.Client
|
|
onBlockAdded chan *blockAddedMsg
|
|
onChainChanged chan *chainChangedMsg
|
|
}
|
|
|
|
type blockAddedMsg struct {
|
|
chainHeight uint64
|
|
header *wire.BlockHeader
|
|
}
|
|
|
|
type chainChangedMsg struct {
|
|
removedChainBlockHashes []*daghash.Hash
|
|
addedChainBlocks []*rpcclient.ChainBlock
|
|
}
|
|
|
|
func newAPIServerClient(connCfg *rpcclient.ConnConfig) (*apiServerClient, error) {
|
|
client := &apiServerClient{
|
|
onBlockAdded: make(chan *blockAddedMsg),
|
|
onChainChanged: make(chan *chainChangedMsg),
|
|
}
|
|
notificationHandlers := &rpcclient.NotificationHandlers{
|
|
OnFilteredBlockAdded: func(height uint64, header *wire.BlockHeader,
|
|
txs []*util.Tx) {
|
|
client.onBlockAdded <- &blockAddedMsg{
|
|
chainHeight: height,
|
|
header: header,
|
|
}
|
|
},
|
|
OnChainChanged: func(removedChainBlockHashes []*daghash.Hash,
|
|
addedChainBlocks []*rpcclient.ChainBlock) {
|
|
client.onChainChanged <- &chainChangedMsg{
|
|
removedChainBlockHashes: removedChainBlockHashes,
|
|
addedChainBlocks: addedChainBlocks,
|
|
}
|
|
},
|
|
}
|
|
var err error
|
|
client.Client, err = rpcclient.New(connCfg, notificationHandlers)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error connecting to address %s: %s", connCfg.Host, err)
|
|
}
|
|
|
|
if err = client.NotifyBlocks(); err != nil {
|
|
return nil, fmt.Errorf("Error while registering client %s for block notifications: %s", client.Host(), err)
|
|
}
|
|
if err = client.NotifyChainChanges(); err != nil {
|
|
return nil, fmt.Errorf("Error while registering client %s for chain changes notifications: %s", client.Host(), err)
|
|
}
|
|
return client, nil
|
|
}
|