Stage 4: honeypot, seller busts, controlled delivery; mining report moved into Web3 page

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ZHU MINCHAOandClaude Sonnet 5.5 committed 2026-11-03 20:13:18 +08:00
1 parent e44a4439ed
commit 5b57f3eedc
9 files changed
+156 -16

No files matched your search

+47 -2
View File
@@ -38,11 +38,22 @@ namespace Decentralized.Domain
/// <summary>付款时留在卖家那边的污点与成本:退款时一并还回,免得"付脏币再退款"洗钱。</summary>
public double Taint, Basis;
public int PlacedDay, DueDay;
/// <summary>被截获后执法选择了上门:到货时快递员是执法人员,签收即记罪证。</summary>
public bool Controlled;
public OrderState State = OrderState.Pending;
/// <summary>终态的原因:done / scam / rug / intercept / theft / refund。</summary>
public string Why;
}
/// <summary>一笔会被追查的交易:到期日、金额(信用点)、来源(honeypot / seller / controlled)。</summary>
public sealed class BmTrap
{
public int Day;
public double Amount;
public string Why;
public string Item;
}
/// <summary>夜间发生的订单事件,供日志与新闻使用。</summary>
public sealed class BmEvent
{
@@ -59,6 +70,13 @@ namespace Decentralized.Domain
public List<string> Forum = new List<string>();
/// <summary>平台跑路后关闭到这一天(含)。</summary>
public int ClosedUntil = -1;
/// <summary>执法接管平台的最后一天(含);期间的交易之后会被追查。</summary>
public int HoneypotUntil = -1;
public List<BmTrap> Traps = new List<BmTrap>();
public bool Honeypot(int day) => day <= HoneypotUntil;
public static double HoneypotChance(int secRep) => Math.Min(Tuning.BmHoneypotMax, Tuning.BmHoneypotBase + Math.Max(0, secRep) * Tuning.BmHoneypotPerSecRep);
private static readonly string[] NameA = { "rat", "grey", "static", "null", "dust", "iron", "pale", "wire", "salt", "ghost" };
private static readonly string[] NameB = { "king", "mule", "broker", "hand", "cat", "fox", "tooth", "lamp", "nine", "dealer" };
@@ -122,6 +140,7 @@ namespace Decentralized.Domain
Taint = taint, Basis = basis, PlacedDay = day, DueDay = day + Tuning.BmDoorDays,
};
Orders.Add(o);
if (Honeypot(day)) Traps.Add(new BmTrap { Day = day + Tuning.BmTrapDelay, Amount = credits, Why = "honeypot", Item = l.Item });
return o;
}
@@ -132,9 +151,10 @@ namespace Decentralized.Domain
}
/// <summary>每晚推进订单:平台跑路、到期的订单(卖家跑路、被截获、死投被挖走)、转入可取状态。镇压期间到期顺延一天。</summary>
public List<BmEvent> Night(int day, bool crackdown, Wallet w, Rng rng)
public List<BmEvent> Night(int day, bool crackdown, Wallet w, Rng rng, int secRep = 0)
{
var ev = new List<BmEvent>();
if (!Honeypot(day) && rng.Chance(HoneypotChance(secRep))) { HoneypotUntil = day + Tuning.BmHoneypotDays; if (!Forum.Contains("easy")) Forum.Add("easy"); }
if (ClosedUntil == day) ev.Add(new BmEvent { Kind = "reopen" });
if (!Closed(day) && Orders.Any(o => o.State == OrderState.Pending) && rng.Chance(RugChance))
{
@@ -158,14 +178,39 @@ namespace Decentralized.Domain
continue;
}
double ic = Tuning.BmInterceptDoor + (crackdown ? Tuning.BmInterceptCrackdown : 0);
if (rng.Chance(ic)) { o.State = OrderState.Lost; o.Why = "intercept"; ev.Add(new BmEvent { Kind = "intercept", Order = o, Amount = o.Price }); continue; }
if (rng.Chance(ic))
{
if (rng.Chance(Tuning.BmControlled)) { o.Controlled = true; o.State = OrderState.Ready; ev.Add(new BmEvent { Kind = "ready", Order = o }); continue; }
o.State = OrderState.Lost; o.Why = "intercept"; ev.Add(new BmEvent { Kind = "intercept", Order = o, Amount = o.Price }); continue;
}
o.State = OrderState.Ready;
ev.Add(new BmEvent { Kind = "ready", Order = o });
}
// 卖家落网:近期成交过的卖家各有小概率被抓,他们留存的订单记录之后会连累买家
foreach (var name in Orders.Where(x => x.State == OrderState.Done && day - x.DueDay <= 14).Select(x => x.Seller).Distinct().ToList())
{
if (!rng.Chance(Tuning.BmSellerBust)) continue;
foreach (var o in Orders.Where(x => x.State == OrderState.Done && x.Seller == name && day - x.DueDay <= 14))
Traps.Add(new BmTrap { Day = day + Tuning.BmTrapDelay, Amount = o.Price, Why = "seller", Item = o.Item });
Forum.Add("busted:" + name);
}
foreach (var t in Traps.Where(x => day >= x.Day).ToList())
{
Traps.Remove(t);
ev.Add(new BmEvent { Kind = "trap", Amount = t.Amount, Order = new BmOrder { Item = t.Item, Seller = t.Why } });
}
Orders.RemoveAll(o => o.State != OrderState.Pending && o.State != OrderState.Ready && day - o.DueDay > 14);
return ev;
}
/// <summary>受控交付:签收则当场记罪证(返回金额)并查封,不交货;拒签则损失货款,不留罪证。</summary>
public double Sign(BmOrder o, bool accept)
{
o.State = OrderState.Lost;
o.Why = accept ? "seized" : "refused";
return accept ? o.Price : 0;
}
public void Deliver(BmOrder o) { o.State = OrderState.Done; o.Why = "done"; }
public IEnumerable<BmOrder> Ready => Orders.Where(o => o.State == OrderState.Ready);