Friday, December 13, 2019

Bitcoin CFTC data shows bears are in control again (current BTC/USD price is $7,271.79)

Latest Bitcoin News:

Bitcoin CFTC data shows bears are in control again

Other Related Bitcoin Topics:

Bitcoin Price | Bitcoin Mining | Blockchain


The latest Bitcoin news has been sourced from the CoinSalad.com Bitcoin Price and News Events page. CoinSalad is a web service that provides real-time Bitcoin market info, charts, data and tools. Follow us on Twitter @CoinSalad.


Earn money online best and trusted online bitcoin mining website step by step guide

https://youtu.be/WmXh3xjmVN4

[Daily Discussion] Saturday, December 14, 2019

Thread topics include, but are not limited to:

  • General discussion related to the day's events
  • Technical analysis, trading ideas & strategies
  • Quick questions that do not warrant a separate post

Thread guidelines:

  • Be excellent to each other.
  • Do not make posts outside of the daily thread for the topics mentioned above.

Other ways to interact:


[Altcoin Discussion] Saturday, December 14, 2019

Thread topics include, but are not limited to:

  • Discussion related to recent events
  • Technical analysis, trading ideas & strategies
  • General questions about altcoins

Thread guidelines:

  • Be excellent to each other.
  • All regular rules for this subreddit apply, except for number 2. This, and only this, thread is exempt from the requirement that all discussion must relate to bitcoin trading.
  • This is for high quality discussion of altcoins. All shilling or obvious pumping/dumping behavior will result in an immediate one day ban. This is your only warning.
  • No discussion about specific ICOs. Established coins only.

If you're not sure what kind of discussion belongs in this thread, here are some example posts. News, TA, and sentiment analysis are great, too.

Other ways to interact:


2019s Bitcoin Miners Are 5x Faster Than Predecessors (current BTC/USD price is $7,275.08)

Latest Bitcoin News:

2019s Bitcoin Miners Are 5x Faster Than Predecessors

Other Related Bitcoin Topics:

Bitcoin Price | Bitcoin Mining | Blockchain


The latest Bitcoin news has been sourced from the CoinSalad.com Bitcoin Price and News Events page. CoinSalad is a web service that provides real-time Bitcoin market info, charts, data and tools. Follow us on Twitter @CoinSalad.


Highest in 2 Years: 65% of Bitcoin Hash Power Is in China, Report Finds (current BTC/USD price is $7,258.81)

Latest Bitcoin News:

Highest in 2 Years: 65% of Bitcoin Hash Power Is in China, Report Finds

Other Related Bitcoin Topics:

Bitcoin Price | Bitcoin Mining | Blockchain


The latest Bitcoin news has been sourced from the CoinSalad.com Bitcoin Price and News Events page. CoinSalad is a web service that provides real-time Bitcoin market info, charts, data and tools. Follow us on Twitter @CoinSalad.


Read this went the opposite way

// Copyright (c) 2008 Satoshi Nakamoto // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT // SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE.

class COutPoint; class CInPoint; class CDiskTxPos; class CCoinBase; class CTxIn; class CTxOut; class CTransaction; class CBlock; class CBlockIndex; class CWalletTx; class CKeyItem;

static const unsigned int MAX_SIZE = 0x02000000; static const int64 COIN = 1000000; static const int64 CENT = 10000; static const int64 TRANSACTIONFEE = 1 * CENT; /// change this to a user options setting, optional fee can be zero ///static const unsigned int MINPROOFOFWORK = 40; /// need to decide the right difficulty to start with static const unsigned int MINPROOFOFWORK = 20;  /// ridiculously easy for testing

extern map<uint256, CBlockIndex*> mapBlockIndex; extern const uint256 hashGenesisBlock; extern CBlockIndex* pindexGenesisBlock; extern int nBestHeight; extern CBlockIndex* pindexBest; extern unsigned int nTransactionsUpdated; extern int fGenerateBitcoins;

FILE* OpenBlockFile(unsigned int nFile, unsigned int nBlockPos, const char* pszMode="rb"); FILE* AppendBlockFile(unsigned int& nFileRet); bool AddKey(const CKey& key); vector<unsigned char> GenerateNewKey(); bool AddToWallet(const CWalletTx& wtxIn); void ReacceptWalletTransactions(); void RelayWalletTransactions(); bool LoadBlockIndex(bool fAllowNew=true); bool BitcoinMiner(); bool ProcessMessages(CNode* pfrom); bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv); bool SendMessages(CNode* pto); int64 CountMoney(); bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& txNew); bool SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew);

class CDiskTxPos { public:     unsigned int nFile;     unsigned int nBlockPos;     unsigned int nTxPos;

    CDiskTxPos()     {         SetNull();     }

    CDiskTxPos(unsigned int nFileIn, unsigned int nBlockPosIn, unsigned int nTxPosIn)     {         nFile = nFileIn;         nBlockPos = nBlockPosIn;         nTxPos = nTxPosIn;     }

    IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); )     void SetNull() { nFile = -1; nBlockPos = 0; nTxPos = 0; }     bool IsNull() const { return (nFile == -1); }

    friend bool operator==(const CDiskTxPos& a, const CDiskTxPos& b)     {         return (a.nFile     == b.nFile &&                 a.nBlockPos == b.nBlockPos &&                 a.nTxPos    == b.nTxPos);     }

    friend bool operator!=(const CDiskTxPos& a, const CDiskTxPos& b)     {         return !(a == b);     }

    void print() const     {         if (IsNull())             printf("null");         else             printf("(nFile=%d, nBlockPos=%d, nTxPos=%d)", nFile, nBlockPos, nTxPos);     } };

class CInPoint { public:     CTransaction* ptx;     unsigned int n;

    CInPoint() { SetNull(); }     CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; }     void SetNull() { ptx = NULL; n = -1; }     bool IsNull() const { return (ptx == NULL && n == -1); } };

class COutPoint { public:     uint256 hash;     unsigned int n;

    COutPoint() { SetNull(); }     COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; }     IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); )     void SetNull() { hash = 0; n = -1; }     bool IsNull() const { return (hash == 0 && n == -1); }

    friend bool operator<(const COutPoint& a, const COutPoint& b)     {         return (a.hash < b.hash || (a.hash == b.hash && a.n < b.n));     }

    friend bool operator==(const COutPoint& a, const COutPoint& b)     {         return (a.hash == b.hash && a.n == b.n);     }

    friend bool operator!=(const COutPoint& a, const COutPoint& b)     {         return !(a == b);     }

    void print() const     {         printf("COutPoint(%s, %d)", hash.ToString().substr(0,6).c_str(), n);     } };

// // An input of a transaction.  It contains the location of the previous // transaction's output that it claims and a signature that matches the // output's public key. // class CTxIn { public:     COutPoint prevout;     CScript scriptSig;

    CTxIn()     {     }

    CTxIn(COutPoint prevoutIn, CScript scriptSigIn)     {         prevout = prevoutIn;         scriptSig = scriptSigIn;     }

    CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn)     {         prevout = COutPoint(hashPrevTx, nOut);         scriptSig = scriptSigIn;     }

    IMPLEMENT_SERIALIZE     (         READWRITE(prevout);         READWRITE(scriptSig);     )

    bool IsPrevInMainChain() const     {         return CTxDB("r").ContainsTx(prevout.hash);     }

    friend bool operator==(const CTxIn& a, const CTxIn& b)     {         return (a.prevout == b.prevout && a.scriptSig == b.scriptSig);     }

    friend bool operator!=(const CTxIn& a, const CTxIn& b)     {         return !(a == b);     }

    void print() const     {         printf("CTxIn(");         prevout.print();         if (prevout.IsNull())         {             printf(", coinbase %s)\n", HexStr(scriptSig.begin(), scriptSig.end(), false).c_str());         }         else         {             if (scriptSig.size() >= 6)                 printf(", scriptSig=%02x%02x", scriptSig[4], scriptSig[5]);             printf(")\n");         }     }

    bool IsMine() const;     int64 GetDebit() const; };

// // An output of a transaction.  It contains the public key that the next input // must be able to sign with to claim it. // class CTxOut { public:     int64 nValue;     unsigned int nSequence;     CScript scriptPubKey;

    // disk only     CDiskTxPos posNext;  //// so far this is only used as a flag, nothing uses the location

public:     CTxOut()     {         nValue = 0;         nSequence = UINT_MAX;     }

    CTxOut(int64 nValueIn, CScript scriptPubKeyIn, int nSequenceIn=UINT_MAX)     {         nValue = nValueIn;         scriptPubKey = scriptPubKeyIn;         nSequence = nSequenceIn;     }

    IMPLEMENT_SERIALIZE     (         READWRITE(nValue);         READWRITE(nSequence);         READWRITE(scriptPubKey);         if (nType & SER_DISK)             READWRITE(posNext);     )

    uint256 GetHash() const { return SerializeHash(*this); }

    bool IsFinal() const     {         return (nSequence == UINT_MAX);     }

    bool IsMine() const     {         return ::IsMine(scriptPubKey);     }

    int64 GetCredit() const     {         if (IsMine())             return nValue;         return 0;     }

    friend bool operator==(const CTxOut& a, const CTxOut& b)     {         return (a.nValue       == b.nValue &&                 a.nSequence    == b.nSequence &&                 a.scriptPubKey == b.scriptPubKey);     }

    friend bool operator!=(const CTxOut& a, const CTxOut& b)     {         return !(a == b);     }

    void print() const     {         if (scriptPubKey.size() >= 6)             printf("CTxOut(nValue=%I64d, nSequence=%u, scriptPubKey=%02x%02x, posNext=", nValue, nSequence, scriptPubKey[4], scriptPubKey[5]);         posNext.print();         printf(")\n");     } };

