|
|
@ -2137,7 +2137,7 @@ int32_t base58encode_checkbuf(uint8_t taddr,uint8_t addrtype,uint8_t *data,int32 |
|
|
|
|
|
|
|
int32_t bitcoin_wif2priv(uint8_t wiftaddr,uint8_t *addrtypep,bits256 *privkeyp,char *wifstr) |
|
|
|
{ |
|
|
|
int32_t offset,len = -1; bits256 hash; uint8_t pbuf[38],buf[256],*ptr; |
|
|
|
int32_t offset,len = -1; bits256 hash; uint8_t buf[256],*ptr; |
|
|
|
offset = 1 + (wiftaddr != 0); |
|
|
|
memset(buf,0,sizeof(buf)); |
|
|
|
memset(privkeyp,0,sizeof(*privkeyp)); |
|
|
@ -2597,39 +2597,6 @@ int32_t iguana_calcrmd160(uint8_t taddr,uint8_t pubtype,uint8_t p2shtype,char *a |
|
|
|
return(vp->type); |
|
|
|
} |
|
|
|
|
|
|
|
/*uint32_t iguana_vinscriptparse(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2shtype,struct vin_info *vp,uint32_t *sigsizep,uint32_t *pubkeysizep,uint32_t *p2shsizep,uint32_t *userdatalenp,uint8_t *vinscript,int32_t scriptlen,int32_t zcash)
|
|
|
|
{ |
|
|
|
uint32_t hashtype; uint8_t *userdata = 0; |
|
|
|
*sigsizep = *pubkeysizep = *p2shsizep = *userdatalenp = 0; |
|
|
|
if ( bitcoin_scriptget(symbol,taddr,pubtype,p2shtype,&hashtype,sigsizep,pubkeysizep,&userdata,userdatalenp,vp,vinscript,scriptlen,0,zcash) < 0 ) |
|
|
|
{ |
|
|
|
printf("iguana_vinscriptparse: error parsing vinscript?\n"); |
|
|
|
return(-1); |
|
|
|
} |
|
|
|
if ( userdata != 0 && *userdatalenp > 0 ) |
|
|
|
memcpy(vp->userdata,userdata,*userdatalenp); |
|
|
|
if ( vp->type == IGUANA_SCRIPT_P2SH ) |
|
|
|
{ |
|
|
|
*p2shsizep = vp->p2shlen + 1 + (vp->p2shlen >= 0xfd)*2; |
|
|
|
//printf("P2SHSIZE.%d\n",*p2shsizep);
|
|
|
|
} |
|
|
|
return(hashtype); |
|
|
|
}*/ |
|
|
|
|
|
|
|
/*char *iguana_scriptget(struct iguana_info *coin,char *scriptstr,char *asmstr,int32_t max,int32_t hdrsi,uint32_t unspentind,bits256 txid,int32_t vout,uint8_t *rmd160,int32_t type,uint8_t *pubkey33)
|
|
|
|
{ |
|
|
|
int32_t scriptlen; uint8_t script[IGUANA_MAXSCRIPTSIZE]; struct vin_info V,*vp = &V; |
|
|
|
memset(vp,0,sizeof(*vp)); |
|
|
|
scriptstr[0] = 0; |
|
|
|
if ( asmstr != 0 ) |
|
|
|
asmstr[0] = 0; |
|
|
|
if ( pubkey33 != 0 && bitcoin_pubkeylen(pubkey33) > 0 ) |
|
|
|
memcpy(vp->signers[0].pubkey,pubkey33,33); |
|
|
|
scriptlen = iguana_scriptgen(coin,&vp->M,&vp->N,vp->coinaddr,script,asmstr,rmd160,type,(const struct vin_info *)vp,vout); |
|
|
|
init_hexbytes_noT(scriptstr,script,scriptlen); |
|
|
|
return(scriptstr); |
|
|
|
}*/ |
|
|
|
|
|
|
|
cJSON *bitcoin_txscript(char *asmstr,char **vardata,int32_t numvars) |
|
|
|
{ |
|
|
|
int32_t i; cJSON *scriptjson,*array; |
|
|
@ -3297,19 +3264,21 @@ int32_t iguana_rwmsgtx(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2shty |
|
|
|
|
|
|
|
bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2shtype,uint8_t isPoS,int32_t height,uint8_t *serialized,int32_t maxlen,struct iguana_msgtx *msgtx,int32_t vini,uint8_t *spendscript,int32_t spendlen,uint64_t spendamount,uint32_t hashtype,char *vpnstr,int32_t suppress_pubkeys,int32_t zcash) |
|
|
|
{ |
|
|
|
int32_t i,len; bits256 sigtxid,txid,revsigtxid; struct iguana_msgtx dest; |
|
|
|
int32_t i,len,sbtcflag = 0; bits256 sigtxid,txid,revsigtxid; struct iguana_msgtx dest; |
|
|
|
dest = *msgtx; |
|
|
|
dest.vins = calloc(dest.tx_in,sizeof(*dest.vins)); |
|
|
|
dest.vouts = calloc(dest.tx_out,sizeof(*dest.vouts)); |
|
|
|
memcpy(dest.vins,msgtx->vins,dest.tx_in * sizeof(*dest.vins)); |
|
|
|
memcpy(dest.vouts,msgtx->vouts,dest.tx_out * sizeof(*dest.vouts)); |
|
|
|
memset(sigtxid.bytes,0,sizeof(sigtxid)); |
|
|
|
if ( strcmp(symbol,"SBTC") == 0 ) |
|
|
|
sbtcflag = 1; |
|
|
|
if ( ((hashtype & ~SIGHASH_FORKID) & 0xff) != SIGHASH_ALL ) |
|
|
|
{ |
|
|
|
printf("currently only SIGHASH_ALL supported, not %d\n",hashtype); |
|
|
|
return(sigtxid); |
|
|
|
} |
|
|
|
if ( (hashtype & SIGHASH_FORKID) == 0 ) |
|
|
|
if ( (hashtype & SIGHASH_FORKID) == 0 || sbtcflag != 0 ) |
|
|
|
{ |
|
|
|
for (i=0; i<dest.tx_in; i++) |
|
|
|
{ |
|
|
@ -3339,6 +3308,11 @@ bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2sht |
|
|
|
hashtype |= (0x777 << 20); |
|
|
|
#endif |
|
|
|
len += iguana_rwnum(1,&serialized[len],sizeof(hashtype),&hashtype); |
|
|
|
if ( sbtcflag != 0 ) |
|
|
|
{ |
|
|
|
memcpy(&serialized[len],"sbtc",4); |
|
|
|
len += 4; |
|
|
|
} |
|
|
|
} |
|
|
|
revsigtxid = bits256_doublesha256(0,serialized,len); |
|
|
|
for (i=0; i<sizeof(revsigtxid); i++) |
|
|
@ -3457,10 +3431,10 @@ bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2sht |
|
|
|
len += iguana_rwbignum(1,&serialized[len],sizeof(outputhash),outputhash.bytes); |
|
|
|
len += iguana_rwnum(1,&serialized[len],sizeof(dest.lock_time),&dest.lock_time); |
|
|
|
len += iguana_rwnum(1,&serialized[len],sizeof(hashtype),&hashtype); |
|
|
|
for (i=0; i<len; i++) |
|
|
|
printf("%02x",serialized[i]); |
|
|
|
//for (i=0; i<len; i++)
|
|
|
|
// printf("%02x",serialized[i]);
|
|
|
|
revsigtxid = bits256_doublesha256(0,serialized,len); |
|
|
|
printf(" B path version.%08x spendamount %.8f locktime %u hashtype %08x %s\n",dest.version,dstr(spendamount),dest.lock_time,hashtype,bits256_str(str,revsigtxid)); |
|
|
|
//printf(" B path version.%08x spendamount %.8f locktime %u hashtype %08x %s\n",dest.version,dstr(spendamount),dest.lock_time,hashtype,bits256_str(str,revsigtxid));
|
|
|
|
for (i=0; i<sizeof(revsigtxid); i++) |
|
|
|
sigtxid.bytes[31-i] = revsigtxid.bytes[i]; |
|
|
|
//sigtxid = revsigtxid;
|
|
|
@ -3508,6 +3482,8 @@ uint32_t LP_sighash(char *symbol,int32_t zcash) |
|
|
|
sighash |= SIGHASH_FORKID; |
|
|
|
sighash |= (LP_IS_BITCOINGOLD << 8); |
|
|
|
} |
|
|
|
else if ( strcmp(symbol,"SBTC") == 0 ) |
|
|
|
sighash |= SIGHASH_FORKID; |
|
|
|
return(sighash); |
|
|
|
} |
|
|
|
|
|
|
|