update to use ReceiptForStorage; expose rpc server over ws
This commit is contained in:
@@ -65,6 +65,8 @@ func (ecr *EthCIDRetriever) RetrieveCIDs(streamFilters config.Subscription) ([]C
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
log.Debug("backfill starting block:", streamFilters.StartingBlock)
|
||||
log.Debug("backfill ending block:", endingBlock)
|
||||
for i := streamFilters.StartingBlock; i <= endingBlock; i++ {
|
||||
cw := CidWrapper{}
|
||||
if !streamFilters.HeaderFilter.Off {
|
||||
@@ -115,7 +117,7 @@ func (ecr *EthCIDRetriever) RetrieveCIDs(streamFilters config.Subscription) ([]C
|
||||
}
|
||||
|
||||
func (ecr *EthCIDRetriever) retrieveHeaderCIDs(tx *sqlx.Tx, streamFilters config.Subscription, blockNumber int64) ([]string, error) {
|
||||
log.Debug("retrieving header cids")
|
||||
log.Debug("retrieving header cids for block ", blockNumber)
|
||||
headers := make([]string, 0)
|
||||
pgStr := `SELECT cid FROM header_cids
|
||||
WHERE block_number = $1`
|
||||
@@ -127,7 +129,7 @@ func (ecr *EthCIDRetriever) retrieveHeaderCIDs(tx *sqlx.Tx, streamFilters config
|
||||
}
|
||||
|
||||
func (ecr *EthCIDRetriever) retrieveTrxCIDs(tx *sqlx.Tx, streamFilters config.Subscription, blockNumber int64) ([]string, []int64, error) {
|
||||
log.Debug("retrieving transaction cids")
|
||||
log.Debug("retrieving transaction cids for block ", blockNumber)
|
||||
args := make([]interface{}, 0, 3)
|
||||
type result struct {
|
||||
ID int64 `db:"id"`
|
||||
@@ -159,7 +161,7 @@ func (ecr *EthCIDRetriever) retrieveTrxCIDs(tx *sqlx.Tx, streamFilters config.Su
|
||||
}
|
||||
|
||||
func (ecr *EthCIDRetriever) retrieveRctCIDs(tx *sqlx.Tx, streamFilters config.Subscription, blockNumber int64, trxIds []int64) ([]string, error) {
|
||||
log.Debug("retrieving receipt cids")
|
||||
log.Debug("retrieving receipt cids for block ", blockNumber)
|
||||
args := make([]interface{}, 0, 2)
|
||||
pgStr := `SELECT receipt_cids.cid FROM receipt_cids, transaction_cids, header_cids
|
||||
WHERE receipt_cids.tx_id = transaction_cids.id
|
||||
@@ -182,7 +184,7 @@ func (ecr *EthCIDRetriever) retrieveRctCIDs(tx *sqlx.Tx, streamFilters config.Su
|
||||
}
|
||||
|
||||
func (ecr *EthCIDRetriever) retrieveStateCIDs(tx *sqlx.Tx, streamFilters config.Subscription, blockNumber int64) ([]StateNodeCID, error) {
|
||||
log.Debug("retrieving state cids")
|
||||
log.Debug("retrieving state cids for block ", blockNumber)
|
||||
args := make([]interface{}, 0, 2)
|
||||
pgStr := `SELECT state_cids.cid, state_cids.state_key FROM state_cids INNER JOIN header_cids ON (state_cids.header_id = header_cids.id)
|
||||
WHERE header_cids.block_number = $1`
|
||||
@@ -205,7 +207,7 @@ func (ecr *EthCIDRetriever) retrieveStateCIDs(tx *sqlx.Tx, streamFilters config.
|
||||
}
|
||||
|
||||
func (ecr *EthCIDRetriever) retrieveStorageCIDs(tx *sqlx.Tx, streamFilters config.Subscription, blockNumber int64) ([]StorageNodeCID, error) {
|
||||
log.Debug("retrieving storage cids")
|
||||
log.Debug("retrieving storage cids for block ", blockNumber)
|
||||
args := make([]interface{}, 0, 3)
|
||||
pgStr := `SELECT storage_cids.cid, state_cids.state_key, storage_cids.storage_key FROM storage_cids, state_cids, header_cids
|
||||
WHERE storage_cids.state_id = state_cids.id
|
||||
|
||||
@@ -128,8 +128,9 @@ func (s *Screener) filerReceipts(streamFilters *config.Subscription, response *R
|
||||
if !streamFilters.ReceiptFilter.Off && checkRange(streamFilters.StartingBlock, streamFilters.EndingBlock, payload.BlockNumber.Int64()) {
|
||||
for i, receipt := range payload.Receipts {
|
||||
if checkReceipts(receipt, streamFilters.ReceiptFilter.Topic0s, payload.ReceiptMetaData[i].Topic0s, trxHashes) {
|
||||
receiptForStorage := (*types.ReceiptForStorage)(receipt)
|
||||
receiptBuffer := new(bytes.Buffer)
|
||||
err := receipt.EncodeRLP(receiptBuffer)
|
||||
err := receiptForStorage.EncodeRLP(receiptBuffer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+34
-29
@@ -209,8 +209,7 @@ func (sap *Service) processResponse(payload IPLDPayload) error {
|
||||
// Subscribe is used by the API to subscribe to the service loop
|
||||
func (sap *Service) Subscribe(id rpc.ID, sub chan<- ResponsePayload, quitChan chan<- bool, streamFilters *config.Subscription) {
|
||||
log.Info("Subscribing to the seed node service")
|
||||
sap.Lock()
|
||||
sap.Subscriptions[id] = Subscription{
|
||||
subscription := Subscription{
|
||||
PayloadChan: sub,
|
||||
QuitChan: quitChan,
|
||||
StreamFilters: streamFilters,
|
||||
@@ -218,40 +217,46 @@ func (sap *Service) Subscribe(id rpc.ID, sub chan<- ResponsePayload, quitChan ch
|
||||
// If the subscription requests a backfill, use the Postgres index to lookup and retrieve historical data
|
||||
// Otherwise we only filter new data as it is streamed in from the state diffing geth node
|
||||
if streamFilters.BackFill || streamFilters.BackFillOnly {
|
||||
log.Debug("back-filling data for id", id)
|
||||
// Retrieve cached CIDs relevant to this subscriber
|
||||
cidWrappers, err := sap.Retriever.RetrieveCIDs(*streamFilters)
|
||||
sap.backFill(subscription, id)
|
||||
}
|
||||
if !streamFilters.BackFillOnly {
|
||||
sap.Lock()
|
||||
sap.Subscriptions[id] = subscription
|
||||
sap.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
func (sap *Service) backFill(sub Subscription, id rpc.ID) {
|
||||
log.Debug("back-filling data for id", id)
|
||||
// Retrieve cached CIDs relevant to this subscriber
|
||||
cidWrappers, err := sap.Retriever.RetrieveCIDs(*sub.StreamFilters)
|
||||
if err != nil {
|
||||
sub.PayloadChan <- ResponsePayload{
|
||||
ErrMsg: "CID retrieval error: " + err.Error(),
|
||||
}
|
||||
}
|
||||
for _, cidWrapper := range cidWrappers {
|
||||
blocksWrapper, err := sap.Fetcher.FetchCIDs(cidWrapper)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
sap.serve(id, ResponsePayload{
|
||||
ErrMsg: "CID retrieval error: " + err.Error(),
|
||||
})
|
||||
return
|
||||
sub.PayloadChan <- ResponsePayload{
|
||||
ErrMsg: "IPLD fetching error: " + err.Error(),
|
||||
}
|
||||
}
|
||||
for _, cidWrapper := range cidWrappers {
|
||||
blocksWrapper, err := sap.Fetcher.FetchCIDs(cidWrapper)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
sap.serve(id, ResponsePayload{
|
||||
ErrMsg: "IPLD fetching error: " + err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
backFillIplds, err := sap.Resolver.ResolveIPLDs(*blocksWrapper)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
sap.serve(id, ResponsePayload{
|
||||
ErrMsg: "IPLD resolving error: " + err.Error(),
|
||||
})
|
||||
return
|
||||
backFillIplds, err := sap.Resolver.ResolveIPLDs(*blocksWrapper)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
sub.PayloadChan <- ResponsePayload{
|
||||
ErrMsg: "IPLD resolving error: " + err.Error(),
|
||||
}
|
||||
sap.serve(id, *backFillIplds)
|
||||
}
|
||||
if streamFilters.BackFillOnly {
|
||||
delete(sap.Subscriptions, id)
|
||||
select {
|
||||
case sub.PayloadChan <- *backFillIplds:
|
||||
log.Infof("sending seed node back-fill payload to subscription %s", id)
|
||||
default:
|
||||
log.Infof("unable to send back-fill ppayload to subscription %s; channel has no receiver", id)
|
||||
}
|
||||
}
|
||||
sap.Unlock()
|
||||
}
|
||||
|
||||
// Unsubscribe is used to unsubscribe to the StateDiffingService loop
|
||||
|
||||
Reference in New Issue
Block a user