// // The basic transaction that is broadcasted on the network and contained in // blocks.  A transaction can contain multiple inputs and outputs. // class CTransaction { public:     vector<CTxIn> vin;     vector<CTxOut> vout;     unsigned int nLockTime;

    CTransaction()     {         SetNull();     }

    IMPLEMENT_SERIALIZE     (         if (!(nType & SER_GETHASH))             READWRITE(nVersion);

        // Set version on stream for writing back same version         if (fRead && s.nVersion == -1)             s.nVersion = nVersion;

        READWRITE(vin);         READWRITE(vout);         READWRITE(nLockTime);     )

    void SetNull()     {         vin.clear();         vout.clear();         nLockTime = 0;     }

    bool IsNull() const     {         return (vin.empty() && vout.empty());     }

    uint256 GetHash() const     {         return SerializeHash(*this);     }

    bool AllPrevInMainChain() const     {         foreach(const CTxIn& txin, vin)             if (!txin.IsPrevInMainChain())                 return false;         return true;     }

    bool IsFinal() const     {         if (nLockTime == 0)             return true;         if (nLockTime < GetAdjustedTime())             return true;         foreach(const CTxOut& txout, vout)             if (!txout.IsFinal())                 return false;         return true;     }

    bool IsUpdate(const CTransaction& b) const     {         if (vin.size() != b.vin.size() || vout.size() != b.vout.size())             return false;         for (int i = 0; i < vin.size(); i++)             if (vin[i].prevout != b.vin[i].prevout)                 return false;

        bool fNewer = false;         unsigned int nLowest = UINT_MAX;         for (int i = 0; i < vout.size(); i++)         {             if (vout[i].nSequence != b.vout[i].nSequence)             {                 if (vout[i].nSequence <= nLowest)                 {                     fNewer = false;                     nLowest = vout[i].nSequence;                 }                 if (b.vout[i].nSequence < nLowest)                 {                     fNewer = true;                     nLowest = b.vout[i].nSequence;                 }             }         }         return fNewer;     }

    bool IsCoinBase() const     {         return (vin.size() == 1 && vin[0].prevout.IsNull());     }

    bool CheckTransaction() const     {         // Basic checks that don't depend on any context         if (vin.empty() || vout.empty())             return false;

        // Check for negative values         int64 nValueOut = 0;         foreach(const CTxOut& txout, vout)         {             if (txout.nValue < 0)                 return false;             nValueOut += txout.nValue;         }

        if (IsCoinBase())         {             if (vin[0].scriptSig.size() > 100)                 return false;         }         else         {             foreach(const CTxIn& txin, vin)                 if (txin.prevout.IsNull())                     return false;         }

        return true;     }

    bool IsMine() const     {         foreach(const CTxOut& txout, vout)             if (txout.IsMine())                 return true;         return false;     }

    int64 GetDebit() const     {         int64 nDebit = 0;         foreach(const CTxIn& txin, vin)             nDebit += txin.GetDebit();         return nDebit;     }

    int64 GetCredit() const     {         int64 nCredit = 0;         foreach(const CTxOut& txout, vout)             nCredit += txout.GetCredit();         return nCredit;     }

    int64 GetValueOut() const     {         int64 nValueOut = 0;         foreach(const CTxOut& txout, vout)         {             if (txout.nValue < 0)                 throw runtime_error("CTransaction::GetValueOut() : negative value");             nValueOut += txout.nValue;         }         return nValueOut;     }

    bool ReadFromDisk(CDiskTxPos pos, FILE** pfileRet=NULL)     {         CAutoFile filein = OpenBlockFile(pos.nFile, 0, pfileRet ? "rb+" : "rb");         if (!filein)             return false;

        // Read transaction         if (fseek(filein, pos.nTxPos, SEEK_SET) != 0)             return false;         filein >> *this;

        // Return file pointer         if (pfileRet)         {             if (fseek(filein, pos.nTxPos, SEEK_SET) != 0)                 return false;             *pfileRet = filein.release();         }         return true;     }

    friend bool operator==(const CTransaction& a, const CTransaction& b)     {         return (a.vin       == b.vin &&                 a.vout      == b.vout &&                 a.nLockTime == b.nLockTime);     }

    friend bool operator!=(const CTransaction& a, const CTransaction& b)     {         return !(a == b);     }

    void print() const     {         printf("CTransaction(vin.size=%d, vout.size=%d, nLockTime=%d)\n",             vin.size(),             vout.size(),             nLockTime);         for (int i = 0; i < vin.size(); i++)         {             printf("    ");             vin[i].print();         }         for (int i = 0; i < vout.size(); i++)         {             printf("    ");             vout[i].print();         }     }

    bool TestDisconnectInputs(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool)     {         return DisconnectInputs(txdb, mapTestPool, true);     }

    bool TestConnectInputs(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool, bool fMemoryTx, bool fIgnoreDiskConflicts, int64& nFees)     {         return ConnectInputs(txdb, mapTestPool, CDiskTxPos(1, 1, 1), 0, true, fMemoryTx, fIgnoreDiskConflicts, nFees);     }

    bool DisconnectInputs(CTxDB& txdb)     {         static map<uint256, CTransaction> mapTestPool;         return DisconnectInputs(txdb, mapTestPool, false);     }

    bool ConnectInputs(CTxDB& txdb, CDiskTxPos posThisTx, int nHeight)     {         static map<uint256, CTransaction> mapTestPool;         int64 nFees;         return ConnectInputs(txdb, mapTestPool, posThisTx, nHeight, false, false, false, nFees);     }

private:     bool DisconnectInputs(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool, bool fTest);     bool ConnectInputs(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool, CDiskTxPos posThisTx, int nHeight,                        bool fTest, bool fMemoryTx, bool fIgnoreDiskConflicts, int64& nFees);

public:     bool AcceptTransaction(CTxDB& txdb, bool fCheckInputs=true);     bool AcceptTransaction() { CTxDB txdb("r"); return AcceptTransaction(txdb); }     bool ClientConnectInputs(); };

