github.com/diadata-org/diadata@v1.4.593/pkg/dia/scraper/blockchain-scrapers/scrapers/random-reward-scraper.go (about)

     1  package blockchainscrapers
     2  
     3  import (
     4  	"log"
     5  	"time"
     6  
     7  	"github.com/blockstatecom/go-bitcoind"
     8  	"github.com/diadata-org/diadata/pkg/dia"
     9  )
    10  
    11  const (
    12  	SLEEP_TIME = 10
    13  )
    14  
    15  func RunScraper(host string, port int, user, password, symbol string, elapsedTime int) {
    16  	log.SetFlags(log.LstdFlags | log.Lshortfile)
    17  
    18  	config := dia.GetConfigApi()
    19  	if config == nil {
    20  		log.Fatal("Couldn't load config")
    21  	}
    22  
    23  	client := dia.NewClient(config)
    24  	if client == nil {
    25  		log.Fatal("Couldn't load client")
    26  	}
    27  
    28  	bitcoinLib, err := bitcoind.New(host, port, user, password, USESSL)
    29  	if err != nil {
    30  		log.Fatal(err)
    31  	}
    32  
    33  	var waitTime time.Duration = time.Duration(elapsedTime) * time.Second
    34  	var lastSupply float64 = 0
    35  
    36  	for {
    37  		bestHash, err := bitcoinLib.GetBestBlockhash()
    38  		if err != nil {
    39  			log.Println(err)
    40  		}
    41  
    42  		block, err := bitcoinLib.GetBlock(bestHash)
    43  		if err != nil {
    44  			log.Println(err)
    45  		}
    46  
    47  		blockTime := time.Unix(block.Time, 0)
    48  
    49  		if time.Since(blockTime) > waitTime {
    50  			txOutSetInfo, err := bitcoinLib.GetTxOutsetInfo()
    51  			if err != nil {
    52  				log.Println(err)
    53  			}
    54  
    55  			if txOutSetInfo.TotalAmount > lastSupply {
    56  				lastSupply = txOutSetInfo.TotalAmount
    57  
    58  				err = client.SendSupply(&dia.Supply{
    59  					Asset:             dia.Asset{Symbol: symbol},
    60  					CirculatingSupply: lastSupply,
    61  				})
    62  				if err != nil {
    63  					log.Println("Error sending supply to API: ", err)
    64  				} else {
    65  					log.Println("Sent supply", lastSupply, "to API")
    66  				}
    67  			}
    68  		} else {
    69  			log.Println("Block:", block.Height, "synchronized for", time.Since(blockTime))
    70  		}
    71  
    72  		time.Sleep(SLEEP_TIME * time.Second)
    73  	}
    74  }