|
|
@ -160,48 +160,6 @@ bool GetCustomscriptaddress(char *destaddr,const CScript &scriptPubKey,uint8_t t |
|
|
|
return(false); |
|
|
|
} |
|
|
|
|
|
|
|
bool GetCCParams(Eval* eval, const CTransaction &tx, uint32_t nIn, |
|
|
|
CTransaction &txOut, std::vector<std::vector<unsigned char>> &preConditions, std::vector<std::vector<unsigned char>> ¶ms) |
|
|
|
{ |
|
|
|
uint256 blockHash; |
|
|
|
|
|
|
|
if (myGetTransaction(tx.vin[nIn].prevout.hash, txOut, blockHash) && txOut.vout.size() > tx.vin[nIn].prevout.n) |
|
|
|
{ |
|
|
|
CBlockIndex index; |
|
|
|
if (eval->GetBlock(blockHash, index)) |
|
|
|
{ |
|
|
|
// read preconditions
|
|
|
|
CScript subScript = CScript(); |
|
|
|
preConditions.clear(); |
|
|
|
if (txOut.vout[tx.vin[nIn].prevout.n].scriptPubKey.IsPayToCryptoCondition(&subScript, preConditions)) |
|
|
|
{ |
|
|
|
// read any available parameters in the output transaction
|
|
|
|
params.clear(); |
|
|
|
if (tx.vout.size() > 0 && tx.vout[tx.vout.size() - 1].scriptPubKey.IsOpReturn()) |
|
|
|
{ |
|
|
|
if (tx.vout[tx.vout.size() - 1].scriptPubKey.GetOpretData(params) && params.size() == 1) |
|
|
|
{ |
|
|
|
CScript scr = CScript(params[0].begin(), params[0].end()); |
|
|
|
|
|
|
|
// printf("Script decoding inner:\n%s\nouter:\n%s\n", scr.ToString().c_str(), tx.vout[tx.vout.size() - 1].scriptPubKey.ToString().c_str());
|
|
|
|
|
|
|
|
if (!scr.GetPushedData(scr.begin(), params)) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
else return true; |
|
|
|
} |
|
|
|
else return false; |
|
|
|
} |
|
|
|
else return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
//fprintf(stderr,"ExtractDestination failed\n");
|
|
|
|
return(false); |
|
|
|
} |
|
|
|
|
|
|
|
bool pubkey2addr(char *destaddr,uint8_t *pubkey33) |
|
|
|
{ |
|
|
|
std::vector<uint8_t>pk; int32_t i; |
|
|
@ -210,58 +168,6 @@ bool pubkey2addr(char *destaddr,uint8_t *pubkey33) |
|
|
|
return(Getscriptaddress(destaddr,CScript() << pk << OP_CHECKSIG)); |
|
|
|
} |
|
|
|
|
|
|
|
CPubKey CCtxidaddr(char *txidaddr,uint256 txid) |
|
|
|
{ |
|
|
|
uint8_t buf33[33]; CPubKey pk; |
|
|
|
buf33[0] = 0x02; |
|
|
|
endiancpy(&buf33[1],(uint8_t *)&txid,32); |
|
|
|
pk = buf2pk(buf33); |
|
|
|
Getscriptaddress(txidaddr,CScript() << ParseHex(HexStr(pk)) << OP_CHECKSIG); |
|
|
|
return(pk); |
|
|
|
} |
|
|
|
|
|
|
|
CPubKey CCCustomtxidaddr(char *txidaddr,uint256 txid,uint8_t taddr,uint8_t prefix,uint8_t prefix2) |
|
|
|
{ |
|
|
|
uint8_t buf33[33]; CPubKey pk; |
|
|
|
buf33[0] = 0x02; |
|
|
|
endiancpy(&buf33[1],(uint8_t *)&txid,32); |
|
|
|
pk = buf2pk(buf33); |
|
|
|
GetCustomscriptaddress(txidaddr,CScript() << ParseHex(HexStr(pk)) << OP_CHECKSIG,taddr,prefix,prefix2); |
|
|
|
return(pk); |
|
|
|
} |
|
|
|
|
|
|
|
bool _GetCCaddress(char *destaddr,uint8_t evalcode,CPubKey pk) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool GetCCaddress(struct CCcontract_info *cp,char *destaddr,CPubKey pk) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool _GetTokensCCaddress(char *destaddr, uint8_t evalcode, uint8_t evalcode2, CPubKey pk) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// get scriptPubKey adddress for three/dual eval token cc vout
|
|
|
|
bool GetTokensCCaddress(struct CCcontract_info *cp, char *destaddr, CPubKey pk) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool GetCCaddress1of2(struct CCcontract_info *cp,char *destaddr,CPubKey pk,CPubKey pk2) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool GetTokensCCaddress1of2(struct CCcontract_info *cp, char *destaddr, CPubKey pk, CPubKey pk2) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool ConstrainVout(CTxOut vout, int32_t CCflag, char *cmpaddr, int64_t nValue) |
|
|
|
{ |
|
|
|
char destaddr[64]; |
|
|
@ -283,31 +189,6 @@ bool ConstrainVout(CTxOut vout, int32_t CCflag, char *cmpaddr, int64_t nValue) |
|
|
|
else return(true); |
|
|
|
} |
|
|
|
|
|
|
|
bool PreventCC(Eval* eval,const CTransaction &tx,int32_t preventCCvins,int32_t numvins,int32_t preventCCvouts,int32_t numvouts) |
|
|
|
{ |
|
|
|
int32_t i; |
|
|
|
if ( preventCCvins >= 0 ) |
|
|
|
{ |
|
|
|
for (i=preventCCvins; i<numvins; i++) |
|
|
|
{ |
|
|
|
if ( IsCCInput(tx.vin[i].scriptSig) != 0 ) |
|
|
|
return eval->Invalid("invalid CC vin"); |
|
|
|
} |
|
|
|
} |
|
|
|
if ( preventCCvouts >= 0 ) |
|
|
|
{ |
|
|
|
for (i=preventCCvouts; i<numvouts; i++) |
|
|
|
{ |
|
|
|
if ( tx.vout[i].scriptPubKey.IsPayToCryptoCondition() != 0 ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"vout.%d is CC\n",i); |
|
|
|
return eval->Invalid("invalid CC vout"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return(true); |
|
|
|
} |
|
|
|
|
|
|
|
bool priv2addr(char *coinaddr,uint8_t *buf33,uint8_t priv32[32]) |
|
|
|
{ |
|
|
|
CKey priv; CPubKey pk; int32_t i; uint8_t *src; |
|
|
|