// // A transaction with a merkle branch linking it to the timechain // class CMerkleTx : public CTransaction { public:     uint256 hashBlock;     vector<uint256> vMerkleBranch;     int nIndex;

    CMerkleTx()     {         Init();     }

    CMerkleTx(const CTransaction& txIn) : CTransaction(txIn)     {         Init();     }

    void Init()     {         hashBlock = 0;         nIndex = -1;     }

    IMPLEMENT_SERIALIZE     (         nSerSize += SerReadWrite(s, (CTransaction)this, nType, nVersion, ser_action);         if (!(nType & SER_GETHASH))             READWRITE(nVersion);         READWRITE(hashBlock);         READWRITE(vMerkleBranch);         READWRITE(nIndex);     )

    int SetMerkleBranch();     int IsInMainChain() const;     bool AcceptTransaction(CTxDB& txdb, bool fCheckInputs=true);     bool AcceptTransaction() { CTxDB txdb("r"); return AcceptTransaction(txdb); } };

// // A transaction with a bunch of additional info that only the owner cares // about.  It includes any unrecorded transactions needed to link it back // to the timechain. // class CWalletTx : public CMerkleTx { public:     vector<CMerkleTx> vtxPrev;     map<string, string> mapValue;     vector<pair<string, string> > vOrderForm;     unsigned int nTime;     char fFromMe;     char fSpent;

    //// probably need to sign the order info so know it came from payer

    CWalletTx()     {         Init();     }

    CWalletTx(const CMerkleTx& txIn) : CMerkleTx(txIn)     {         Init();     }

    CWalletTx(const CTransaction& txIn) : CMerkleTx(txIn)     {         Init();     }

    void Init()     {         nTime = 0;         fFromMe = false;         fSpent = false;     }

    IMPLEMENT_SERIALIZE     (         /// would be nice for it to return the version number it reads, maybe use a reference         nSerSize += SerReadWrite(s, (CMerkleTx)this, nType, nVersion, ser_action);         if (!(nType & SER_GETHASH))             READWRITE(nVersion);         READWRITE(vtxPrev);         READWRITE(mapValue);         READWRITE(vOrderForm);         READWRITE(nTime);         READWRITE(fFromMe);         READWRITE(fSpent);     )

    bool WriteToDisk()     {         return CWalletDB().WriteTx(GetHash(), *this);     }

    void AddSupportingTransactions(CTxDB& txdb);     void AddSupportingTransactions() { CTxDB txdb("r"); AddSupportingTransactions(txdb); }

    bool AcceptWalletTransaction(CTxDB& txdb, bool fCheckInputs=true);     bool AcceptWalletTransaction() { CTxDB txdb("r"); return AcceptWalletTransaction(txdb); }

    void RelayWalletTransaction(CTxDB& txdb);     void RelayWalletTransaction() { CTxDB txdb("r"); RelayWalletTransaction(txdb); } };

