|
|
@ -537,20 +537,21 @@ std::string GatewaysBind(uint64_t txfee,std::string coin,uint256 tokenid,int64_t |
|
|
|
|
|
|
|
uint256 GatewaysReverseScan(uint256 &txid,int32_t height,uint256 reforacletxid,uint256 batontxid) |
|
|
|
{ |
|
|
|
CTransaction tx; uint256 hash,mhash,bhash,hashBlock,oracletxid; int64_t val; int32_t numvouts; int64_t merkleht; CPubKey pk; std::vector<uint8_t>data; |
|
|
|
CTransaction tx; uint256 hash,mhash,bhash,hashBlock,oracletxid; int32_t len,len2,numvouts; int64_t val,merkleht; CPubKey pk; std::vector<uint8_t>data; |
|
|
|
txid = zeroid; |
|
|
|
char str[65]; fprintf(stderr,"start reverse scan %s\n",uint256_str(str,batontxid)); |
|
|
|
//char str[65]; fprintf(stderr,"start reverse scan %s\n",uint256_str(str,batontxid));
|
|
|
|
while ( GetTransaction(batontxid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) > 0 ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"check %s\n",uint256_str(str,batontxid)); |
|
|
|
//fprintf(stderr,"check %s\n",uint256_str(str,batontxid));
|
|
|
|
if ( DecodeOraclesData(tx.vout[numvouts-1].scriptPubKey,oracletxid,bhash,pk,data) == 'D' && oracletxid == reforacletxid ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"decoded %s\n",uint256_str(str,batontxid)); |
|
|
|
//fprintf(stderr,"decoded %s\n",uint256_str(str,batontxid));
|
|
|
|
if ( oracle_format(&hash,&merkleht,0,'I',(uint8_t *)data.data(),0,(int32_t)data.size()) == sizeof(int32_t) && merkleht == height ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"found merkleht.%d\n",(int32_t)merkleht); |
|
|
|
if ( oracle_format(&hash,&val,0,'h',(uint8_t *)data.data(),sizeof(int32_t),(int32_t)data.size()) == sizeof(hash) && |
|
|
|
oracle_format(&mhash,&val,0,'h',(uint8_t *)data.data(),(int32_t)(sizeof(int32_t)+sizeof(uint256)),(int32_t)data.size()) == sizeof(hash) && mhash != zeroid ) |
|
|
|
len = oracle_format(&hash,&val,0,'h',(uint8_t *)data.data(),sizeof(int32_t),(int32_t)data.size()); |
|
|
|
len2 = oracle_format(&mhash,&val,0,'h',(uint8_t *)data.data(),(int32_t)(sizeof(int32_t)+sizeof(uint256)),(int32_t)data.size()); |
|
|
|
char str2[65]; fprintf(stderr,"found merkleht.%d len.%d len2.%d %s %s\n",(int32_t)merkleht,len,len2,uint256_str(str,hash),uint256_str(str2,mhash)); |
|
|
|
if ( len == sizeof(hash) && len2 == sizeof(mhash) && mhash != zeroid ) |
|
|
|
{ |
|
|
|
txid = batontxid; |
|
|
|
fprintf(stderr,"set txid\n"); |
|
|
|