Stage 4: black market orders, escrow, delivery, seller scams, platform rug
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f43cd487e5
commit
6bc479f710
12 files changed
+592
-35
No files matched your search
@@ -9,6 +9,8 @@ internal static class Program
|
||||
{
|
||||
private static int _failed, _passed;
|
||||
|
||||
private static double BlackMarketTestRug() => Tuning.BmRugBase * 3;
|
||||
|
||||
private static void Check(bool ok, string what)
|
||||
{
|
||||
if (ok) _passed++;
|
||||
@@ -583,6 +585,55 @@ internal static class Program
|
||||
Check(Near(back, 10 * 50 * (1 - Tuning.PoneroFee), 1e-9) && Near(w.Get(Assets.CRT), back, 1e-9), "兑出 Ponero");
|
||||
});
|
||||
|
||||
Test("黑市订单", () =>
|
||||
{
|
||||
Func<string, double> price = a => a == Assets.CRT ? 1 : 100;
|
||||
Func<string, long> value = id => 200;
|
||||
var bm = new BlackMarket();
|
||||
bm.RefreshOrders(75, new Rng(5), value);
|
||||
Check(bm.Sellers.Count == Tuning.BmSellerCount && bm.Catalog.Count > 0 && bm.Catalog.All(l => l.Price == 170), "目录:卖家与订单价(基础价 × 0.85)");
|
||||
Check(BlackMarket.Pay(170, PayMode.Escrow) == 170 + 9 && BlackMarket.Pay(170, PayMode.Advance) == 153, "托管多付 5%,提前放款打九折");
|
||||
var good = new BmSeller { Name = "g", Trades = 100, Rating = 95 };
|
||||
var bad = new BmSeller { Name = "b", Trades = 100, Rating = 95, Scam = true };
|
||||
bm.Sellers.Clear(); bm.Sellers.Add(good); bm.Sellers.Add(bad);
|
||||
var lg = new BmListing { Seller = 0, Item = "x", Price = 1000 };
|
||||
var lb = new BmListing { Seller = 1, Item = "x", Price = 1000 };
|
||||
var w = new Wallet { Address = "t" };
|
||||
w.Add(Assets.CRT, 10000); w.Taint = 4000; w.Basis = 5000;
|
||||
var o = bm.Place(lb, PayMode.Escrow, Delivery.Door, w, Assets.CRT, 10, price);
|
||||
Check(o != null && Near(w.Get(Assets.CRT), 10000 - 1050, 1e-9) && w.Taint < 4000 && bm.Place(lg, PayMode.Escrow, Delivery.Door, w, Assets.CRC, 10, price) == null, "托管下单:扣币、污点留在订单上;不收 CRC");
|
||||
double tBefore = 4000;
|
||||
var ev = bm.Night(13, false, w, new Rng(1));
|
||||
Check(ev.Any(e => e.Kind == "scam_refund") && Near(w.Get(Assets.CRT), 10000, 1e-6) && Near(w.Taint, tBefore, 1e-6) && Near(w.Basis, 5000, 1e-6), "骗子卖家 + 托管:退款,污点与成本一并还回(不能借退款洗钱)");
|
||||
var o2 = bm.Place(lb, PayMode.Advance, Delivery.Drop, w, Assets.CRT, 20, price);
|
||||
var ev2 = bm.Night(22, false, w, new Rng(2));
|
||||
Check(o2.State == OrderState.Lost && Near(w.Get(Assets.CRT), 10000 - 900, 1e-6), "骗子卖家 + 提前放款:钱没了");
|
||||
var o3 = bm.Place(lg, PayMode.Escrow, Delivery.Door, w, Assets.CRT, 30, price);
|
||||
Check(bm.Night(31, false, w, new Rng(3)).Count == 0 && o3.State == OrderState.Pending, "没到期不动");
|
||||
int ready = 0, lost = 0;
|
||||
for (int i = 0; i < 400; i++)
|
||||
{
|
||||
var t = new BlackMarket(); t.Sellers.Add(good);
|
||||
var ww = new Wallet(); ww.Add(Assets.CRT, 5000);
|
||||
var oo = t.Place(new BmListing { Seller = 0, Item = "x", Price = 100 }, PayMode.Escrow, Delivery.Door, ww, Assets.CRT, 1, price);
|
||||
t.Night(oo.DueDay, false, ww, new Rng((ulong)i + 7));
|
||||
if (oo.State == OrderState.Ready) ready++; else lost++;
|
||||
}
|
||||
Check(ready > 340 && lost > 10, $"上门:约 {Tuning.BmInterceptDoor:P0} 被截获(跑路另算):到货 {ready},丢失 {lost}");
|
||||
var c = new BlackMarket(); c.Sellers.Add(good);
|
||||
var cw = new Wallet(); cw.Add(Assets.CRT, 5000);
|
||||
var co = c.Place(new BmListing { Seller = 0, Item = "x", Price = 100 }, PayMode.Escrow, Delivery.Door, cw, Assets.CRT, 1, price);
|
||||
c.Night(co.DueDay, true, cw, new Rng(1));
|
||||
Check(co.State == OrderState.Pending && co.DueDay == 5, "镇压期间到期顺延一天");
|
||||
// 跑路:托管资金多则概率高;跑路后关闭
|
||||
var r = new BlackMarket(); r.Sellers.Add(good);
|
||||
var rw = new Wallet(); rw.Add(Assets.CRT, 1000000);
|
||||
for (int i = 0; i < 20; i++) r.Place(new BmListing { Seller = 0, Item = "x", Price = 10000 }, PayMode.Escrow, Delivery.Door, rw, Assets.CRT, 1, price);
|
||||
Check(r.RugChance > BlackMarketTestRug(), "托管资金越多越容易跑路");
|
||||
r.ClosedUntil = 40;
|
||||
Check(r.Closed(40) && !r.Closed(41) && r.Place(new BmListing { Seller = 0, Item = "x", Price = 1 }, PayMode.Escrow, Delivery.Door, rw, Assets.CRT, 30, price) == null, "关闭期间不能下单");
|
||||
});
|
||||
|
||||
Console.WriteLine($"\n{_passed} 通过,{_failed} 失败");
|
||||
return _failed == 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user