// // Nodes collect new transactions into a block, hash them into a hash tree, // and scan through nonce values to make the block's hash satisfy proof-of-work // requirements.  When they solve the proof-of-work, they broadcast the block // to everyone and the block is added to the timechain.  The first transaction // in the block is a special one that creates a new coin owned by the creator // of the block. // // Blocks are appended to blk0001.dat files on disk.  Their location on disk // is indexed by CBlockIndex objects in memory. // class CBlock { public:     // header     uint256 hashPrevBlock;     uint256 hashMerkleRoot;     unsigned int nTime;     unsigned int nBits;     unsigned int nNonce;

    // network and disk     vector<CTransaction> vtx;

    // memory only     mutable vector<uint256> vMerkleTree;

    CBlock()     {         SetNull();     }

    IMPLEMENT_SERIALIZE     (         if (!(nType & SER_GETHASH))             READWRITE(nVersion);         READWRITE(hashPrevBlock);         READWRITE(hashMerkleRoot);         READWRITE(nTime);         READWRITE(nBits);         READWRITE(nNonce);

        // ConnectBlock depends on vtx being last so it can calculate offset         if (!(nType & (SER_GETHASH|SER_BLOCKHEADERONLY)))             READWRITE(vtx);         else if (fRead)             const_cast<CBlock*>(this)->vtx.clear();     )

    void SetNull()     {         hashPrevBlock = 0;         hashMerkleRoot = 0;         nTime = 0;         nBits = 0;         nNonce = 0;         vtx.clear();         vMerkleTree.clear();     }

    bool IsNull() const     {         return (nBits == 0);     }

    uint256 GetHash() const     {         return Hash(BEGIN(hashPrevBlock), END(nNonce));     }

    uint256 BuildMerkleTree() const     {         vMerkleTree.clear();         foreach(const CTransaction& tx, vtx)             vMerkleTree.push_back(tx.GetHash());         int j = 0;         for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2)         {             for (int i = 0; i < nSize; i += 2)             {                 int i2 = min(i+1, nSize-1);                 vMerkleTree.push_back(Hash(BEGIN(vMerkleTree[j+i]),  END(vMerkleTree[j+i]),                                            BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2])));             }             j += nSize;         }         return (vMerkleTree.empty() ? 0 : vMerkleTree.back());     }

    vector<uint256> GetMerkleBranch(int nIndex) const     {         if (vMerkleTree.empty())             BuildMerkleTree();         vector<uint256> vMerkleBranch;         int j = 0;         for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2)         {             int i = min(nIndex1, nSize-1);             vMerkleBranch.push_back(vMerkleTree[j+i]);             nIndex >>= 1;             j += nSize;         }         return vMerkleBranch;     }

    static uint256 CheckMerkleBranch(uint256 hash, const vector<uint256>& vMerkleBranch, int nIndex)     {         foreach(const uint256& otherside, vMerkleBranch)         {             if (nIndex & 1)                 hash = Hash(BEGIN(otherside), END(otherside), BEGIN(hash), END(hash));             else                 hash = Hash(BEGIN(hash), END(hash), BEGIN(otherside), END(otherside));             nIndex >>= 1;         }         return hash;     }

    bool WriteToDisk(bool fWriteTransactions, unsigned int& nFileRet, unsigned int& nBlockPosRet)     {         // Open history file to append         CAutoFile fileout = AppendBlockFile(nFileRet);         if (!fileout)             return false;         if (!fWriteTransactions)             fileout.nType |= SER_BLOCKHEADERONLY;

        // Write index header         unsigned int nSize = fileout.GetSerializeSize(*this);         fileout << FLATDATA(pchMessageStart) << nSize;

        // Write block         nBlockPosRet = ftell(fileout);         if (nBlockPosRet == -1)             return false;         fileout << *this;

        return true;     }

    bool ReadFromDisk(unsigned int nFile, unsigned int nBlockPos, bool fReadTransactions)     {         SetNull();

        // Open history file to read         CAutoFile filein = OpenBlockFile(nFile, nBlockPos, "rb");         if (!filein)             return false;         if (!fReadTransactions)             filein.nType |= SER_BLOCKHEADERONLY;

        // Read block         filein >> *this;

        // Check the header         if (nBits < MINPROOFOFWORK || GetHash() > (~uint256(0) >> nBits))             return error("CBlock::ReadFromDisk : errors in block header");

        return true;     }

    void print() const     {         printf("CBlock(hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%u, nNonce=%u, vtx=%d)\n",             hashPrevBlock.ToString().substr(0,6).c_str(),             hashMerkleRoot.ToString().substr(0,6).c_str(),             nTime, nBits, nNonce,             vtx.size());         for (int i = 0; i < vtx.size(); i++)         {             printf("  ");             vtx[i].print();         }         printf("  vMerkleTree: ");         for (int i = 0; i < vMerkleTree.size(); i++)             printf("%s ", vMerkleTree[i].ToString().substr(0,6).c_str());         printf("\n");     }

    bool ReadFromDisk(const CBlockIndex* blockindex, bool fReadTransactions);     bool TestDisconnectBlock(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool);     bool TestConnectBlock(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool);     bool DisconnectBlock();     bool ConnectBlock(unsigned int nFile, unsigned int nBlockPos, int nHeight);     bool AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos, bool fWriteDisk);     bool CheckBlock() const;     bool AcceptBlock(); };

// // The timechain is a tree shaped structure starting with the // genesis block at the root, with each block potentially having multiple // candidates to be the next block.  pprev and pnext link a path through the // main/longest chain.  A blockindex may have multiple pprev pointing back // to it, but pnext will only point forward to the longest branch, or will // be null if the block is not part of the longest chain. // class CBlockIndex { public:     CBlockIndex* pprev;     CBlockIndex* pnext;     unsigned int nFile;     unsigned int nBlockPos;     int nHeight;

    CBlockIndex()     {         pprev = NULL;         pnext = NULL;         nFile = 0;         nBlockPos = 0;         nHeight = 0;     }

    CBlockIndex(unsigned int nFileIn, unsigned int nBlockPosIn)     {         pprev = NULL;         pnext = NULL;         nFile = nFileIn;         nBlockPos = nBlockPosIn;         nHeight = 0;     }

    bool IsInMainChain() const     {         return (pnext || this == pindexBest);     }

    bool EraseBlockFromDisk()     {         // Open history file         CAutoFile fileout = OpenBlockFile(nFile, nBlockPos, "rb+");         if (!fileout)             return false;

        // Overwrite with empty null block         CBlock block;         block.SetNull();         fileout << block;

        return true;     }

    bool TestDisconnectBlock(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool)     {         CBlock block;         if (!block.ReadFromDisk(nFile, nBlockPos, true))             return false;         return block.TestDisconnectBlock(txdb, mapTestPool);     }

    bool TestConnectBlock(CTxDB& txdb, map<uint256, CTransaction>& mapTestPool)     {         CBlock block;         if (!block.ReadFromDisk(nFile, nBlockPos, true))             return false;         return block.TestConnectBlock(txdb, mapTestPool);     }

    bool DisconnectBlock()     {         CBlock block;         if (!block.ReadFromDisk(nFile, nBlockPos, true))             return false;         return block.DisconnectBlock();     }

    bool ConnectBlock()     {         CBlock block;         if (!block.ReadFromDisk(nFile, nBlockPos, true))             return false;         return block.ConnectBlock(nFile, nBlockPos, nHeight);     }

    void print() const     {         printf("CBlockIndex(nprev=%08x, pnext=%08x, nFile=%d, nBlockPos=%d, nHeight=%d)\n",             pprev, pnext, nFile, nBlockPos, nHeight);     } };

