@ -267,7 +267,8 @@ int32_t dpow_voutstandard(struct supernet_info *myinfo,struct dpow_block *bp,uin
bits256 dpow_notarytx ( struct supernet_info * myinfo , char * signedtx , int32_t * numsigsp , int32_t isPoS , struct dpow_block * bp , int8_t bestk , uint64_t bestmask , int32_t usesigs , int32_t src_or_dest , uint8_t pubkeys [ ] [ 33 ] , int32_t numratified )
{
uint32_t k , m , numsigs , version , vout , crcval , sequenceid = 0xffffffff ; bits256 zero ; int32_t n , siglen , len ; uint8_t serialized [ 32768 ] , * sig ; bits256 txid ; struct dpow_entry * ep ; struct dpow_coinentry * cp ;
// int32_t preimage_len; uint8_t preimage[32768]; // here we will create preimage, when usesigs=0 (?)
struct iguana_info * coin = ( src_or_dest ! = 0 ) ? bp - > destcoin : bp - > srccoin ;
uint32_t zcash = ( strcmp ( coin - > symbol , " VRSC " ) = = 0 | | strcmp ( coin - > symbol , " VRSCTEST " ) = = 0 ) ;
printf ( " [Decker] dpow_notarytx: src.(%s) dst.(%s) src_or_dest.(%d) usesigs.(%d) \n " , bp - > srccoin - > symbol , bp - > destcoin - > symbol , src_or_dest , usesigs ) ;
@ -290,7 +291,6 @@ bits256 dpow_notarytx(struct supernet_info *myinfo,char *signedtx,int32_t *numsi
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( versiongroupid ) , & versiongroupid ) ;
}
if ( isPoS ! = 0 )
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( bp - > timestamp ) , & bp - > timestamp ) ;
m = bp - > minsigs ;
@ -344,7 +344,7 @@ bits256 dpow_notarytx(struct supernet_info *myinfo,char *signedtx,int32_t *numsi
len + = iguana_rwbignum ( 1 , & serialized [ len ] , sizeof ( txid ) , txid . bytes ) ;
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( vout ) , & vout ) ;
if ( usesigs ! = 0 & & bestk > = 0 )
if ( usesigs ! = 0 & & bestk > = 0 ) // usesigs=1 -> insert signature
{
len + = iguana_rwvarint32 ( 1 , & serialized [ len ] , ( uint32_t * ) & siglen ) ;
if ( siglen > 0 & & siglen < = sizeof ( cp - > sigs [ bestk ] ) )
@ -353,7 +353,7 @@ bits256 dpow_notarytx(struct supernet_info *myinfo,char *signedtx,int32_t *numsi
len + = siglen ;
numsigs + + ;
} //else printf("%s -> %s src_or_dest.%d Missing sig from k.%d\n",bp->srccoin->symbol,bp->destcoin->symbol,src_or_dest,k);
} else serialized [ len + + ] = 0 ;
} else serialized [ len + + ] = 0 ; // usesigs=0 -> insert scriptlen = 0
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( sequenceid ) , & sequenceid ) ;
//printf("height.%d mod.%d VINI.%d <- i.%d j.%d\n",height,height % numnotaries,m,i,j);
@ -369,6 +369,22 @@ bits256 dpow_notarytx(struct supernet_info *myinfo,char *signedtx,int32_t *numsi
return ( zero ) ;
}
len + = n ;
if ( zcash ) {
uint32_t nExpiryHeight = 0 ;
uint64_t valueBalance = 0 ;
uint8_t nShieldedSpend = 0 ;
uint8_t nShieldedOutput = 0 ;
uint8_t nJoinSplit = 0 ;
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( nExpiryHeight ) , & nExpiryHeight ) ;
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( valueBalance ) , & valueBalance ) ;
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( nShieldedSpend ) , & nShieldedSpend ) ; // The number of Spend descriptions in vShieldedSpend
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( nShieldedOutput ) , & nShieldedOutput ) ; // The number of Output descriptions in vShieldedOutput
len + = iguana_rwnum ( 1 , & serialized [ len ] , sizeof ( nJoinSplit ) , & nJoinSplit ) ; // The number of JoinSplit descriptions in vJoinSplit
}
// here if usesigs=0 we have unsigned tx (not preimage), if usesigs=1 - we have signed tx with sigs from nn_bus network (?)
init_hexbytes_noT ( signedtx , serialized , len ) ;
printf ( " [Decker] dpow_notarytx: signedtx.(%s) \n " , signedtx ) ;