add min recv size and whitelist address
This commit is contained in:
@@ -797,7 +797,7 @@ int32_t komodo_notarycmp(uint8_t *scriptPubKey,int32_t scriptlen,uint8_t pubkeys
|
||||
void komodo_connectblock(CBlockIndex *pindex,CBlock& block)
|
||||
{
|
||||
static int32_t hwmheight;
|
||||
int8_t staked_era; static int8_t lastStakedEra;
|
||||
int32_t staked_era; static int32_t lastStakedEra;
|
||||
|
||||
uint64_t signedmask,voutmask; char symbol[KOMODO_ASSETCHAIN_MAXLEN],dest[KOMODO_ASSETCHAIN_MAXLEN]; struct komodo_state *sp;
|
||||
uint8_t scriptbuf[10001],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 zero,btctxid,txhash;
|
||||
@@ -823,7 +823,9 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block)
|
||||
if ( (IS_STAKED_NOTARY= updateStakedNotary()) > -1 )
|
||||
{
|
||||
IS_KOMODO_NOTARY = 0;
|
||||
fprintf(stderr, "Staked Notary Protection Active! NotaryID.%d RADD.%s ERA.%d\n",IS_STAKED_NOTARY,NOTARY_ADDRESS.c_str(),staked_era);
|
||||
if ( MIN_RECV_SATS == -1 )
|
||||
MIN_RECV_SATS = 100000000;
|
||||
fprintf(stderr, "Staked Notary Protection Active! NotaryID.%d RADD.%s ERA.%d MIN_TX_VALUE.%lu \n",IS_STAKED_NOTARY,NOTARY_ADDRESS.c_str(),staked_era,MIN_RECV_SATS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100;
|
||||
|
||||
int32_t KOMODO_MININGTHREADS = -1,IS_KOMODO_NOTARY,IS_STAKED_NOTARY,ASSETCHAINS_STREAM,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE,KOMODO_PAX,KOMODO_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1;
|
||||
int32_t KOMODO_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1;
|
||||
std::string ASSETCHAINS_OVERRIDE_ADDRESS,NOTARY_ADDRESS,NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY;
|
||||
std::string ASSETCHAINS_OVERRIDE_ADDRESS,NOTARY_ADDRESS,NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,WHITELIST_ADDRESS;
|
||||
uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,NUM_NOTARIES;
|
||||
|
||||
char ASSETCHAINS_SYMBOL[KOMODO_ASSETCHAIN_MAXLEN],ASSETCHAINS_USERPASS[4096],NOTARYADDRS[64][36];
|
||||
@@ -54,7 +54,7 @@ uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT;
|
||||
uint32_t ASSETCHAIN_INIT,ASSETCHAINS_CC,KOMODO_STOPAT,KOMODO_DPOWCONFS = 1;
|
||||
uint32_t ASSETCHAINS_MAGIC = 2387029918;
|
||||
uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE;
|
||||
uint64_t ASSETCHAINS_FOUNDERS_REWARD,ASSETCHAINS_ENDSUBSIDY,ASSETCHAINS_REWARD,ASSETCHAINS_HALVING,ASSETCHAINS_DECAY,ASSETCHAINS_COMMISSION,ASSETCHAINS_STAKED,ASSETCHAINS_SUPPLY = 10;
|
||||
uint64_t ASSETCHAINS_FOUNDERS_REWARD,ASSETCHAINS_ENDSUBSIDY,ASSETCHAINS_REWARD,ASSETCHAINS_HALVING,ASSETCHAINS_DECAY,ASSETCHAINS_COMMISSION,ASSETCHAINS_STAKED,ASSETCHAINS_SUPPLY = 10,MIN_RECV_SATS;
|
||||
|
||||
uint32_t KOMODO_INITDONE;
|
||||
char KMDUSERPASS[8192],BTCUSERPASS[8192]; uint16_t KMD_PORT = 7771,BITCOIND_RPCPORT = 7771;
|
||||
|
||||
@@ -252,7 +252,7 @@ int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestam
|
||||
{ // here we can activate our pubkeys for STAKED chains everythig is in notaries_staked.cpp
|
||||
if (timestamp != 0)
|
||||
{
|
||||
int staked_era; int32_t numSN;
|
||||
int32_t staked_era; int8_t numSN;
|
||||
uint8_t staked_pubkeys[64][33];
|
||||
staked_era = STAKED_era(timestamp);
|
||||
numSN = numStakedNotaries(staked_pubkeys,staked_era);
|
||||
|
||||
@@ -1511,6 +1511,8 @@ void komodo_args(char *argv0)
|
||||
fprintf(stderr, "Cannot be STAKED and KMD notary at the same time!\n");
|
||||
exit(0);
|
||||
}
|
||||
MIN_RECV_SATS = GetArg("-mintxvalue",-1);
|
||||
WHITELIST_ADDRESS = GetArg("-whitelist","");
|
||||
if ( GetBoolArg("-gen", false) != 0 )
|
||||
KOMODO_MININGTHREADS = GetArg("-genproclimit",1);
|
||||
else KOMODO_MININGTHREADS = -1;
|
||||
|
||||
@@ -106,7 +106,7 @@ const char *notaries_STAKED4[][2] =
|
||||
|
||||
int num_notaries_STAKED4 = (sizeof(notaries_STAKED4)/sizeof(*notaries_STAKED4));
|
||||
|
||||
int is_STAKED(const char *chain_name) {
|
||||
int8_t is_STAKED(const char *chain_name) {
|
||||
int STAKED = 0;
|
||||
if ( (strcmp(chain_name, "STAKED") == 0) || (strncmp(chain_name, "STAKED", 6) == 0) )
|
||||
STAKED = 1;
|
||||
@@ -118,7 +118,7 @@ int is_STAKED(const char *chain_name) {
|
||||
return(STAKED);
|
||||
};
|
||||
|
||||
int STAKED_era(int timestamp)
|
||||
int32_t STAKED_era(int timestamp)
|
||||
{
|
||||
int8_t era = 0;
|
||||
if (timestamp <= STAKED_NOTARIES_TIMESTAMP1)
|
||||
@@ -289,7 +289,7 @@ int8_t ScanStakedArray(const char *notaries_chosen[][2],int num_notaries,char *R
|
||||
return(-1);
|
||||
}
|
||||
|
||||
CrosschainAuthority Choose_auth_STAKED(int chosen_era) {
|
||||
CrosschainAuthority Choose_auth_STAKED(int32_t chosen_era) {
|
||||
CrosschainAuthority auth;
|
||||
switch (chosen_era) {
|
||||
case 1:
|
||||
|
||||
@@ -24,15 +24,15 @@ extern int num_notaries_STAKED3;
|
||||
extern const char *notaries_STAKED4[][2];
|
||||
extern int num_notaries_STAKED4;
|
||||
|
||||
int is_STAKED(const char *chain_name);
|
||||
int STAKED_era(int timestamp);
|
||||
int8_t is_STAKED(const char *chain_name);
|
||||
int32_t STAKED_era(int timestamp);
|
||||
int8_t updateStakedNotary();
|
||||
int8_t numStakedNotaries(uint8_t pubkeys[64][33],int8_t era);
|
||||
int8_t StakedNotaryID(std::string ¬aryname, char *Raddress);
|
||||
void UpdateNotaryAddrs(uint8_t pubkeys[64][33],int8_t numNotaries);
|
||||
int8_t ScanStakedArray(const char *notaries_chosen[][2],int num_notaries,char *Raddress,std::string ¬aryname);
|
||||
|
||||
CrosschainAuthority Choose_auth_STAKED(int chosen_era);
|
||||
CrosschainAuthority Choose_auth_STAKED(int32_t chosen_era);
|
||||
CrosschainAuthority auth_STAKED_chosen(const char *notaries_chosen[][2],int num_notaries);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -40,7 +40,7 @@ NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight)
|
||||
//printf("Authorised notarisation data for %s \n",data.symbol);
|
||||
} else if (authority == CROSSCHAIN_STAKED) {
|
||||
// We need to create auth_STAKED dynamically here based on timestamp
|
||||
int staked_era = STAKED_era(timestamp);
|
||||
int32_t staked_era = STAKED_era(timestamp);
|
||||
printf("ERA.(%d) \n",staked_era);
|
||||
if (staked_era == 0) {
|
||||
// this is an ERA GAP, so we will ignore this notarization
|
||||
|
||||
@@ -1201,8 +1201,9 @@ bool CWallet::UpdatedNoteData(const CWalletTx& wtxIn, CWalletTx& wtx)
|
||||
* If fUpdate is true, existing transactions will be updated.
|
||||
*/
|
||||
extern uint8_t NOTARY_PUBKEY33[33];
|
||||
extern std::string NOTARY_ADDRESS;
|
||||
extern std::string NOTARY_ADDRESS,WHITELIST_ADDRESS;
|
||||
extern int32_t IS_STAKED_NOTARY;
|
||||
extern uint64_t MIN_RECV_SATS;
|
||||
|
||||
bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate)
|
||||
{
|
||||
@@ -1216,34 +1217,49 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl
|
||||
{
|
||||
if ( !tx.IsCoinBase() && !NOTARY_ADDRESS.empty() && IS_STAKED_NOTARY > -1 )
|
||||
{
|
||||
int numvinIsOurs = 0, numvoutIsOurs = 0; int64_t totalvoutvalue = 0;
|
||||
for (size_t i = 0; i < tx.vin.size(); i++) {
|
||||
int numvinIsOurs = 0, numvoutIsOurs = 0; int64_t totalvoutvalue = 0; bool whitelisted = false;
|
||||
for (size_t i = 0; i < tx.vin.size(); i++)
|
||||
{
|
||||
uint256 hash; CTransaction txin; CTxDestination address;
|
||||
if (GetTransaction(tx.vin[i].prevout.hash,txin,hash,false))
|
||||
{
|
||||
if (ExtractDestination(txin.vout[tx.vin[i].prevout.n].scriptPubKey, address)) {
|
||||
// This means we sent the tx..
|
||||
if ( CBitcoinAddress(address).ToString() == NOTARY_ADDRESS ) {
|
||||
if (ExtractDestination(txin.vout[tx.vin[i].prevout.n].scriptPubKey, address))
|
||||
{
|
||||
if ( CBitcoinAddress(address).ToString() == NOTARY_ADDRESS )
|
||||
numvinIsOurs++;
|
||||
if ( !WHITELIST_ADDRESS.empty() )
|
||||
{
|
||||
if ( CBitcoinAddress(address).ToString() == WHITELIST_ADDRESS )
|
||||
whitelisted == true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Now we know if it was a tx sent to us, that wasnt from ourself.
|
||||
// Now we know if it was a tx sent to us, that wasnt from ourself or the whitelist address if set..
|
||||
if ( numvinIsOurs != 0 )
|
||||
fprintf(stderr, "We sent from address: %s vins: %d\n",NOTARY_ADDRESS.c_str(),numvinIsOurs);
|
||||
if ( whitelisted == true )
|
||||
fprintf(stderr, "We received from whitelisted address: %s\n",WHITELIST_ADDRESS.c_str());
|
||||
// Count vouts, check if OUR notary address is the receiver.
|
||||
if ( numvinIsOurs == 0 ) {
|
||||
for (size_t i = 0; i < tx.vout.size() ; i++) {
|
||||
if ( numvinIsOurs == 0 && whitelisted == false )
|
||||
{
|
||||
for (size_t i = 0; i < tx.vout.size() ; i++)
|
||||
{
|
||||
CTxDestination address2;
|
||||
if ( ExtractDestination(tx.vout[i].scriptPubKey, address2)) {
|
||||
if ( CBitcoinAddress(address2).ToString() == NOTARY_ADDRESS ) {
|
||||
// this should be a received tx..
|
||||
if ( ExtractDestination(tx.vout[i].scriptPubKey, address2))
|
||||
{
|
||||
if ( CBitcoinAddress(address2).ToString() == NOTARY_ADDRESS )
|
||||
{
|
||||
numvoutIsOurs++;
|
||||
totalvoutvalue += tx.vout[i].nValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if MIN_RECV_SATS is 0, we are on full lock down mode, accept NO transactions.
|
||||
if ( MIN_RECV_SATS == 0 ) {
|
||||
fprintf(stderr, "This node is on full lock down all txs are ignored! \n");
|
||||
return false;
|
||||
}
|
||||
// If no vouts are to the notary address we will ignore them.
|
||||
if ( numvoutIsOurs == 0 ) {
|
||||
fprintf(stderr, "Received transaction to address other than notary address, ignored! \n");
|
||||
@@ -1252,15 +1268,11 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl
|
||||
fprintf(stderr, "address: %s received %ld sats from %d vouts.\n",NOTARY_ADDRESS.c_str(),totalvoutvalue,numvoutIsOurs);
|
||||
// here we add calculation for number if vouts received, average size and determine if we accept them to wallet or not.
|
||||
int64_t avgVoutSize = totalvoutvalue / numvoutIsOurs;
|
||||
if ( avgVoutSize < 100000000 ) {
|
||||
// average vout size is less than 1 coin, we will ignore it
|
||||
if ( avgVoutSize < MIN_RECV_SATS ) {
|
||||
// average vout size is less than set minimum, default is 1 coin, we will ignore it
|
||||
fprintf(stderr, "ignored: %d vouts average size of %ld sats.\n",numvoutIsOurs, avgVoutSize);
|
||||
return false;
|
||||
}
|
||||
} else if ( numvinIsOurs < tx.vin.size() ) {
|
||||
// this means we were in a multi sig, ideally we would remove the utxo we spent from our wallet, but you cant do that, unless all the tx's vouts are also spent.
|
||||
// RPC call PurgeWalletSpents will be created to clean all fully spent tx's instead.
|
||||
fprintf(stderr, "There are vins that are not ours, notarisation?\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user