struct CCcontract_info *cp,
This commit is contained in:
@@ -37,8 +37,8 @@ bool SetAssetOrigpubkey(std::vector<uint8_t> &origpubkey,uint64_t &price,const C
|
|||||||
uint64_t IsAssetvout(uint64_t &price,std::vector<uint8_t> &origpubkey,const CTransaction& tx,int32_t v,uint256 refassetid);
|
uint64_t IsAssetvout(uint64_t &price,std::vector<uint8_t> &origpubkey,const CTransaction& tx,int32_t v,uint256 refassetid);
|
||||||
bool ValidateAssetRemainder(int32_t sellflag,uint64_t remaining_price,uint64_t remaining_nValue,uint64_t orig_nValue,uint64_t received_nValue,uint64_t paidprice,uint64_t totalprice);
|
bool ValidateAssetRemainder(int32_t sellflag,uint64_t remaining_price,uint64_t remaining_nValue,uint64_t orig_nValue,uint64_t received_nValue,uint64_t paidprice,uint64_t totalprice);
|
||||||
bool SetAssetFillamounts(int32_t sellflag,uint64_t &paid,uint64_t &remaining_price,uint64_t orig_nValue,uint64_t &received,uint64_t totalprice);
|
bool SetAssetFillamounts(int32_t sellflag,uint64_t &paid,uint64_t &remaining_price,uint64_t orig_nValue,uint64_t &received,uint64_t totalprice);
|
||||||
uint64_t AssetValidateBuyvin(Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 refassetid);
|
uint64_t AssetValidateBuyvin(struct CCcontract_info *cp,Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 refassetid);
|
||||||
uint64_t AssetValidateSellvin(Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 assetid);
|
uint64_t AssetValidateSellvin(struct CCcontract_info *cp,Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 assetid);
|
||||||
bool AssetExactAmounts(struct CCcontract_info *cp,uint64_t &inputs,int32_t starti,uint64_t &outputs,Eval* eval,const CTransaction &tx,uint256 assetid);
|
bool AssetExactAmounts(struct CCcontract_info *cp,uint64_t &inputs,int32_t starti,uint64_t &outputs,Eval* eval,const CTransaction &tx,uint256 assetid);
|
||||||
|
|
||||||
// CCassetstx
|
// CCassetstx
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ uint64_t IsAssetvout(uint64_t &price,std::vector<uint8_t> &origpubkey,const CTra
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t AssetValidateCCvin(Eval* eval,char *CCaddr,char *origaddr,const CTransaction &tx,int32_t vini,CTransaction &vinTx)
|
uint64_t AssetValidateCCvin(struct CCcontract_info *cp,Eval* eval,char *CCaddr,char *origaddr,const CTransaction &tx,int32_t vini,CTransaction &vinTx)
|
||||||
{
|
{
|
||||||
uint256 hashBlock; char destaddr[64];
|
uint256 hashBlock; char destaddr[64];
|
||||||
origaddr[0] = destaddr[0] = CCaddr[0] = 0;
|
origaddr[0] = destaddr[0] = CCaddr[0] = 0;
|
||||||
@@ -251,7 +251,7 @@ uint64_t AssetValidateCCvin(Eval* eval,char *CCaddr,char *origaddr,const CTransa
|
|||||||
fprintf(stderr," vini.%d\n",vini);
|
fprintf(stderr," vini.%d\n",vini);
|
||||||
return eval->Invalid("always should find CCvin, but didnt");
|
return eval->Invalid("always should find CCvin, but didnt");
|
||||||
}
|
}
|
||||||
else if ( Getscriptaddress(destaddr,vinTx.vout[tx.vin[vini].prevout.n].scriptPubKey) == 0 || strcmp(destaddr,(char *)AssetsCCaddr) != 0 )
|
else if ( Getscriptaddress(destaddr,vinTx.vout[tx.vin[vini].prevout.n].scriptPubKey) == 0 || strcmp(destaddr,(char *)cp->unspendableCCaddr) != 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s vs %s\n",destaddr,(char *)AssetsCCaddr);
|
fprintf(stderr,"%s vs %s\n",destaddr,(char *)AssetsCCaddr);
|
||||||
return eval->Invalid("invalid vin AssetsCCaddr");
|
return eval->Invalid("invalid vin AssetsCCaddr");
|
||||||
@@ -264,11 +264,11 @@ uint64_t AssetValidateCCvin(Eval* eval,char *CCaddr,char *origaddr,const CTransa
|
|||||||
return(vinTx.vout[0].nValue);
|
return(vinTx.vout[0].nValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t AssetValidateBuyvin(Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 refassetid)
|
uint64_t AssetValidateBuyvin(struct CCcontract_info *cp,Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 refassetid)
|
||||||
{
|
{
|
||||||
CTransaction vinTx; uint64_t nValue; uint256 assetid,assetid2; uint8_t funcid;
|
CTransaction vinTx; uint64_t nValue; uint256 assetid,assetid2; uint8_t funcid;
|
||||||
CCaddr[0] = origaddr[0] = 0;
|
CCaddr[0] = origaddr[0] = 0;
|
||||||
if ( (nValue= AssetValidateCCvin(eval,CCaddr,origaddr,tx,1,vinTx)) == 0 )
|
if ( (nValue= AssetValidateCCvin(cp,eval,CCaddr,origaddr,tx,1,vinTx)) == 0 )
|
||||||
return(0);
|
return(0);
|
||||||
else if ( vinTx.vout[0].scriptPubKey.IsPayToCryptoCondition() == 0 )
|
else if ( vinTx.vout[0].scriptPubKey.IsPayToCryptoCondition() == 0 )
|
||||||
return eval->Invalid("invalid normal vout0 for buyvin");
|
return eval->Invalid("invalid normal vout0 for buyvin");
|
||||||
@@ -286,11 +286,11 @@ uint64_t AssetValidateBuyvin(Eval* eval,uint64_t &tmpprice,std::vector<uint8_t>
|
|||||||
return(nValue);
|
return(nValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t AssetValidateSellvin(Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 assetid)
|
uint64_t AssetValidateSellvin(struct CCcontract_info *cp,Eval* eval,uint64_t &tmpprice,std::vector<uint8_t> &tmporigpubkey,char *CCaddr,char *origaddr,const CTransaction &tx,uint256 assetid)
|
||||||
{
|
{
|
||||||
CTransaction vinTx; uint64_t nValue,assetoshis;
|
CTransaction vinTx; uint64_t nValue,assetoshis;
|
||||||
fprintf(stderr,"AssetValidateSellvin\n");
|
fprintf(stderr,"AssetValidateSellvin\n");
|
||||||
if ( (nValue= AssetValidateCCvin(eval,CCaddr,origaddr,tx,1,vinTx)) == 0 )
|
if ( (nValue= AssetValidateCCvin(cp,eval,CCaddr,origaddr,tx,1,vinTx)) == 0 )
|
||||||
return(0);
|
return(0);
|
||||||
if ( (assetoshis= IsAssetvout(tmpprice,tmporigpubkey,vinTx,0,assetid)) != 0 )
|
if ( (assetoshis= IsAssetvout(tmpprice,tmporigpubkey,vinTx,0,assetid)) != 0 )
|
||||||
return eval->Invalid("invalid missing CC vout0 for sellvin");
|
return eval->Invalid("invalid missing CC vout0 for sellvin");
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ bool AssetsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx
|
|||||||
//vout.0: vin.1 assetoshis to original pubkey CC sellTx/exchangeTx.vout[0].nValue -> [origpubkey]
|
//vout.0: vin.1 assetoshis to original pubkey CC sellTx/exchangeTx.vout[0].nValue -> [origpubkey]
|
||||||
//vout.1: normal output for change (if any)
|
//vout.1: normal output for change (if any)
|
||||||
//vout.n-1: opreturn [EVAL_ASSETS] ['x'] [assetid]
|
//vout.n-1: opreturn [EVAL_ASSETS] ['x'] [assetid]
|
||||||
if ( (assetoshis= AssetValidateSellvin(eval,tmpprice,tmporigpubkey,CCaddr,origaddr,tx,assetid)) == 0 )
|
if ( (assetoshis= AssetValidateSellvin(cp,eval,tmpprice,tmporigpubkey,CCaddr,origaddr,tx,assetid)) == 0 )
|
||||||
return(false);
|
return(false);
|
||||||
else if ( ConstrainVout(tx.vout[0],1,CCaddr,assetoshis) == 0 )
|
else if ( ConstrainVout(tx.vout[0],1,CCaddr,assetoshis) == 0 )
|
||||||
return eval->Invalid("invalid vout for cancel");
|
return eval->Invalid("invalid vout for cancel");
|
||||||
@@ -291,7 +291,7 @@ bool AssetsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx
|
|||||||
if ( AssetExactAmounts(cp,inputs,1,outputs,eval,tx,assetid2) == false )
|
if ( AssetExactAmounts(cp,inputs,1,outputs,eval,tx,assetid2) == false )
|
||||||
eval->Invalid("asset2 inputs != outputs");
|
eval->Invalid("asset2 inputs != outputs");
|
||||||
}
|
}
|
||||||
if ( (assetoshis= AssetValidateSellvin(eval,totalunits,tmporigpubkey,CCaddr,origaddr,tx,assetid)) == 0 )
|
if ( (assetoshis= AssetValidateSellvin(cp,eval,totalunits,tmporigpubkey,CCaddr,origaddr,tx,assetid)) == 0 )
|
||||||
return(false);
|
return(false);
|
||||||
else if ( numvouts < 3 )
|
else if ( numvouts < 3 )
|
||||||
return eval->Invalid("not enough vouts for fill");
|
return eval->Invalid("not enough vouts for fill");
|
||||||
|
|||||||
Reference in New Issue
Block a user