void PrintTimechain();

// // Describes a place in the timechain to another node such that if the // other node doesn't have the same branch, it can find a recent common trunk. // The further back it is, the further before the branch point it may be. // class CBlockLocator { protected:     vector<uint256> vHave; public:

    CBlockLocator()     {     }

    explicit CBlockLocator(const CBlockIndex* pindex)     {         Set(pindex);     }

    explicit CBlockLocator(uint256 hashBlock)     {         map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock);         if (mi != mapBlockIndex.end())             Set((*mi).second);     }

    IMPLEMENT_SERIALIZE     (         if (!(nType & SER_GETHASH))             READWRITE(nVersion);         READWRITE(vHave);     )

    void Set(const CBlockIndex* pindex)     {         vHave.clear();         int nStep = 1;         while (pindex)         {             CBlock block;             block.ReadFromDisk(pindex, false);             vHave.push_back(block.GetHash());

            // Exponentially larger steps back             for (int i = 0; pindex && i < nStep; i++)                 pindex = pindex->pprev;             if (vHave.size() > 10)                 nStep *= 2;         }     }

    CBlockIndex* GetBlockIndex()     {         // Find the first block the caller has in the main chain         foreach(const uint256& hash, vHave)         {             map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);             if (mi != mapBlockIndex.end())             {                 CBlockIndex* pindex = (*mi).second;                 if (pindex->IsInMainChain())                     return pindex;             }         }         return pindexGenesisBlock;     }

    uint256 GetBlockHash()     {         // Find the first block the caller has in the main chain         foreach(const uint256& hash, vHave)         {             map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);             if (mi != mapBlockIndex.end())             {                 CBlockIndex* pindex = (*mi).second;                 if (pindex->IsInMainChain())                     return hash;             }         }         return hashGenesisBlock;     }

    int GetHeight()     {         CBlockIndex* pindex = GetBlockIndex();         if (!pindex)             return 0;         return pindex->nHeight;     } };

extern map<uint256, CTransaction> mapTransactions; extern map<uint256, CWalletTx> mapWallet; extern vector<pair<uint256, bool> > vWalletUpdated; extern CCriticalSection cs_mapWallet; extern map<vector<unsigned char>, CPrivKey> mapKeys; extern map<uint160, vector<unsigned char> > mapPubKeys; extern CCriticalSection cs_mapKeys; extern CKey keyUser;


Extstock exchange arranges the distribution of HTX coins.

The exchange is represented by https://www.coingecko.com/en/exchanges/extstock - and is included in 200 exchanges in terms of trading volume.

The first 2,000 users will receive 25 HTX tokens each approximately $ 200.

The campaign will last from December 11 and end on December 18. Distribution will be 5 days after the end of the campaign on the balance of the exchange.

Algorithm of actions:

  1. Register at http://extstock.com/profile/registration?ref=6t6DXZ6ZtD8Jbn0j
  2. Confirm mail
  3. Follow the link https://extstock.com/events/7
  4. Read u/extstock, Retweet tweet https://twitter.com/extstock/status/1204777994566455298 with comment #cryptocurrency #bitcoin
  5. Click the Claim Prize button, in which enter a link to your twitter profile.

Bitcoin (BTC) may jump to $9100 ahead of Christmas (current BTC/USD price is $7,256.02)

Latest Bitcoin News:

Bitcoin (BTC) may jump to $9100 ahead of Christmas

Other Related Bitcoin Topics:

Bitcoin Price | Bitcoin Mining | Blockchain


The latest Bitcoin news has been sourced from the CoinSalad.com Bitcoin Price and News Events page. CoinSalad is a web service that provides real-time Bitcoin market info, charts, data and tools. Follow us on Twitter @CoinSalad.


Extstock exchange arranges the distribution of HTX coins.

The exchange is represented by https://www.coingecko.com/en/exchanges/extstock - and is included in 200 exchanges in terms of trading volume.

The first 2,000 users will receive 25 HTX tokens each approximately $ 200.

The campaign will last from December 11 and end on December 18. Distribution will be 5 days after the end of the campaign on the balance of the exchange.

Algorithm of actions:

  1. Register at http://extstock.com/profile/registration?ref=6t6DXZ6ZtD8Jbn0j
  2. Confirm mail
  3. Follow the link https://extstock.com/events/7
  4. Read u/extstock, Retweet tweet https://twitter.com/extstock/status/1204777994566455298 with comment #cryptocurrency #bitcoin
  5. Click the Claim Prize button, in which enter a link to your twitter profile.

[For Hire] Experienced senior developer for web/desktop/mobile application, blockchain, game, using C++, Python, JavaScript, PHP, Java, C#, and more

Me

  • 20 years professional programmer.
  • More than 12 years working in large global gaming companies.
  • Created several open source projects.
  • My personal website https://www.kbasm.com for more information.

I can do

  • Develop web front and back end using PHP, Laravel, JavaScript, MySQL, HTML5, jQuery, Bootstrap.
  • Tools and utilities development. Web scrappers, automation tools.
  • Develop applications, utility tools, games for desktop (Windows, Linux) and mobile.
  • Cryptocurrency and blockchain related technologies.
  • Programming mentor and consultant.

My portfolio, I created all these projects

  • eventpp library. It's a C++ library for event dispatcher and callback list.
  • eventjs library. It's a JavaScript library for event dispatcher and callback list (a sister library of eventpp).
  • cpgf library. It's a very complicated open source cross platform C++ library that adds reflection, serialization and script binding to standard C++.
  • Gincu library. It's an open source 2D cross platform game engine written in C++ and cpgf.
  • Jincu library. It's an open source 2D game engine and framework written in JavaScript ES6.
  • markdown utilities. It's a collection of Perl scripts to manipulate markdown files.
  • I developed my personal website and the blogging system on https://www.kbasm.com from scratch

My technology stack

  • Cross platform C++ (very experienced), Boost, Qt5, wxWidget, etc.
  • Python 2/3
  • PHP (Laravel), MySQL, JavaScript (jQuery, ES6, ReactJs), Bootstrap, Semantic UI
  • Java, C#
  • I can master any new technology quickly

My advantages

  • I'm reliable. I keep my promise. I do my best to finish your job.
  • I'm affordable. My price is only a fraction of a Silicon Valley programmer in the US that's equally qualified.
  • I produce high quality result. I pursue high quality in both code and products.
  • I am very experienced and professional. I have been developing software and games since 2000 and have been learning C++ since 1995.

Payment methods

TransferWise, Paypal, Bitcoin. 50% upfront, 50% after I finish the project and before I send you the final product/code. Negotiable.

Hours I can work

Depending on the project, I can work about 10~20 hours each week.

Where am I

I work remotely. I live in Beijing, China, GMT+8.

My fee and rate

I charge a fixed fee for each project.
My general fee is far lower than a senior developer with my experience level in the US Bay Area, but also don't expect my fee is as low as a middle level developer from other low end freelancer sites.
Approximate fee for typical projects, in USD

  • Trivial - small projects: 3-4 figures
  • Small - medium projects: 4-5 figures
  • Medium - Large projects: 5 figures and more

The fee varies depending on the project type and the technology, and negotiable.

You get more than what you pay for

If you are looking for high quality development and don't want to waste your time and money, contact me, you will get very good results for your money.

To contact me, either PM me on Reddit, or contact me on my personal website https://www.kbasm.com


📣📣A Handy Guide To Investing In Bitcoin And Other Cryptocurrency📢✅

Cryptocurrency by itself is a new world and gives total control to the people, still many people face a lot of problems when it comes to investing in cryptocurrency. Here we are providing some useful steps that will guide you through investment in Bitcoin and cryptocurrency.

#bitcoin #cryptocurrency #cryptonews #crypto

https://preview.redd.it/is91knsba7441.jpg?width=900&format=pjpg&auto=webp&s=d8383766f79d1f59a2d06403fa81a96de47392ce

For More Details Visit:-https://www.cryptoknowmics.com/



Bitcoin Technical Analysis: BTC/USD primed for losses as $6000 beckons (current BTC/USD price is $7,253.89)

Latest Bitcoin News:

Bitcoin Technical Analysis: BTC/USD primed for losses as $6000 beckons

Other Related Bitcoin Topics:

Bitcoin Price | Bitcoin Mining | Blockchain


The latest Bitcoin news has been sourced from the CoinSalad.com Bitcoin Price and News Events page. CoinSalad is a web service that provides real-time Bitcoin market info, charts, data and tools. Follow us on Twitter @CoinSalad.


[SELL-PSN] Selling FIFA 20 PS4 Coins! $10 per 100k. Delivering Millions Daily Without bans/resets! Trusted Trader with Fast Delivery!

I've delivered over 20 billion coins in FIFA 19 orders without a reset, wipe or ban.

I'm delivering over 100 million coins daily in FIFA20 without any issues - the only way your account will be banned / coin wiped is if EA were to update their detection methods! I know the exact triggers as they are currently. In the event I get a single reset / wipe, I shut down my operation and use my accounts to find the new limits before delivering to customers again.

I can move coins very fast to your account for you to be able to get playing again as fast as possible!

Why buy from me?

  • Great care taken for the safety of your account. No need to spend the coins fast.

  • Professional Seller.

  • Reliable. Check my feedback below.

  • Experienced Seller - Since FIFA11.

My FUT Rep (feedback) profiles can be found here:

https://www.reddit.com/r/FUTRep/comments/60onx9/usam2748_fut_rep_profile/ https://www.reddit.com/r/FUTRep/comments/79ofoa/usam2748_fut_rep_profile_2/ https://www.reddit.com/r/FUTRep/comments/aumeze/usam2748_fut_rep_profile_3/ https://www.reddit.com/r/FUTRep/comments/d8ax3c/usam2748_fut_rep_profile_4/

My current prices are per 100k:

PS4 - $10

XB1 - $13

Delivery Methods:

Comfort Trade - You give me your account login and I will put the coins safely into your account. This is 100% tax covered.

I accept the following Payment methods:

Paypal

Skrill

BitCoins

United Kingdom Bank Transfer

Note

Please note although prices advertised here are in USD, I actually charge in either GBP or EUR. The conversion rates will vary due to the payment processor.


Extstock exchange arranges the distribution of HTX coins.

The exchange is represented by https://www.coingecko.com/en/exchanges/extstock - and is included in 200 exchanges in terms of trading volume.

The first 2,000 users will receive 25 HTX tokens each approximately $ 200.

The campaign will last from December 11 and end on December 18. Distribution will be 5 days after the end of the campaign on the balance of the exchange.

Algorithm of actions:

  1. Register at http://extstock.com/profile/registration?ref=6t6DXZ6ZtD8Jbn0j
  2. Confirm mail
  3. Follow the link https://extstock.com/events/7
  4. Read u/extstock, Retweet tweet https://twitter.com/extstock/status/1204777994566455298 with comment #cryptocurrency #bitcoin
  5. Click the Claim Prize button, in which enter a link to your twitter profile.

[SELL-XBL] Selling FIFA 20 XB1 Coins! $13 per 100k. Delivering Millions Daily Without bans/resets! Trusted Trader with Fast Delivery!

I've delivered over 20 billion coins in FIFA 19 orders without a reset, wipe or ban.

I'm delivering over 100 million coins daily in FIFA20 without any issues - the only way your account will be banned / coin wiped is if EA were to update their detection methods! I know the exact triggers as they are currently. In the event I get a single reset / wipe, I shut down my operation and use my accounts to find the new limits before delivering to customers again.

I can move coins very fast to your account for you to be able to get playing again as fast as possible!

Why buy from me?

  • Great care taken for the safety of your account. No need to spend the coins fast.

  • Professional Seller.

  • Reliable. Check my feedback below.

  • Experienced Seller - Since FIFA11.

My FUT Rep (feedback) profiles can be found here:

https://www.reddit.com/r/FUTRep/comments/60onx9/usam2748_fut_rep_profile/ https://www.reddit.com/r/FUTRep/comments/79ofoa/usam2748_fut_rep_profile_2/ https://www.reddit.com/r/FUTRep/comments/aumeze/usam2748_fut_rep_profile_3/ https://www.reddit.com/r/FUTRep/comments/d8ax3c/usam2748_fut_rep_profile_4/

My current prices are per 100k:

XB1 - $13

PS4 - $10

Delivery Methods:

Comfort Trade - You give me your account login and I will put the coins safely into your account. This is 100% tax covered.

I accept the following Payment methods:

Paypal

Skrill

BitCoins

United Kingdom Bank Transfer

Note

Please note although prices advertised here are in USD, I actually charge in either GBP or EUR. The conversion rates will vary due to the payment processor.


Extstock exchange arranges the distribution of HTX coins.

The exchange is represented by https://www.coingecko.com/en/exchanges/extstock - and is included in 200 exchanges in terms of trading volume.

The first 2,000 users will receive 25 HTX tokens each approximately $ 200.

The campaign will last from December 11 and end on December 18. Distribution will be 5 days after the end of the campaign on the balance of the exchange.

Algorithm of actions:

1) Register at http://extstock.com/profile/registration?ref=6t6DXZ6ZtD8Jbn0j

2) Confirm mail

3) Follow the link https://extstock.com/events/7

4) Read u/extstock, Retweet tweet https://twitter.com/extstock/status/1204777994566455298 with comment #cryptocurrency #bitcoin

5) Click the Claim Prize button, in which enter a link to your twitter profile.


Extstock exchange arranges the distribution of HTX coins.

The exchange is represented by https://www.coingecko.com/en/exchanges/extstock - and is included in 200 exchanges in terms of trading volume.

The first 2,000 users will receive 25 HTX tokens each approximately $ 200.

The campaign will last from December 11 and end on December 18. Distribution will be 5 days after the end of the campaign on the balance of the exchange.

Algorithm of actions:

  1. Register at http://extstock.com/profile/registration?ref=6t6DXZ6ZtD8Jbn0j
  2. Confirm mail
  3. Follow the link https://extstock.com/events/7
  4. Read u/extstock, Retweet tweet https://twitter.com/extstock/status/1204777994566455298 with comment #cryptocurrency #bitcoin
  5. Click the Claim Prize button, in which enter a link to your twitter profile.