Shegotwet/Assets/GUPS/AntiCheat/Source/Protected/Collection/BlockChain/Transaction.cs

72 lines
2.4 KiB
C#

// System
using System;
using System.Reflection;
// Unity
using UnityEngine;
namespace GUPS.AntiCheat.Protected.Collection.Chain
{
/// <summary>
/// Represents a transaction inside a block from a blockchain. A transaction contains a timestamp (the time it was added to the blockchain)
/// and a content of type T.
/// </summary>
/// <typeparam name="T">The type of the content of the transaction.</typeparam>
[Serializable]
[Obfuscation(Exclude = true)]
public class Transaction<T> : ITransaction<T>
where T : struct
{
/// <summary>
/// The timestamp of the transaction, when it was added to the blockchain. Recommended to use at least milliseconds.
/// </summary>
[SerializeField]
public Int64 timestamp;
/// <summary>
/// The timestamp of the transaction, when it was added to the blockchain. Recommended to use at least milliseconds.
/// </summary>
public Int64 Timestamp { get => timestamp; private set => timestamp = value; }
/// <summary>
/// The serializeable content of the transaction.
/// </summary>
[SerializeField]
public T content;
/// <summary>
/// The serializeable content of the transaction.
/// </summary>
public T Content { get => content; private set => content = value; }
/// <summary>
/// Create a new transaction with the current timestamp and content.
/// </summary>
/// <param name="_Content">The content of the transaction.</param>
public Transaction(T _Content)
:this(DateTimeOffset.UtcNow.Ticks, _Content)
{
}
/// <summary>
/// Create a new transaction with the passed index, timestamp and content.
/// </summary>
/// <param name="_Timestamp">The imestamp of the transaction.</param>
/// <param name="_Content">The content of the transaction.</param>
public Transaction(Int64 _Timestamp, T _Content)
{
this.timestamp = _Timestamp;
this.content = _Content;
}
/// <summary>
/// Calculate the hash code of the transaction based on its timestamp and content.
/// </summary>
/// <returns>The hash code of the transaction.</returns>
public override int GetHashCode()
{
return (Int32)this.timestamp ^ this.Content.GetHashCode();
}
}
}