diff --git a/iguana/iguana_ramchain.c b/iguana/iguana_ramchain.c index 2639d4560..8c2789950 100755 --- a/iguana/iguana_ramchain.c +++ b/iguana/iguana_ramchain.c @@ -942,59 +942,62 @@ uint32_t iguana_ramchain_addspend(struct iguana_info *coin,RAMCHAIN_FUNC,bits256 else s->sequenceid = 0; s->external = external, s->spendtxidind = txidind, s->prevout = prev_vout; - s->sighash = iguana_vinscriptparse(coin,&V,&sigsize,&pubkeysize,&p2shsize,&suffixlen,vinscript,vinscriptlen); - //for (i=0; i<33; i++) - // printf("%02x",V.signers[0].pubkey[i]); - //printf(" parsed pubkey0\n"); - //for (i=0; i<20; i++) - // printf("%02x",V.signers[0].rmd160[i]); - //printf(" parsed rmd160_0\n"); - memset(sigsbuf,0,sizeof(sigsbuf)); - memset(poffsets,0,sizeof(poffsets)); - for (i=sigslen=0; i 0 ) { - if ( V.signers[i].siglen > 0 ) + s->sighash = iguana_vinscriptparse(coin,&V,&sigsize,&pubkeysize,&p2shsize,&suffixlen,vinscript,vinscriptlen); + //for (i=0; i<33; i++) + // printf("%02x",V.signers[0].pubkey[i]); + //printf(" parsed pubkey0\n"); + //for (i=0; i<20; i++) + // printf("%02x",V.signers[0].rmd160[i]); + //printf(" parsed rmd160_0\n"); + memset(sigsbuf,0,sizeof(sigsbuf)); + memset(poffsets,0,sizeof(poffsets)); + for (i=sigslen=0; i 0 ) + { + sigsbuf[sigslen++] = V.signers[i].siglen; + memcpy(&sigsbuf[sigslen],V.signers[i].sig,V.signers[i].siglen); + sigslen += V.signers[i].siglen; + } } - } - for (i=0; ipkind,&ramchain->H.scriptoffset,V.signers[i].pubkey,V.signers[i].rmd160)) == 0 ) + if ( V.signers[i].pubkey[0] != 0 ) { - printf("addspend: error couldnt get pubkeyoffset\n"); - } //else printf("poffset[%d] <- 0x%x (%02x %02x)\n",i,poffsets[i],Kspace[poffsets[i]],Kspace[poffsets[i]+32]); + if ( (poffsets[i]= iguana_ramchain_pubkeyoffset(coin,RAMCHAIN_ARG,1,&ramchain->pkind,&ramchain->H.scriptoffset,V.signers[i].pubkey,V.signers[i].rmd160)) == 0 ) + { + printf("addspend: error couldnt get pubkeyoffset\n"); + } //else printf("poffset[%d] <- 0x%x (%02x %02x)\n",i,poffsets[i],Kspace[poffsets[i]],Kspace[poffsets[i]+32]); + } } - } - s->numsigs = V.numsigs; - s->numpubkeys = V.numpubkeys; - if ( p2shsize != 0 ) - s->p2sh = 1; - if ( sigslen+V.numsigs+V.numpubkeys+suffixlen != 0 || s->sequenceid == 3 ) - { - ramchain->H.stacksize += sigslen; - checklen = iguana_vinscriptencode(coin,&Kspace[ramchain->H.data->scriptspace],ramchain->H.stacksize,Kspace,ramchain->H.scriptoffset,s,sequence,sigsbuf,sigslen,poffsets,V.p2shscript,V.p2shlen,&vinscript[vinscriptlen-suffixlen],suffixlen); - ramchain->H.scriptoffset += checklen; - //printf("checklen.%d scriptoffset.%d\n",checklen,ramchain->H.scriptoffset); - if ( (checklen= iguana_vinscriptdecode(coin,ramchain,&metalen,&checksequenceid,_script,&Kspace[ramchain->H.data->scriptspace],Kspace,s)) != vinscriptlen || memcmp(_script,vinscript,vinscriptlen) != 0 || sequence != checksequenceid ) + s->numsigs = V.numsigs; + s->numpubkeys = V.numpubkeys; + if ( p2shsize != 0 ) + s->p2sh = 1; + if ( sigslen+V.numsigs+V.numpubkeys+suffixlen != 0 || s->sequenceid == 3 ) { - static uint64_t counter; - if ( counter++ < 100 ) + ramchain->H.stacksize += sigslen; + checklen = iguana_vinscriptencode(coin,&Kspace[ramchain->H.data->scriptspace],ramchain->H.stacksize,Kspace,ramchain->H.scriptoffset,s,sequence,sigsbuf,sigslen,poffsets,V.p2shscript,V.p2shlen,&vinscript[vinscriptlen-suffixlen],suffixlen); + ramchain->H.scriptoffset += checklen; + //printf("checklen.%d scriptoffset.%d\n",checklen,ramchain->H.scriptoffset); + if ( (checklen= iguana_vinscriptdecode(coin,ramchain,&metalen,&checksequenceid,_script,&Kspace[ramchain->H.data->scriptspace],Kspace,s)) != vinscriptlen || memcmp(_script,vinscript,vinscriptlen) != 0 || sequence != checksequenceid ) { - for (i=0; icoinbase = 1;//, printf("vin reconstructed metalen.%d vinlen.%d\n",metalen,checklen); - } else printf("sigslen.%d numsigs.%d numpubs.%d suffixlen.%d\n",sigslen,V.numsigs,V.numpubkeys,suffixlen); + static uint64_t counter; + if ( counter++ < 100 ) + { + for (i=0; icoinbase = 1;//, printf("vin reconstructed metalen.%d vinlen.%d\n",metalen,checklen); + } else printf("sigslen.%d numsigs.%d numpubs.%d suffixlen.%d\n",sigslen,V.numsigs,V.numpubkeys,suffixlen); + } //s->hdrsi = hdrsi; //s->bundlei = bundlei; //char str[65]; printf("%s set prevout.%d -> %d\n",bits256_str(str,prev_hash),prev_vout,s->prevout); diff --git a/iguana/iguana_recv.c b/iguana/iguana_recv.c index 2ebca987f..c8ae1d02f 100755 --- a/iguana/iguana_recv.c +++ b/iguana/iguana_recv.c @@ -385,7 +385,7 @@ int32_t iguana_bundleiters(struct iguana_info *coin,struct iguana_bundle *bp,int if ( (block= bp->blocks[i]) != 0 && block->numrequests == 0 && block->mainchain != 0 ) { block->numrequests++; - iguana_blockQ(coin,bp,i,block->RO.hash2,0); + iguana_blockQ(coin,bp,i,block->RO.hash2,bp->hdrsi == 0); //printf("%d ",i); } }