Skip to content

Commit

Permalink
feat(blockchain): add StateProofTracking to the BlockHeader
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonboukheir committed Nov 19, 2022
1 parent be039b1 commit 5d63c9a
Show file tree
Hide file tree
Showing 16 changed files with 270 additions and 4 deletions.
7 changes: 7 additions & 0 deletions Runtime/CareBoo.AlgoSdk/Blockchain/BlockHeader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,13 @@ public partial struct BlockHeader
[AlgoApiField("cc")]
public AlgoApiObject Cc;

/// <summary>
/// StateProofTracking tracks the status of the state proofs, potentially
/// for multiple types of ASPs (Algorand's State Proofs).
/// </summary>
[AlgoApiField("spt")]
public StateProofTrackingDataMap StateProofTracking;

/// <inheritdoc />
[AlgoApiField("fees")]
public Address FeeSink
Expand Down
8 changes: 8 additions & 0 deletions Runtime/CareBoo.AlgoSdk/Blockchain/StateProofs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
using System;
using UnityEngine;

namespace AlgoSdk
{
public interface IStateProofTrackingData
{
/// <summary>
/// StateProofVotersCommitment is the root of a vector commitment containing the
/// online accounts that will help sign a state proof. The
/// VC root, and the state proof, happen on blocks that
/// are a multiple of ConsensusParams.StateProofRounds. For blocks
/// that are not a multiple of ConsensusParams.StateProofRounds,
/// this value is zero.
/// </summary>
byte[] StateProofVotersCommitment { get; set; }

/// <summary>
/// StateProofOnlineTotalWeight is the total number of microalgos held by the online accounts
/// during the StateProof round (or zero, if the merkle root is zero - no commitment for StateProof voters).
/// This is intended for computing the threshold of votes to expect from StateProofVotersCommitment.
/// </summary>
MicroAlgos StateProofOnlineTotalWeight { get; set; }

/// <summary>
/// StateProofNextRound is the next round for which we will accept
/// a StateProof transaction.
/// </summary>
ulong StateProofNextRound { get; set; }
}

/// <summary>
/// StateProofTrackingData tracks the status of state proofs.
/// </summary>
[AlgoApiObject]
[Serializable]
public partial struct StateProofTrackingData
: IStateProofTrackingData
, IEquatable<StateProofTrackingData>
{
[SerializeField]
[Tooltip("StateProofVotersCommitment is the root of a vector commitment containing the " +
"online accounts that will help sign a state proof. The " +
"VC root, and the state proof, happen on blocks that " +
"are a multiple of ConsensusParams.StateProofRounds. For blocks " +
"that are not a multiple of ConsensusParams.StateProofRounds, " +
"this value is zero.")]
private byte[] stateProofVotersCommitment;

[SerializeField]
[Tooltip("StateProofOnlineTotalWeight is the total number of microalgos held by the online accounts " +
"during the StateProof round (or zero, if the merkle root is zero - no commitment for StateProof voters). " +
"This is intended for computing the threshold of votes to expect from StateProofVotersCommitment.")]
private MicroAlgos stateProofOnlineTotalWeight;

[SerializeField]
[Tooltip("StateProofNextRound is the next round for which we will accept a StateProof transaction.")]
private ulong stateProofNextRound;

/// <inehritdoc />
[AlgoApiField("v")]
public byte[] StateProofVotersCommitment
{
get => stateProofVotersCommitment;
set => stateProofVotersCommitment = value;
}

/// <inehritdoc />
[AlgoApiField("t")]
public MicroAlgos StateProofOnlineTotalWeight
{
get => stateProofOnlineTotalWeight;
set => stateProofOnlineTotalWeight = value;
}

/// <inehritdoc />
[AlgoApiField("n")]
public ulong StateProofNextRound
{
get => stateProofNextRound;
set => stateProofNextRound = value;
}

public bool Equals(StateProofTrackingData other)
{
return ArrayComparer.Equals(StateProofVotersCommitment, other.StateProofVotersCommitment)
&& StateProofOnlineTotalWeight.Equals(other.StateProofOnlineTotalWeight)
&& StateProofNextRound.Equals(other.StateProofNextRound)
;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System;

namespace AlgoSdk
{
[AlgoApiObject]
[Serializable]
public partial struct StateProofTrackingDataMap
: IEquatable<StateProofTrackingDataMap>
{
[AlgoApiField("0")]
public StateProofTrackingData StateProofBasicData;

public StateProofTrackingData this[StateProofType type]
{
get
{
switch (type)
{
case StateProofType.StateProofBasic:
return StateProofBasicData;
default:
throw new System.NotSupportedException(type.ToString());
}
}
set
{
switch (type)
{
case StateProofType.StateProofBasic:
StateProofBasicData = value;
break;
default:
throw new System.NotSupportedException(type.ToString());
}
}
}

public bool Equals(StateProofTrackingDataMap other)
{
return StateProofBasicData.Equals(other.StateProofBasicData);
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace AlgoSdk
{
public enum StateProofType : byte
{
StateProofBasic = 0,
NumStateProofTypes = 1,
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public partial struct BlockHeader

private static bool @__generated__InitializeAlgoApiFormatters()
{
AlgoSdk.AlgoApiFormatterLookup.Add<AlgoSdk.BlockHeader>(new AlgoSdk.AlgoApiObjectFormatter<AlgoSdk.BlockHeader>(false).Assign("gh", (AlgoSdk.BlockHeader x) => x.GenesisHash, (ref AlgoSdk.BlockHeader x, AlgoSdk.GenesisHash value) => x.GenesisHash = value).Assign("gen", (AlgoSdk.BlockHeader x) => x.GenesisId, (ref AlgoSdk.BlockHeader x, Unity.Collections.FixedString64Bytes value) => x.GenesisId = value).Assign("prev", (AlgoSdk.BlockHeader x) => x.PreviousBlockHash, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockHash value) => x.PreviousBlockHash = value).Assign("rewards", (AlgoSdk.BlockHeader x) => x.Rewards, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockRewards value) => x.Rewards = value).Assign("rnd", (AlgoSdk.BlockHeader x) => x.Round, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.Round = value).Assign("seed", (AlgoSdk.BlockHeader x) => x.Seed, (ref AlgoSdk.BlockHeader x, AlgoSdk.Crypto.Sha512_256_Hash value) => x.Seed = value).Assign("ts", (AlgoSdk.BlockHeader x) => x.Timestamp, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.Timestamp = value).Assign("txns", (AlgoSdk.BlockHeader x) => x.Transactions, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockTransaction[] value) => x.Transactions = value, AlgoSdk.ArrayComparer<AlgoSdk.BlockTransaction>.Instance).Assign("tc", (AlgoSdk.BlockHeader x) => x.TransactionCounter, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.TransactionCounter = value).Assign("upgrade-state", (AlgoSdk.BlockHeader x) => x.UpgradeState, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockUpgradeState value) => x.UpgradeState = value).Assign("upgrade-vote", (AlgoSdk.BlockHeader x) => x.UpgradeVote, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockUpgradeVote value) => x.UpgradeVote = value).Assign("cc", (AlgoSdk.BlockHeader x) => x.Cc, (ref AlgoSdk.BlockHeader x, AlgoSdk.AlgoApiObject value) => x.Cc = value).Assign("fees", (AlgoSdk.BlockHeader x) => x.FeeSink, (ref AlgoSdk.BlockHeader x, AlgoSdk.Address value) => x.FeeSink = value).Assign("rwcalr", (AlgoSdk.BlockHeader x) => x.RewardsCalculationRound, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsCalculationRound = value).Assign("earn", (AlgoSdk.BlockHeader x) => x.RewardsLevel, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsLevel = value).Assign("rwd", (AlgoSdk.BlockHeader x) => x.RewardsPool, (ref AlgoSdk.BlockHeader x, AlgoSdk.Address value) => x.RewardsPool = value).Assign("rate", (AlgoSdk.BlockHeader x) => x.RewardsRate, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsRate = value).Assign("frac", (AlgoSdk.BlockHeader x) => x.RewardsResidue, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsResidue = value).Assign("proto", (AlgoSdk.BlockHeader x) => x.CurrentProtocol, (ref AlgoSdk.BlockHeader x, Unity.Collections.FixedString128Bytes value) => x.CurrentProtocol = value).Assign("nextproto", (AlgoSdk.BlockHeader x) => x.NextProtocol, (ref AlgoSdk.BlockHeader x, Unity.Collections.FixedString128Bytes value) => x.NextProtocol = value).Assign("nextyes", (AlgoSdk.BlockHeader x) => x.NextProtocolApprovals, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.NextProtocolApprovals = value).Assign("nextswitch", (AlgoSdk.BlockHeader x) => x.NextProtocolSwitchOn, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.NextProtocolSwitchOn = value).Assign("nextbefore", (AlgoSdk.BlockHeader x) => x.NextProtocolVoteBefore, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.NextProtocolVoteBefore = value).Assign("upgradeyes", (AlgoSdk.BlockHeader x) => x.UpgradeApprove, (ref AlgoSdk.BlockHeader x, AlgoSdk.Optional<System.Boolean> value) => x.UpgradeApprove = value).Assign("upgradedelay", (AlgoSdk.BlockHeader x) => x.UpgradeDelay, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.UpgradeDelay = value).Assign("upgradeprop", (AlgoSdk.BlockHeader x) => x.UpgradePropose, (ref AlgoSdk.BlockHeader x, AlgoSdk.Address value) => x.UpgradePropose = value).Assign("txn", (AlgoSdk.BlockHeader x) => x.NativeSha512_256Commitment, (ref AlgoSdk.BlockHeader x, AlgoSdk.Digest value) => x.NativeSha512_256Commitment = value).Assign("txn256", (AlgoSdk.BlockHeader x) => x.Sha256Commitment, (ref AlgoSdk.BlockHeader x, AlgoSdk.Digest value) => x.Sha256Commitment = value));
AlgoSdk.AlgoApiFormatterLookup.Add<AlgoSdk.BlockHeader>(new AlgoSdk.AlgoApiObjectFormatter<AlgoSdk.BlockHeader>(false).Assign("gh", (AlgoSdk.BlockHeader x) => x.GenesisHash, (ref AlgoSdk.BlockHeader x, AlgoSdk.GenesisHash value) => x.GenesisHash = value).Assign("gen", (AlgoSdk.BlockHeader x) => x.GenesisId, (ref AlgoSdk.BlockHeader x, Unity.Collections.FixedString64Bytes value) => x.GenesisId = value).Assign("prev", (AlgoSdk.BlockHeader x) => x.PreviousBlockHash, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockHash value) => x.PreviousBlockHash = value).Assign("rewards", (AlgoSdk.BlockHeader x) => x.Rewards, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockRewards value) => x.Rewards = value).Assign("rnd", (AlgoSdk.BlockHeader x) => x.Round, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.Round = value).Assign("seed", (AlgoSdk.BlockHeader x) => x.Seed, (ref AlgoSdk.BlockHeader x, AlgoSdk.Crypto.Sha512_256_Hash value) => x.Seed = value).Assign("ts", (AlgoSdk.BlockHeader x) => x.Timestamp, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.Timestamp = value).Assign("txns", (AlgoSdk.BlockHeader x) => x.Transactions, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockTransaction[] value) => x.Transactions = value, AlgoSdk.ArrayComparer<AlgoSdk.BlockTransaction>.Instance).Assign("tc", (AlgoSdk.BlockHeader x) => x.TransactionCounter, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.TransactionCounter = value).Assign("upgrade-state", (AlgoSdk.BlockHeader x) => x.UpgradeState, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockUpgradeState value) => x.UpgradeState = value).Assign("upgrade-vote", (AlgoSdk.BlockHeader x) => x.UpgradeVote, (ref AlgoSdk.BlockHeader x, AlgoSdk.BlockUpgradeVote value) => x.UpgradeVote = value).Assign("cc", (AlgoSdk.BlockHeader x) => x.Cc, (ref AlgoSdk.BlockHeader x, AlgoSdk.AlgoApiObject value) => x.Cc = value).Assign("spt", (AlgoSdk.BlockHeader x) => x.StateProofTracking, (ref AlgoSdk.BlockHeader x, AlgoSdk.StateProofTrackingDataMap value) => x.StateProofTracking = value).Assign("fees", (AlgoSdk.BlockHeader x) => x.FeeSink, (ref AlgoSdk.BlockHeader x, AlgoSdk.Address value) => x.FeeSink = value).Assign("rwcalr", (AlgoSdk.BlockHeader x) => x.RewardsCalculationRound, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsCalculationRound = value).Assign("earn", (AlgoSdk.BlockHeader x) => x.RewardsLevel, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsLevel = value).Assign("rwd", (AlgoSdk.BlockHeader x) => x.RewardsPool, (ref AlgoSdk.BlockHeader x, AlgoSdk.Address value) => x.RewardsPool = value).Assign("rate", (AlgoSdk.BlockHeader x) => x.RewardsRate, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsRate = value).Assign("frac", (AlgoSdk.BlockHeader x) => x.RewardsResidue, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.RewardsResidue = value).Assign("proto", (AlgoSdk.BlockHeader x) => x.CurrentProtocol, (ref AlgoSdk.BlockHeader x, Unity.Collections.FixedString128Bytes value) => x.CurrentProtocol = value).Assign("nextproto", (AlgoSdk.BlockHeader x) => x.NextProtocol, (ref AlgoSdk.BlockHeader x, Unity.Collections.FixedString128Bytes value) => x.NextProtocol = value).Assign("nextyes", (AlgoSdk.BlockHeader x) => x.NextProtocolApprovals, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.NextProtocolApprovals = value).Assign("nextswitch", (AlgoSdk.BlockHeader x) => x.NextProtocolSwitchOn, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.NextProtocolSwitchOn = value).Assign("nextbefore", (AlgoSdk.BlockHeader x) => x.NextProtocolVoteBefore, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.NextProtocolVoteBefore = value).Assign("upgradeyes", (AlgoSdk.BlockHeader x) => x.UpgradeApprove, (ref AlgoSdk.BlockHeader x, AlgoSdk.Optional<System.Boolean> value) => x.UpgradeApprove = value).Assign("upgradedelay", (AlgoSdk.BlockHeader x) => x.UpgradeDelay, (ref AlgoSdk.BlockHeader x, System.UInt64 value) => x.UpgradeDelay = value).Assign("upgradeprop", (AlgoSdk.BlockHeader x) => x.UpgradePropose, (ref AlgoSdk.BlockHeader x, AlgoSdk.Address value) => x.UpgradePropose = value).Assign("txn", (AlgoSdk.BlockHeader x) => x.NativeSha512_256Commitment, (ref AlgoSdk.BlockHeader x, AlgoSdk.Digest value) => x.NativeSha512_256Commitment = value).Assign("txn256", (AlgoSdk.BlockHeader x) => x.Sha256Commitment, (ref AlgoSdk.BlockHeader x, AlgoSdk.Digest value) => x.Sha256Commitment = value));
return true;
}
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace AlgoSdk
{


public partial struct StateProofTrackingData
{

private static bool @__generated__IsValid = StateProofTrackingData.@__generated__InitializeAlgoApiFormatters();

private static bool @__generated__InitializeAlgoApiFormatters()
{
AlgoSdk.AlgoApiFormatterLookup.Add<AlgoSdk.StateProofTrackingData>(new AlgoSdk.AlgoApiObjectFormatter<AlgoSdk.StateProofTrackingData>(false).Assign("v", (AlgoSdk.StateProofTrackingData x) => x.StateProofVotersCommitment, (ref AlgoSdk.StateProofTrackingData x, System.Byte[] value) => x.StateProofVotersCommitment = value, AlgoSdk.ArrayComparer<System.Byte>.Instance).Assign("t", (AlgoSdk.StateProofTrackingData x) => x.StateProofOnlineTotalWeight, (ref AlgoSdk.StateProofTrackingData x, AlgoSdk.MicroAlgos value) => x.StateProofOnlineTotalWeight = value).Assign("n", (AlgoSdk.StateProofTrackingData x) => x.StateProofNextRound, (ref AlgoSdk.StateProofTrackingData x, System.UInt64 value) => x.StateProofNextRound = value));
return true;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace AlgoSdk
{


public partial struct StateProofTrackingDataMap
{

private static bool @__generated__IsValid = StateProofTrackingDataMap.@__generated__InitializeAlgoApiFormatters();

private static bool @__generated__InitializeAlgoApiFormatters()
{
AlgoSdk.AlgoApiFormatterLookup.Add<AlgoSdk.StateProofTrackingDataMap>(new AlgoSdk.AlgoApiObjectFormatter<AlgoSdk.StateProofTrackingDataMap>(false).Assign("0", (AlgoSdk.StateProofTrackingDataMap x) => x.StateProofBasicData, (ref AlgoSdk.StateProofTrackingDataMap x, AlgoSdk.StateProofTrackingData value) => x.StateProofBasicData = value));
return true;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,10 @@ CancellationToken cancellationToken
else
responseMessage.Headers.Add(header.Key, header.Value);
}
catch
catch (System.Exception ex)
{
Debug.LogError($"Issue with header: {header}");
Debug.LogException(ex);
throw;
}
}
Expand All @@ -65,6 +66,6 @@ CancellationToken cancellationToken
private static bool IsContentHeader(KeyValuePair<string, string> header)
{
var headerKeyLower = header.Key.ToLower();
return headerKeyLower == "content-type" || headerKeyLower == "content-Length";
return headerKeyLower == "content-type" || headerKeyLower == "content-length";
}
}

0 comments on commit 5d63c9a

Please sign in to comment.