Example #1
0
int32_t ramchain_resume(char *retbuf,int32_t maxlen,struct coin777 *coin,struct ramchain *ramchain,cJSON *argjson,uint32_t startblocknum,uint32_t endblocknum)
{
    ramchain->RTblocknum = _get_RTheight(&ramchain->lastgetinfo,coin->name,coin->serverport,coin->userpass,ramchain->RTblocknum);
    if ( ramchain->DBs.ctl == 0 )
        ramchain_prepare(coin,ramchain);
    ramchain->readyflag = 1;
    ramchain->paused = 0;
    return(0);
}
int32_t ramchain_init(char *retbuf,int32_t maxlen,struct coin777 *coin,struct ramchain *ramchain,cJSON *argjson,char *coinstr,char *serverport,char *userpass,uint32_t startblocknum,uint32_t endblocknum,uint32_t minconfirms)
{
    coin->minconfirms = minconfirms;
    printf("(%s %s %s) vs (%s %s %s)\n",coinstr,serverport,userpass,coin->name,coin->serverport,coin->userpass);
    ramchain->syncfreq = 10000;
    ramchain->startblocknum = startblocknum, ramchain->endblocknum = endblocknum;
    ramchain->RTblocknum = _get_RTheight(&ramchain->lastgetinfo,coin->name,coin->serverport,coin->userpass,ramchain->RTblocknum);
    if ( endblocknum == 0 )
        ramchain->endblocknum = endblocknum = 1000000000;
    return(ramchain_resume(retbuf,maxlen,coin,ramchain,argjson,startblocknum,endblocknum));
}
Example #3
0
uint32_t ramchain_prepare(struct coin777 *coin,struct ramchain *ramchain)
{
    uint32_t txidind,addrind,scriptind,numrawvouts,numrawvins,timestamp,totaladdrtx; uint64_t credits,debits;
    ramchain->startmilli = milliseconds();
    if ( ramchain->DBs.ctl == 0 )
    {
        ramchain->paused = 1;
        ramchain->RTblocknum = _get_RTheight(&ramchain->lastgetinfo,coin->name,coin->serverport,coin->userpass,ramchain->RTblocknum);
        coin777_initDBenv(coin);
        ramchain->startblocknum = coin777_startblocknum(coin,-1);
        printf("startblocknum.%u\n",ramchain->startblocknum);
        if ( coin777_getinds(coin,ramchain->startblocknum,&credits,&debits,&timestamp,&txidind,&numrawvouts,&numrawvins,&addrind,&scriptind,&totaladdrtx) == 0 )
        {
            coin777_initmmap(coin,ramchain->startblocknum,txidind,addrind,scriptind,numrawvouts,numrawvins,totaladdrtx);
            printf("t%u u%u s%u a%u c%u x%u initialized in %.3f seconds\n",txidind,numrawvouts,numrawvins,addrind,scriptind,totaladdrtx,(milliseconds() - ramchain->startmilli)/1000.);
            coin777_verify(coin,numrawvouts,numrawvins,credits,debits,addrind,1,&totaladdrtx);
        }
        ramchain->paused = 0;
    }
    return(ramchain->startblocknum);
}
Example #4
0
int32_t ramchain_update(struct coin777 *coin,struct ramchain *ramchain)
{
    uint32_t blocknum; int32_t lag,syncflag,flag = 0; //double startmilli; struct alloc_space MEM; 
    blocknum = ramchain->blocknum;
    if ( (lag= (ramchain->RTblocknum - blocknum)) < 1000 )
        ramchain->RTmode = 1;
    if ( ramchain->RTmode != 0 || (blocknum % 100) == 0 )
        ramchain->RTblocknum = _get_RTheight(&ramchain->lastgetinfo,coin->name,coin->serverport,coin->userpass,ramchain->RTblocknum);
    if ( lag < DB777_MATRIXROW*10 && ramchain->syncfreq > DB777_MATRIXROW )
        ramchain->syncfreq = DB777_MATRIXROW;
    else if ( lag < DB777_MATRIXROW && ramchain->syncfreq > DB777_MATRIXROW/10 )
        ramchain->syncfreq = DB777_MATRIXROW/10;
    else if ( strcmp(ramchain->DBs.coinstr,"BTC") == 0 && lag < DB777_MATRIXROW/10 && ramchain->syncfreq > DB777_MATRIXROW/100 )
        ramchain->syncfreq = DB777_MATRIXROW/100;
    if ( ramchain->paused < 10 )
    {
        syncflag = (((blocknum % ramchain->syncfreq) == 0) || (ramchain->needbackup != 0) || (blocknum % DB777_MATRIXROW) == 0);
        if ( blocknum >= ramchain->endblocknum || ramchain->paused != 0 )
        {
            if ( blocknum >= ramchain->endblocknum )
                ramchain->paused = 3, syncflag = 2;
            printf("ramchain.%s blocknum.%d <<< PAUSING paused.%d |  endblocknum.%u\n",ramchain->DBs.coinstr,blocknum,ramchain->paused,ramchain->endblocknum);
        }
        if ( coin->minconfirms == 0 )
            coin->minconfirms = (strcmp("BTC",coin->name) == 0) ? 3 : 10;
        if ( blocknum <= (ramchain->RTblocknum - coin->minconfirms) )
             flag = coin777_parse(coin,ramchain->RTblocknum,syncflag * (blocknum != 0),coin->minconfirms);
        if ( ramchain->paused == 3 )
        {
            //ledger_free(ramchain->activeledger,1), ramchain->activeledger = 0;
            printf("STOPPED\n");
        }
        if ( blocknum > ramchain->endblocknum || ramchain->paused != 0 )
            ramchain->paused = 10;
    }
    return(flag);
}