Stage 6.1: CRA staking pool, SPARK balance token with mint/burn

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ZHU MINCHAOandClaude Sonnet 5.5 committed 2026-11-04 00:06:16 +08:00
1 parent 58dd93eca6
commit 98e80412e6
12 files changed
+371 -9

No files matched your search

+8 -4
View File
@@ -29,6 +29,9 @@ namespace Decentralized
public string Address, Asset, Summary;
public double Amount;
public bool Contract;
/// <summary>合约调用时钱包里实际要花掉的数量(默认等于 Amount;取出质押这类不花币的调用为 0)和付手续费的币(默认用 Asset)。</summary>
public double? Spend;
public string FeeAsset;
public Action<Wallet> Execute;
}
@@ -65,7 +68,7 @@ namespace Decentralized
}
private static readonly Dictionary<string, Device> Devices = new Dictionary<string, Device>();
private static readonly string[] SendAssets = { Assets.PSC, Assets.CRC, Assets.CRT, Assets.CRA, Assets.Ponero };
private static readonly string[] SendAssets = { Assets.PSC, Assets.CRC, Assets.CRT, Assets.CRA, Assets.SPARK, Assets.Ponero };
/// <summary>网络拥堵:夜间结算随机开始,持续一两天,期间手续费变贵、慢档和普通档确认变慢。</summary>
public static bool Congested
@@ -483,7 +486,7 @@ namespace Decentralized
private static float Progress(Device dev) => Total(dev) <= 0 ? 0 : Mathf.Clamp01(Elapsed(dev) / Total(dev));
/// <summary>扣手续费的币:转账用转出的币,合约调用用账单上的币。</summary>
private static string FeeAssetOf(Device dev) => Pending != null && Pending.Contract ? (Pending.Asset ?? Assets.PSC) : dev.Asset;
private static string FeeAssetOf(Device dev) => Pending != null && Pending.Contract ? (Pending.FeeAsset ?? Pending.Asset ?? Assets.PSC) : dev.Asset;
/// <summary>这笔交易的价值(信用点),决定确认数。</summary>
private static double ValueOf(Device dev)
@@ -549,8 +552,9 @@ namespace Decentralized
d.Block += 1 + d.Rng.Range(0, 3);
if (Pending != null && Pending.Contract)
{
string a = Pending.Asset ?? Assets.PSC;
if (dev.Wallet.Avail(a) + 1e-9 < Pending.Amount + FeeIn(a, dev.Tier)) { dev.Note = L.T("hw.err.fee"); Open(dev); return; }
string a = Pending.Asset ?? Assets.PSC, fa = FeeAssetOf(dev);
double spend = Pending.Spend ?? Pending.Amount;
if (a == fa ? dev.Wallet.Avail(a) + 1e-9 < spend + FeeIn(fa, dev.Tier) : dev.Wallet.Avail(a) + 1e-9 < spend || dev.Wallet.Avail(fa) + 1e-9 < FeeIn(fa, dev.Tier)) { dev.Note = L.T("hw.err.fee"); Open(dev); return; }
dev.Tx = new Tx { Bill = Pending, Block = d.Block, Start = Time.unscaledTime };
}
else