Checkin small changes to share in prep for coinbase time locks

This commit is contained in:
Michael Toutonghi
2018-04-14 01:05:08 -07:00
parent 8c30b1b6b2
commit da94ffe5a6
3 changed files with 58 additions and 0 deletions

View File

@@ -57,6 +57,8 @@ uint32_t ASSETCHAINS_MAGIC = 2387029918;
uint64_t ASSETCHAINS_SUPPLY = 10;
uint64_t ASSETCHAINS_COMMISSION;
#define _ASSETCHAINS_TIMELOCKABOVE 0xffffffffffffffff
uint64_t ASSETCHAINS_TIMELOCKABOVE = _ASSETCHAINS_TIMELOCKABOVE;
uint32_t ASSETCHAINS_ERAS = 1;
uint64_t ASSETCHAINS_ENDSUBSIDY[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_HALVING[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_DECAY[ASSETCHAINS_MAX_ERAS];

View File

@@ -1035,6 +1035,51 @@ int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_
return(offset + opretlen - 1);
}
// we need to replace this with an include file (like script.h) that defines all opcodes, but for now,
// we'll keep these localized near where they're used in the two functions below
#define SCRIPT_OP_DUP 0x76
#define SCRIPT_OP_HASH160 0xa9
#define SCRIPT_OP_EQUALVERIFY 0x88
#define SCRIPT_OP_CHECKSIG 0xac
#define SCRIPT_OP_CHECKLOCKTIMEVERIFY 0xb1
#define SCRIPT_OP_DROP 0x75
// returns a standard spend script, but is here to add this to the CLTV script below
int32_t komodo_standardspend(uint8_t *script,int32_t n,uint8_t rmd160[20])
{
script[n++] = SCRIPT_OP_DUP;
script[n++] = SCRIPT_OP_HASH160;
script[n++] = 0x14; memcpy(&script[n],rmd160,0x14); n += 0x14;
script[n++] = SCRIPT_OP_EQUALVERIFY;
script[n++] = SCRIPT_OP_CHECKSIG;
return(n);
}
// returns a check lock time verify script to ensure that the UTXO cannot be spent
// until the specified lock time
int32_t komodo_checklocktimeverify(uint8_t *script,int32_t n,uint32_t locktime)
{
script[n++] = 4;
script[n++] = locktime & 0xff, locktime >>= 8;
script[n++] = locktime & 0xff, locktime >>= 8;
script[n++] = locktime & 0xff, locktime >>= 8;
script[n++] = locktime & 0xff;
script[n++] = SCRIPT_OP_CHECKLOCKTIMEVERIFY;
script[n++] = SCRIPT_OP_DROP;
return(n);
}
// returns a script that cannot be spent until the specified lock time by the specified
// address hash
int32_t komodo_timelockspend(uint8_t *script,int32_t n,uint8_t rmd160[20],uint32_t timestamp)
{
n = komodo_checklocktimeverify(script,n,timestamp);
n = komodo_standardspend(script,n,rmd160);
return(n);
}
long _stripwhite(char *buf,int accept)
{
int32_t i,j,c;
@@ -1669,6 +1714,8 @@ void komodo_args(char *argv0)
}
ASSETCHAINS_ERAS -= 1;
ASSETCHAINS_TIMELOCKABOVE = GetArg("-ac_lockabove", ASSETCHAINS_LOCKABOVE);
Split(GetArg("-ac_end",""), ASSETCHAINS_ENDSUBSIDY, 0);
Split(GetArg("-ac_reward",""), ASSETCHAINS_REWARD, 0);
Split(GetArg("-ac_halving",""), ASSETCHAINS_HALVING, 0);
@@ -1727,6 +1774,14 @@ void komodo_args(char *argv0)
extralen += iguana_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_HALVING[i]),(void *)&ASSETCHAINS_HALVING[i]);
extralen += iguana_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_DECAY[i]),(void *)&ASSETCHAINS_DECAY[i]);
}
// hash in lock above for time locked coinbase transactions above a certain reward value only if the lock above
// param was specified, otherwise, for compatibility, do nothing
if ( ASSETCHAINS_LOCKABOVE != _ASSETCHAINS_TIMELOCKABOVE )
{
extralen += iguana_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_LOCKABOVE),(void *)&ASSETCHAINS_LOCKABOVE);
}
extralen += iguana_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_COMMISSION),(void *)&ASSETCHAINS_COMMISSION);
}

View File

@@ -396,6 +396,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
// Add fees
txNew.vout[0].nValue += nFees;
txNew.vin[0].scriptSig = CScript() << nHeight << OP_0;
/*if ( ASSETCHAINS_SYMBOL[0] == 0 )
{
int32_t i,opretlen; uint8_t opret[256],*ptr;