Ejemplo n.º 1
0
	int GetMaxHeight() override {
		EXT_LOCK (MtxSqlite) {
			if (SqliteCommand("SELECT * FROM blocks", m_db).ExecuteReader().Read())
				return (int)SqliteCommand("SELECT MAX(id) FROM blocks", m_db).ExecuteInt64Scalar();
			else
				return -1;
		}
	}
Ejemplo n.º 2
0
	void DeleteBlock(int height, const vector<Int64>& txids) override {
		CoinEng& eng = Eng();

		ostringstream os;
		os << "DELETE FROM txes WHERE id IN (";
		for (int i=0; i<txids.size(); ++i)
			os << (i ? ", " : "") << txids[i];
		os << ")";
		//!!!R		SqliteCommand(EXT_STR("DELETE FROM txes WHERE blockord=" << height), m_db).ExecuteNonQuery();
		SqliteCommand(os.str(), m_db).ExecuteNonQuery();
		SqliteCommand(EXT_STR("DELETE FROM blocks WHERE id=" << height), m_db).ExecuteNonQuery();
	}
Ejemplo n.º 3
0
	void InsertTx(const Tx& tx, const TxHashesOutNums& hashesOutNums, const HashValue& txHash, int height, const ConstBuf& txIns, const ConstBuf& spend, const ConstBuf& data) override {
		CoinEng& eng = Eng();

		m_cmdInsertTx
			.Bind(1, ReducedHashValue(txHash))
			.Bind(2, (Int64)height)
			.Bind(3, txIns)
			.Bind(4, spend);

		m_cmdInsertTx.Bind(5, data);
		try {
			DBG_LOCAL_IGNORE_NAME(MAKE_HRESULT(SEVERITY_ERROR, FACILITY_SQLITE, SQLITE_CONSTRAINT_PRIMARYKEY), ignSQLITE_CONSTRAINT_PRIMARYKEY);
					
			m_cmdInsertTx.ExecuteNonQuery();
		} catch (const SqliteException&) {
			TRC(1, "Duplicated Transaction: " << txHash);

			if (height >= eng.ChainParams.CheckDupTxHeight && ContainsInLinear(GetCoinsByTxHash(txHash), true))
				Throw(E_COIN_DupNonSpentTx);						

			SqliteCommand("UPDATE txes SET coins=? WHERE id=?", m_db)
				.Bind(1, spend)
				.Bind(2, ReducedHashValue(txHash))
				.ExecuteNonQuery();
		}
		if (eng.Mode == EngMode::BlockExplorer)
			InsertPubkeyToTxes(tx);
	}
Ejemplo n.º 4
0
	void OptionalDeleteExpiredDomains(uint32_t height) override {
		if (ResolverMode) {
			if (!(heightExpired & 0xFF)) {
				SqliteCommand(EXT_STR("DELETE FROM domains WHERE height <= " << heightExpired), m_db)
					.ExecuteNonQuery();
			}
		} else {
			Block blockExpired = GetBlockByHeight(heightExpired);
			EXT_FOR (const TxHashOutNum& hom, blockExpired.get_TxHashesOutNums()) {
				m_cmdDeleteDomain
					.Bind(1, ReducedHashValue(hom.HashTx))
					.ExecuteNonQuery();
			}
		}
	}