Browse Source

Create generic evalcode CC funds

pull/4/head
jl777 6 years ago
parent
commit
26e796c068
  1. 9
      src/cc/CCcustom.cpp
  2. 2
      src/cc/CCfaucet.h
  3. 3
      src/cc/CCinclude.h
  4. 4
      src/cc/CCtx.cpp
  5. 9
      src/cc/CCutils.cpp
  6. 7
      src/cc/faucet.cpp

9
src/cc/CCcustom.cpp

@ -27,7 +27,7 @@
*/
CC *MakeAssetCond(CPubKey pk);
CC *MakeFaucetCond(CPubKey pk);
//CC *MakeFaucetCond(CPubKey pk);
CC *MakeRewardsCond(CPubKey pk);
//BTCD Address: RAssetsAtGnvwgK9gVHBbAU4sVTah1hAm5
@ -123,7 +123,7 @@ CPubKey GetUnspendable(uint8_t evalcode,uint8_t *unspendablepriv)
else return(nullpk);
}
CC *MakeCC(uint8_t evalcode,CPubKey pk)
/*CC *MakeCC(uint8_t evalcode,CPubKey pk)
{
if ( evalcode == EVAL_ASSETS || evalcode == EVAL_FAUCET || evalcode == EVAL_REWARDS )
{
@ -133,7 +133,7 @@ CC *MakeCC(uint8_t evalcode,CPubKey pk)
CC *Sig = CCNewThreshold(1, pks);
return CCNewThreshold(2, {assetCC, Sig});
} else return(0);
}
}*/
bool GetCCaddress(uint8_t evalcode,char *destaddr,CPubKey pk)
{
@ -152,7 +152,8 @@ bool GetCCaddress(uint8_t evalcode,char *destaddr,CPubKey pk)
}
else if ( evalcode == EVAL_FAUCET )
{
if ( (payoutCond= MakeFaucetCond(pk)) != 0 )
if ( (payoutCond= MakeCCcond1(evalcode,pk)) != 0 )
//if ( (payoutCond= MakeFaucetCond(pk)) != 0 )
{
Getscriptaddress(destaddr,CCPubKey(payoutCond));
cc_free(payoutCond);

2
src/cc/CCfaucet.h

@ -26,7 +26,7 @@ extern char FaucetCChexstr[67];
// CCcustom
bool IsFaucetInput(CScript const& scriptSig);
CC *MakeFaucetCond(CPubKey pk);
//CC *MakeFaucetCond(CPubKey pk);
std::string FaucetFund(uint64_t txfee,uint64_t funds);
std::string FaucetGet(uint64_t txfee);

3
src/cc/CCinclude.h

@ -37,10 +37,11 @@ static uint256 zeroid;
// CCcustom
CPubKey GetUnspendable(uint8_t evalcode,uint8_t *unspendablepriv);
CC *MakeCC(uint8_t evalcode,CPubKey pk);
//CC *MakeCC(uint8_t evalcode,CPubKey pk);
bool GetCCaddress(uint8_t evalcode,char *destaddr,CPubKey pk);
// CCutils
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk);
CC* GetCryptoCondition(CScript const& scriptSig);
bool IsCCInput(CScript const& scriptSig);
uint256 revuint256(uint256 txid);

4
src/cc/CCtx.cpp

@ -56,9 +56,9 @@ std::string FinalizeCCTx(uint8_t evalcode,CMutableTransaction &mtx,CPubKey mypk,
Myprivkey(myprivkey);
unspendablepk = GetUnspendable(evalcode,unspendablepriv);
GetCCaddress(evalcode,myaddr,mypk);
mycond = MakeCC(evalcode,mypk);
mycond = MakeCCcond1(evalcode,mypk);
GetCCaddress(evalcode,unspendable,unspendablepk);
othercond = MakeCC(evalcode,unspendablepk);
othercond = MakeCCcond1(evalcode,unspendablepk);
//fprintf(stderr,"myCCaddr.(%s) %p vs unspendable.(%s) %p\n",myaddr,mycond,unspendable,othercond);
memset(utxovalues,0,sizeof(utxovalues));
for (i=0; i<n; i++)

9
src/cc/CCutils.cpp

@ -19,6 +19,15 @@
CCutils has low level functions that are universally useful for all contracts.
*/
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
CC *condCC = CCNewEval(E_MARSHAL(ss << evalcode));
CC *Sig = CCNewThreshold(1, pks);
return CCNewThreshold(2, {condCC, Sig});
}
CC* GetCryptoCondition(CScript const& scriptSig)
{
auto pc = scriptSig.begin();

7
src/cc/faucet.cpp

@ -26,19 +26,20 @@
To implement this, we can simply make any faucet vout fund the faucet. Then we can limit the number of confirmed utxo by combining faucet outputs and then only using utxo which are confirmed. This combined with a vout size limit will drastically limit the funds that can be withdrawn from the faucet.
*/
CC *MakeFaucetCond(CPubKey pk)
/*CC *MakeFaucetCond(CPubKey pk)
{
std::vector<CC*> pks; uint8_t evalcode = EVAL_FAUCET;
pks.push_back(CCNewSecp256k1(pk));
CC *faucetCC = CCNewEval(E_MARSHAL(ss << evalcode));
CC *Sig = CCNewThreshold(1, pks);
return CCNewThreshold(2, {faucetCC, Sig});
}
}*/
CTxOut MakeFaucetVout(CAmount nValue,CPubKey pk)
{
CTxOut vout;
CC *payoutCond = MakeFaucetCond(pk);
//CC *payoutCond = MakeFaucetCond(pk);
CC *payoutCond = MakeCCcond1(EVAL_FAUCET,pk);
vout = CTxOut(nValue,CCPubKey(payoutCond));
cc_free(payoutCond);
return(vout);

Loading…
Cancel
Save