第十阶段 stage 2(一):交易对改为 X/CRC 池,任意币互换经 CRC 两跳路由,币价表改为 CRC 价格

This commit is contained in:
ZHU MINCHAO committed 2026-11-05 07:09:05 +08:00
1 parent 75fb6d6b2a
commit 3758049dcb
14 files changed
+196 -48

No files matched your search

+27 -6
View File
@@ -318,17 +318,38 @@ internal static class Program
Check(n.Anchor(new MarketEvent[0]) > Tuning.PscStartPrice * 1.05, "锚随之上移");
});
Test("市场:其他交易对每晚被套利拉向参考价,三角价差收敛", () =>
Test("市场:其他交易对每晚被套利拉向参考价,价差收敛", () =>
{
var m = Market.CreateDefault(1);
var crt = m.Find(Venue.Dex, Assets.PSC, Assets.CRT);
crt.SetPrice(130, crt.QuoteReserve);
var dexPsc = m.DexPool(Assets.PSC);
dexPsc.SetPrice(130, dexPsc.QuoteReserve);
for (int d = 1; d <= 5; d++) m.Night(new MarketEvent[0], new Rng((ulong)d), 1, a => 1);
double gap = Math.Abs(crt.Price / m.Price - 1);
Check(gap < 0.03, $"五晚后 PSC/CRT 与参考价相差 {gap:P1}");
var crtCrc = m.Find(Venue.Dex, Assets.CRT, Assets.CRC);
double gap = Math.Abs(dexPsc.Price / m.Price - 1);
Check(gap < 0.03, $"五晚后 DEX 的 PSC/CRC 与参考价相差 {gap:P1}");
var crtCrc = m.DexPool(Assets.CRT);
m.Night(new MarketEvent[0], new Rng(9), 1, a => a == Assets.CRT ? 0.9 : 1);
Check(crtCrc.Price < 0.98, $"CRT 脱锚时 CRT/CRC 向 0.9 靠拢:{crtCrc.Price:0.000}");
var m2 = Market.CreateDefault(1);
var spark = m2.DexPool(Assets.SPARK);
m2.Night(new MarketEvent[0], new Rng(11), 1, a => a == Assets.SPARK ? 20 : 1);
Check(spark.Price > Tuning.SparkStart * 1.3, $"SPARK/CRC 向 SPARK 价格靠拢:{spark.Price:0.00}");
});
Test("市场:任意两币互换经 CRC 路由,两跳付两次手续费", () =>
{
var m = Market.CreateDefault(1);
var oneHop = m.Quote(Assets.CRC, Assets.PSC, 100);
var twoHop = m.Quote(Assets.CRA, Assets.PSC, 100);
Check(oneHop != null && oneHop.Hops == 1 && twoHop != null && twoHop.Hops == 2, "CRC 在一端走一个池,否则两个池");
Check(m.Quote(Assets.PSC, Assets.PSC, 1) == null && m.Quote(Assets.CRC, Assets.CRC, 1) == null && m.Quote(Assets.CRC, Assets.Ponero, 1) == null, "同币、没有池没有路由");
Check(twoHop.Impact > oneHop.Impact && twoHop.Impact > Tuning.DexFee * 1.9, $"两跳损失更大:{oneHop.Impact:P2} 对 {twoHop.Impact:P2}");
double expect = m.DexPool(Assets.PSC).BaseOut(m.DexPool(Assets.CRA).QuoteOut(100));
Check(Near(twoHop.Out, expect, 1e-9), "两跳的数量 = 先卖成 CRC 再买");
double got = m.Swap(Assets.CRA, Assets.PSC, 100);
Check(Near(got, twoHop.Out, 1e-9), "成交数量与报价一致");
Check(m.DexPool(Assets.CRA).Price < 1 && m.DexPool(Assets.PSC).Price > Tuning.PscStartPrice, "成交推动两个池的价格");
var big = Market.CreateDefault(1).Quote(Assets.CRC, Assets.SPARK, 20000);
Check(big.Impact > 0.2, $"SPARK 池比较薄,大单滑点大:{big.Impact:P0}");
});
Test("稳定币:CRC 脱锚与减记,CRT 脱锚与冻结概率", () =>