现货深度、保险基金、爆仓新闻、预测盘流动性、收黑币、赃物污点、升级降价

- 主池深度 50,000 → 600,000,现货与出金手续费 0.1%;永续成交深度单独计算,滑点不变
- Poinbase 现货买卖都按标的币数量输入,显示手续费,滑点不含手续费
- 保险基金初值 200,000,NPC 按概率爆仓(剩余保证金进基金)或穿仓(基金垫付)
- 单日涨跌 15% 以上上报纸:全网爆仓人数和金额(含玩家)
- 预测盘流动性与先验脱钩,份额上限按单盘额度,手续费 1%;查处概率、消息价相应上调
- 收黑币:事件期间上门折价出手 CRT / PSC,兑换处开放后有 Ponero;便衣
- 灰网出售赃物按热度带污点
- 混币器 300、黑市 600
- 存档数据版本 2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZHU MINCHAOandClaude Opus 5.5 committed 2026-11-07 22:24:36 +08:00
1 parent 68eca64944
commit f0bbba2305
23 files changed
+603 -98

No files matched your search

+13
View File
@@ -1,5 +1,18 @@
# Changelog
## 未发布
- Poinbase 现货:主交易对深度 50,000 → 600,000(按全网日产出对照头部交易所:第 38 天买 2 PSC 的价格冲击约 0.02%,原来约 0.24%;卖 200 PSC 约 2%,原来约 21%),DEX 侧池比例不变跟着变深;现货与出金手续费 0.2% → 0.1%。NPC 大户每笔 2,000–8,000 → 24,000–96,000,对价格的影响和原来一样。永续的成交深度单独计算(基数仍是 50,000),永续滑点不变。
- Poinbase 交易界面:买入和卖出都输入标的币数量,标签“数量(PSC)”;买入预览改为“约需 X CRC”;交易对一行显示手续费;均价含手续费,滑点不含手续费。
- 保险基金:初值 10,000 → 200,000(约 20 天的全网产出)。去掉“每晚固定补 150、NPC 大行情按冲击平方扣”的旧规则,改为 NPC 仓位随行情爆仓:亏损一侧的持仓为现货池深的 1 倍(SPARK 再乘 0.15),涨跌幅达到 25% 全部爆仓,之前按比例;大部分正常爆仓,剩下的保证金(名义价值的 0.5%)进基金;涨跌超过 12% 后穿仓的比例开始上升(5% 起,每多 1% 加 1.5%),缺口由基金垫付。离线模拟(300 局 × 200 天,带插针、事件、SPARK):基金缓慢上升,没有一局见底,最坏的单晚流出约 17 万。
- 爆仓新闻:标记价单日涨跌达到 15% 时,报纸报道全网爆仓的人数和金额(含玩家被强平的仓位)以及保险基金余额;模拟里平均 10 天左右一次。
- 预测市场:流动性与先验脱钩,b = 10 × 单盘额度 / ln 2(低先验盘不再更浅:第 38 天在 5% 的盘口押 50,均价从约 +67% 降到约 +4%);份额上限改为 2 × 单盘额度;手续费 2% → 1%。为保持平衡:内幕查处概率 50% → 70%(否则买满上限的期望高于压线),内幕消息价格 1% / 2.5% / 5% → 3% / 8% / 20% 的单盘额度(predsim:高档消息押 1,000 在 50% 盘口平均 +343,原来 +338)。旧存档里的盘口按原来的额度计算。
- 收黑币:帮派火并、镇压期间有人上门折价出手 CRT,革命军袭击上层、下层动荡期间是 PSC(每天 35%),Ponero 兑换处开放后偶尔有人出手 Ponero(每天 5%)。只收现金,币进已连接的钱包;市值为房租的 4–15 倍,PSC、CRT 要价是市值的 45–60%,按市值全额带污点;Ponero 要价 70–80%,不带污点。卖家有 5% 是便衣(镇压期间 15%):收下就没收现金并记销赃罪证。开发者模式 F9 有测试入口(Hot coin seller)。
- 灰网出售:赃物的货款按“货款 × 赃物热度%”带污点,不再随机。
- 人脉升级降价:混币器 700 → 300,Web3 黑市 1,500 → 600。
- 手册:交易数量的说明、NPC 爆仓与爆仓新闻、保险基金见底的条件、赃物出售的污点、收黑币一节,8 种语言。
- 存档数据版本 2:读旧存档时主池手续费改为新值、池深按新数值重设,保险基金补到新初值。
## 1.0.0
正式版:相对 rc11 只有文案审查(见下),功能与 rc11 相同。
+8
View File
@@ -36,6 +36,14 @@ namespace Decentralized.Domain
return BaseReserve - BaseReserve * QuoteReserve / y;
}
/// <summary>预估:买到 baseOut 个 Base 要付多少 Quote(含手续费,不改池子);超出池子储备返回 +∞。</summary>
public double QuoteIn(double baseOut)
{
if (baseOut <= 0) return 0;
if (baseOut >= BaseReserve) return double.PositiveInfinity;
return (BaseReserve * QuoteReserve / (BaseReserve - baseOut) - QuoteReserve) / (1 - Fee);
}
/// <summary>卖出 Base,返回得到的 Quote。手续费留在池里。</summary>
public double SellBase(double baseIn)
{
+7 -4
View File
@@ -24,6 +24,8 @@ namespace Decentralized.Domain
/// <summary>成交后扣掉抽成的货款(信用点)与其中带的污点。</summary>
public int Proceeds;
public double Taint;
/// <summary>上架那件货的赃物热度(0–100):赃物的货款按"货款 × 热度%"带污点,不走随机。</summary>
public double Heat;
/// <summary>成交那一轮的收款币(空 = CRT,旧存档):货款到期后以这个币付给钱包。</summary>
public string PayAsset;
/// <summary>终态原因:fake(买家看穿假卡退货)/ rug / delist。</summary>
@@ -102,8 +104,8 @@ namespace Decentralized.Domain
public static int ListPriceOf(long refValue, double m) => (int)Math.Max(1, Math.Round(refValue * m));
public static int ListFee(int listPrice) => (int)Math.Ceiling(listPrice * Tuning.BmListFee);
/// <summary>上架:交付一件货,收上架费(付给 feeAsset 币,污点与成本按比例带走)。倍率超出范围、平台关闭或余额不足返回 null。</summary>
public BmSale List(string item, string model, string fakeOf, double health, long refValue, double m, Wallet w, string feeAsset, int day, Func<string, double> price)
/// <summary>上架:交付一件货,收上架费(付给 feeAsset 币,污点与成本按比例带走)。heat 是这件货的赃物热度(0–100)。倍率超出范围、平台关闭或余额不足返回 null。</summary>
public BmSale List(string item, string model, string fakeOf, double health, long refValue, double m, Wallet w, string feeAsset, int day, Func<string, double> price, double heat = 0)
{
if (m < Tuning.BmSellMin - 1e-9 || m > Tuning.BmSellMax + 1e-9 || refValue <= 0 || Closed(day) || feeAsset == Assets.CRC || ListBlock(BmSale.KeyOf(item, model, fakeOf, health), m) != null) return null;
int listPrice = ListPriceOf(refValue, m);
@@ -115,7 +117,7 @@ namespace Decentralized.Domain
double share = total > 0 ? Math.Min(1, ListFee(listPrice) / total) : 0;
w.Taint -= w.Taint * share; w.Basis -= w.Basis * share;
w.Add(feeAsset, -qty);
var s = new BmSale { Item = item, Model = model, FakeOf = fakeOf, Health = health, Ref = refValue, Mult = m, ListPrice = listPrice, ListedDay = day, Wallet = w.Address };
var s = new BmSale { Item = item, Model = model, FakeOf = fakeOf, Health = health, Ref = refValue, Mult = m, ListPrice = listPrice, ListedDay = day, Wallet = w.Address, Heat = Math.Max(0, Math.Min(100, heat)) };
Sales.Add(s);
return s;
}
@@ -148,7 +150,8 @@ namespace Decentralized.Domain
s.State = SaleState.Sold;
s.Proceeds = (int)Math.Round(s.ListPrice * (1 - Tuning.BmCommission));
double vb = VolumeTaint(day);
s.Taint = rng.Chance(Math.Min(1, TaintChance(s.Mult) + vb)) ? s.Proceeds * Math.Min(1, TaintRatio(s.Mult) + vb) : 0;
s.Taint = s.Heat > 0 ? s.Proceeds * s.Heat / 100
: rng.Chance(Math.Min(1, TaintChance(s.Mult) + vb)) ? s.Proceeds * Math.Min(1, TaintRatio(s.Mult) + vb) : 0;
s.PayDay = day + Tuning.BmSaleHold;
Rating = Math.Min(100, Rating + 1);
if (Honeypot(day)) Traps.Add(new BmTrap { Day = day + Tuning.BmTrapDelay, Amount = s.Proceeds, Why = "honeypot", Item = s.Item, Group = HoneypotStart });
+55
View File
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
namespace Decentralized.Domain
{
/// <summary>一笔黑币报价:卖家手里的币、按现价的市值和他要的现金。Sting 是钓鱼执法(收下就记罪证,币不会到)。</summary>
public sealed class HotOffer
{
public string Asset;
public double Qty, Value;
public int Cash;
public bool Sting;
}
/// <summary>
/// 收黑币:游戏里出了事,手里有来路不明的币的人上门,折价换现金。
/// 帮派火并、镇压期间黑市的人出手 CRT;革命军袭击上层、下层动荡期间有人出手抢来的 PSC;黑市声望够了以后偶尔有人出手勒索得来的 Ponero。
/// PSC、CRT 链上可追,收下的币按市值全额带污点;Ponero 不可追、不带污点,折扣也小,出口只有 Ponero 兑换处。
/// </summary>
public static class HotCoins
{
/// <summary>今天哪种黑币可能有人上门(按游戏当前的事件),没有返回 null。poneroOpen:Ponero 兑换处已开放。</summary>
public static string Pick(ICollection<MarketEvent> active, bool poneroOpen, Rng rng)
{
var c = new List<string>();
if (active.Contains(MarketEvent.GangWar) || active.Contains(MarketEvent.Crackdown)) c.Add(Assets.CRT);
if (active.Contains(MarketEvent.RevRaidUpper) || active.Contains(MarketEvent.LowerUnrest)) c.Add(Assets.PSC);
if (c.Count > 0 && rng.Chance(Tuning.HotEventChance)) return c[rng.Range(0, c.Count - 1)];
if (poneroOpen && rng.Chance(Tuning.HotPoneroChance)) return Assets.Ponero;
return null;
}
/// <summary>开价:市值 = 房租 × 区间,现金要价 = 市值 × 折扣(Ponero 折扣小)。crackdown:镇压期间钓鱼执法更多。</summary>
public static HotOffer Make(string asset, double coinPrice, double rent, bool crackdown, Rng rng)
{
if (coinPrice <= 0 || rent <= 0) return null;
double value = rent * rng.Range(Tuning.HotValueMinRents, Tuning.HotValueMaxRents);
bool ponero = asset == Assets.Ponero;
double cut = ponero ? rng.Range(Tuning.HotPoneroCutMin, Tuning.HotPoneroCutMax) : rng.Range(Tuning.HotCutMin, Tuning.HotCutMax);
return new HotOffer
{
Asset = asset, Qty = value / coinPrice, Value = value, Cash = (int)Math.Round(value * cut),
Sting = rng.Chance(Tuning.HotSting + (crackdown ? Tuning.HotStingCrackdown : 0)),
};
}
/// <summary>收下:币进钱包,成本是付出的现金;PSC、CRT 按市值记污点,Ponero 不记。钓鱼执法不在这里处理。</summary>
public static void Receive(Wallet w, HotOffer o)
{
w.Add(o.Asset, o.Qty);
w.Basis += o.Cash;
if (o.Asset != Assets.Ponero) w.Taint += o.Value;
}
}
}
+2 -2
View File
@@ -156,11 +156,11 @@ namespace Decentralized.Domain
OpenPrice = p;
}
/// <summary>NPC 大户:每周约 2 笔、每笔 2,000–8,000 信用点,随机买或卖。返回成交额(正为买入),没有交易时为 0。</summary>
/// <summary>NPC 大户:每周约 2 笔、每笔 <see cref="Tuning.WhaleMin"/>–<see cref="Tuning.WhaleMax"/> 信用点,随机买或卖。返回成交额(正为买入),没有交易时为 0。</summary>
public double Whale(Rng rng)
{
if (!rng.Chance(2.0 / 7)) return 0;
double size = rng.Range(2000.0, 8000.0);
double size = rng.Range(Tuning.WhaleMin, Tuning.WhaleMax);
if (rng.Chance(0.5)) { Main.BuyBase(size); return size; }
Main.SellBase(size / Price);
return -size;
+33 -11
View File
@@ -27,16 +27,19 @@ namespace Decentralized.Domain
/// <summary>夜间发生的事:强平、自动减仓、催收没收、核销。</summary>
public sealed class PerpEvent
{
public string Kind; // liq / adl / seize / writeoff / interest
public string Kind; // liq / adl / seize / writeoff / interest / wipe
public string Product;
public bool Long;
public double Amount; // 损失、减记、或欠款(信用点)
public double Amount; // 损失、减记、或欠款(信用点);wipe 是全网爆仓的名义价值(含玩家)
public int Count; // wipe:爆仓人数(含玩家)
public double Move; // wipe:标记价的涨跌幅
}
/// <summary>
/// Poinbase 永续合约(PSC-PERP、SPARK-PERP):保证金用 Poinbase 账户里的 CRC,一个品种一个净仓位。
/// 标记价是当日均价,强平只在夜间检查(白天插针不触发)。强平后的剩余权益进保险基金,权益为负先由基金垫付,
/// 基金不够的缺口记成玩家的欠款;NPC 在大行情里穿仓会消耗基金,基金见底时盈利的仓位被自动减仓(盈利打折)。
/// 基金不够的缺口记成玩家的欠款。NPC 仓位随行情爆仓:大部分正常爆仓,剩余保证金进基金;行情越快穿仓越多,缺口由基金垫付。
/// 基金见底时盈利的仓位被自动减仓(盈利打折)。
/// 欠款每天计息,每晚先用账户里的 CRC 还;逾期没还清由接入层没收物品抵债,剩下的核销并拉黑永续账户一段时间。
/// </summary>
public sealed class PerpBook
@@ -49,13 +52,13 @@ namespace Decentralized.Domain
public Dictionary<string, double> Funding = new Dictionary<string, double>();
/// <summary>资金费系数(费率 = 系数 × 标记价偏离 7 日均价的比例)。默认取配置,模拟里用来校准。</summary>
public double FundCoef = Tuning.PerpFundCoef;
/// <summary>成交深度倍数(滑点 = 名义价值 / (倍数 × 池深)),模拟里用来校准。</summary>
/// <summary>成交深度倍数(滑点 = 名义价值 / (倍数 × 永续深度)),模拟里用来校准。</summary>
public double DepthMult = Tuning.PerpDepthMult;
/// <summary>成交价:买入(开多、平空)往上滑,卖出往下滑,滑点随名义价值占现货池深的比例增大,封顶 50%。</summary>
/// <summary>成交价:买入(开多、平空)往上滑,卖出往下滑,滑点随名义价值占永续深度的比例增大,封顶 50%。</summary>
public double Exec(double price, double notional, bool buy, int day)
{
double slip = Math.Min(0.5, notional / (DepthMult * Tuning.PoolDepth(day)));
double slip = Math.Min(0.5, notional / (DepthMult * Tuning.PerpDepth(day)));
return price * (1 + (buy ? slip : -slip));
}
@@ -151,12 +154,28 @@ namespace Decentralized.Domain
}
/// <summary>
/// 夜间结算。marks:各品种今天的标记价(日均价)。顺序:资金费 → NPC 穿仓消耗基金 → 强平 → 基金见底时自动减仓盈利仓位 →
/// 欠款计息并用账户 CRC 偿还 → 逾期的触发没收。
/// NPC 仓位在一晚涨跌幅 move 下对保险基金的净流入(可为负),以及爆仓的名义价值。oi 是亏损一侧的持仓。
/// 爆仓量 = oi × min(1, move / PerpNpcLiqScale);其中穿仓的比例随涨跌幅升高,正常爆仓交出剩余保证金,穿仓的缺口由基金垫付。
/// </summary>
public static double NpcFlow(double move, double oi, out double liquidated)
{
move = Math.Abs(move);
liquidated = oi * Math.Min(1, move / Tuning.PerpNpcLiqScale);
double bank = Math.Min(Tuning.PerpNpcBankMax, Tuning.PerpNpcBankBase + Tuning.PerpNpcBankSlope * Math.Max(0, move - Tuning.PerpNpcBankFree));
return liquidated * ((1 - bank) * Tuning.PerpNpcLeft - bank * move * Tuning.PerpNpcGap);
}
/// <summary>NPC 在某个品种上单边的持仓(信用点名义价值)。</summary>
public static double NpcOi(string product, int day) => Tuning.PerpNpcOi * Tuning.PoolDepth(day) * (product == "SPARK" ? Tuning.SparkDepthShare : 1);
/// <summary>
/// 夜间结算。marks:各品种今天的标记价(日均价)。顺序:资金费 → NPC 爆仓与穿仓进出基金 → 强平 → 基金见底时自动减仓盈利仓位 →
/// 欠款计息并用账户 CRC 偿还 → 逾期的触发没收。标记价涨跌达到 <see cref="Tuning.PerpNewsMove"/> 的品种另记一条 wipe(全网爆仓,含玩家)。
/// </summary>
public List<PerpEvent> Night(int day, IDictionary<string, double> marks, Wallet acct, Func<string, double> pr)
{
var evs = new List<PerpEvent>();
var wipes = new Dictionary<string, PerpEvent>();
bool adl = false;
foreach (var kv in marks)
{
@@ -169,9 +188,10 @@ namespace Decentralized.Domain
hist.Add(mark); if (hist.Count > 7) hist.RemoveAt(0);
var pos = Of(product);
if (pos != null) pos.Margin -= (pos.Long ? 1 : -1) * rate * pos.Notional(mark);
double ret = prev > 0 ? Math.Abs(mark / prev - 1) : 0;
double shock = Math.Max(0, (ret - Tuning.PerpShockFree) / Tuning.PerpShockFree);
InsuranceFund += Tuning.PerpFundDrift - Tuning.PerpFundShock * shock * shock;
double ret = prev > 0 ? mark / prev - 1 : 0;
InsuranceFund += NpcFlow(ret, NpcOi(product, day), out double liq);
if (Math.Abs(ret) >= Tuning.PerpNewsMove)
wipes[product] = new PerpEvent { Kind = "wipe", Product = product, Long = ret < 0, Amount = liq, Count = (int)Math.Round(liq / Tuning.PerpNpcAvgPos), Move = ret };
}
if (InsuranceFund < 0) { InsuranceFund = 0; adl = true; }
foreach (var pos in Positions.ToList())
@@ -183,7 +203,9 @@ namespace Decentralized.Domain
double rem = eq - Tuning.PerpLiqFee * notional;
if (rem >= 0) InsuranceFund += rem; else Cover(-rem, day);
evs.Add(new PerpEvent { Kind = "liq", Product = pos.Product, Long = pos.Long, Amount = pos.Margin });
if (wipes.TryGetValue(pos.Product, out var wp) && wp.Long == pos.Long) { wp.Amount += notional; wp.Count++; }
}
evs.AddRange(wipes.Values);
if (adl)
foreach (var pos in Positions.ToList())
{
+11 -8
View File
@@ -10,7 +10,8 @@ namespace Decentralized.Domain
/// <summary>
/// 一个盘口:问一个是非题,开盘当天可以买卖,窗口(FromDay..ToDay)里的结果由游戏或本 mod 的数值决定,ToDay 夜间结算。
/// 定价用 LMSR:初始价等于先验概率 P0,系统在单盘的最大亏损固定(<see cref="MaxLoss"/>),流动性参数 B 由它反推。
/// 定价用 LMSR:初始价等于先验概率 P0,流动性参数 B 按开盘日的单盘额度(<see cref="Budget"/>)定,与先验无关;
/// 额度决定份额上限(限制内幕单能赚多少)和内幕消息的价格。
/// </summary>
public sealed class PredictMarket
{
@@ -22,13 +23,15 @@ namespace Decentralized.Domain
public double Param;
public int OpenDay, FromDay, ToDay;
public double P0, B, QYes, QNo;
/// <summary>单盘额度(开盘日的 <see cref="LossFor"/>)。旧存档里的盘口没有这个字段,按当时"额度 = B × ln(1/先验)"回推。</summary>
public double Budget;
/// <summary>昨晚消息反应之前的价格(-1 = 还没反应过):列表里显示涨跌,让玩家看到消息怎样推动价格。</summary>
public double PrevP = -1;
/// <summary>-1 未结算,0 否,1 是,2 作废(缺观测数据,退还本金)。</summary>
public int Outcome = -1;
public double MaxLoss => B * Math.Log(1 / Math.Min(P0, 1 - P0));
public double ShareCap => Tuning.PredictCap * MaxLoss;
public double Loss => Budget > 0 ? Budget : B * Math.Log(1 / Math.Min(P0, 1 - P0));
public double ShareCap => Tuning.PredictCap * Loss;
public bool IsOpen(int day) => Outcome < 0 && day < FromDay;
public double PYes => 1 / (1 + Math.Exp((QNo - QYes) / B));
@@ -37,8 +40,8 @@ namespace Decentralized.Domain
public static PredictMarket Create(int id, PredictKind kind, string key, string title, double param, int openDay, int fromDay, int toDay, double p0)
{
p0 = Math.Max(Tuning.PredictPMin, Math.Min(Tuning.PredictPMax, p0));
double b = LossFor(openDay) / Math.Log(1 / Math.Min(p0, 1 - p0));
return new PredictMarket { Id = id, Kind = kind, Key = key, Title = title, Param = param, OpenDay = openDay, FromDay = fromDay, ToDay = toDay, P0 = p0, B = b, QYes = b * Math.Log(p0 / (1 - p0)) };
double budget = LossFor(openDay), b = Tuning.PredictDepth * budget / Math.Log(2);
return new PredictMarket { Id = id, Kind = kind, Key = key, Title = title, Param = param, OpenDay = openDay, FromDay = fromDay, ToDay = toDay, P0 = p0, B = b, Budget = budget, QYes = b * Math.Log(p0 / (1 - p0)) };
}
/// <summary>LMSR 成本函数(数值稳定写法)。</summary>
@@ -153,7 +156,7 @@ namespace Decentralized.Domain
}
/// <summary>
/// 买入:花 spend(含 2% 手续费)的 CRC。污点与成本按花掉的价值比例随资金进持仓。insider:这笔单下单时玩家已经知道答案(传闻纸条、派系特权)。
/// 买入:花 spend(含手续费)的 CRC。污点与成本按花掉的价值比例随资金进持仓。insider:这笔单下单时玩家已经知道答案(传闻纸条、派系特权)。
/// </summary>
public PredictResult Buy(Wallet acct, PredictMarket m, bool yes, double spend, int day, Func<string, double> pr, bool insider, out double shares)
{
@@ -177,7 +180,7 @@ namespace Decentralized.Domain
return PredictResult.Ok;
}
/// <summary>全部卖出这个钱包在盘口里的持仓(盘口关闭前):收回 LMSR 的卖价减 2% 手续费,污点按比例退回,赚的部分是干净的。返回收回的 CRC。</summary>
/// <summary>全部卖出这个钱包在盘口里的持仓(盘口关闭前):收回 LMSR 的卖价减手续费,污点按比例退回,赚的部分是干净的。返回收回的 CRC。</summary>
public PredictResult SellAll(Wallet acct, PredictMarket m, int day, out double got) => SellAll(acct, m, day, null, out got, out _);
/// <summary>
@@ -291,7 +294,7 @@ namespace Decentralized.Domain
bool claim;
if (rng.Chance(Tuning.IntelFake)) claim = !truth;
else claim = rng.Chance(Tuning.IntelTipAcc[tier]) ? truth : !truth;
return new PredictTip { Market = m.Id, Tier = tier, Claim = claim, Paid = Tuning.IntelTipPrice[tier] * m.MaxLoss };
return new PredictTip { Market = m.Id, Tier = tier, Claim = claim, Paid = Tuning.IntelTipPrice[tier] * m.Loss };
}
/// <summary>
+32 -10
View File
@@ -6,7 +6,7 @@ namespace Decentralized.Domain
public static class Tuning
{
/// <summary>人脉网络升级价格:Web3 治理社区(入口)、混币器。</summary>
public const int UnlockPrice = 400, MixerUnlockPrice = 700;
public const int UnlockPrice = 400, MixerUnlockPrice = 300;
// 挖矿
public const double PscStartPrice = 100;
@@ -33,8 +33,12 @@ namespace Decentralized.Domain
public const double RefurbishHealth = 30;
// 市场
public const double PoolDepth0 = 50000;
public const double DexFee = 0.003, ExchangeFee = 0.002;
/// <summary>主交易对(PSC/CRC)信用点一侧的深度。按全网日产出(约 {BlockReward} PSC)的比例对照头部交易所:买 2 PSC 的价格冲击约 0.02%,卖两天的产出约 2%。</summary>
public const double PoolDepth0 = 600000;
/// <summary>DEX 手续费;Poinbase 现货与出金的手续费(对照头部交易所 taker 约 0.1%)。</summary>
public const double DexFee = 0.003, ExchangeFee = 0.001;
/// <summary>NPC 大户每笔成交额(信用点)的范围。</summary>
public const double WhaleMin = 24000, WhaleMax = 96000;
public const double Revert = 0.15;
public const double PscVol = 0.04;
public const double SentimentKappa = 0.02, SentimentVol = 0.02;
@@ -168,7 +172,7 @@ namespace Decentralized.Domain
/// <summary>出售量越大货款越容易带污点:近 7 天成交额达到参考量时,污点概率与比例各加最多 BmVolumeTaintMax。</summary>
public const double BmVolumeRef = 14000, BmVolumeTaintMax = 0.30;
/// <summary>黑市人脉升级的价格。</summary>
public const int BmUnlockPrice = 1500;
public const int BmUnlockPrice = 600;
/// <summary>单个金融违规事件记入的罪证上限。</summary>
public const double CrimeEventCap = 400;
@@ -197,13 +201,22 @@ namespace Decentralized.Domain
public const double TxPoisonChance = 0.35, TxHijackChance = 0.3, TxPhishChance = 0.05;
public const int TxPoisonDelayMax = 2;
/// <summary>永续合约:开平仓手续费、强平费、维持保证金比例;保险基金初值、每晚手续费补充、NPC 大行情穿仓的冲击系数与免冲击涨跌幅、手续费进基金的比例;
/// <summary>永续合约:开平仓手续费、强平费、维持保证金比例;保险基金初值(约 20 天的全网产出)、手续费进基金的比例;
/// 基金见底时盈利仓位自动减仓的盈利折扣;资金费系数与上下限(每晚);欠款日息、没收宽限天数、核销后拉黑天数;两个品种的最高杠杆与单仓名义价值上限。</summary>
public const double PerpFee = 0.001, PerpLiqFee = 0.02, PerpMaint = 0.10;
public const double PerpFund0 = 10000, PerpFundDrift = 150, PerpFundShock = 2000, PerpShockFree = 0.06, PerpFeeToFund = 0.3, PerpAdlHaircut = 0.5;
public const double PerpFund0 = 200000, PerpFeeToFund = 0.3, PerpAdlHaircut = 0.5;
/// <summary>NPC 永续仓位(每晚按标记价的涨跌结算,进出保险基金):亏损一侧的持仓占现货池深的倍数(SPARK 再乘 SparkDepthShare);
/// 涨跌幅达到 PerpNpcLiqScale 时亏损一侧全部爆仓,之前按比例爆仓;爆仓里穿仓的比例 = 基础 + 斜率 × (涨跌幅 − 免穿仓幅度),封顶;
/// 正常爆仓交给基金的剩余保证金(占名义价值);穿仓的缺口(占名义价值)= 涨跌幅 × 系数。</summary>
public const double PerpNpcOi = 1.0, PerpNpcLiqScale = 0.25, PerpNpcBankBase = 0.05, PerpNpcBankSlope = 1.5, PerpNpcBankFree = 0.12, PerpNpcBankMax = 0.95;
public const double PerpNpcLeft = 0.005, PerpNpcGap = 0.3;
/// <summary>爆仓新闻:标记价单日涨跌达到多少上报纸;NPC 平均每个仓位的名义价值(折算人数)。</summary>
public const double PerpNewsMove = 0.15, PerpNpcAvgPos = 1500;
public const double PerpFundCoef = 0.10, PerpFundCap = 0.003;
/// <summary>永续的成交深度占现货主池的比例:开平仓的平均滑点 = 名义价值 / (深度倍数 × 池深),和现货一样大单更贵。</summary>
public const double PerpDepthMult = 5.0;
/// <summary>永续成交深度的基数(与现货池深分开:永续的滑点压住均值回归策略,校准见 research/perpsim)。</summary>
public const double PerpDepth0 = 50000;
/// <summary>开仓时按现价算权益至少要高出强平线多少(占名义价值的比例),否则拒绝(滑点太大,开了就被强平)。</summary>
public const double PerpOpenBuffer = 0.02;
public const double PerpDebtInterest = 0.02;
@@ -223,13 +236,15 @@ namespace Decentralized.Domain
public const int EraMin = 50, EraMax = 90, EraWarnMin = 4, EraWarnMax = 7;
public const double EraKjMult = 0.5;
/// <summary>预测市场:游戏第几天起开放;手续费;每盘系统最大亏损 = 基础 + 每天增量 × 天数;单人单盘份额上限(最大亏损的倍数);
/// <summary>预测市场:游戏第几天起开放;手续费;单盘额度 = 基础 + 每天增量 × 天数;所有钱包在单盘合计的份额上限(额度的倍数);
/// 同时开放的盘口数量范围、每天最多新开几个;内幕持仓达到上限份额的多少比例后结算被查的概率,查实后收益记罪证的比例与上限;
/// 派系行动的日均开始概率(先验);先验概率的夹紧范围;结算记录保留条数。</summary>
public const int PredictUnlockDay = 8;
public const double PredictFee = 0.02, PredictLoss0 = 800, PredictLossPerDay = 25, PredictCap = 3;
public const double PredictFee = 0.01, PredictLoss0 = 800, PredictLossPerDay = 25, PredictCap = 2;
/// <summary>预测盘的流动性:LMSR 的 b = 倍数 × 单盘额度 / ln 2,与先验无关(低先验盘不再更浅)。单盘额度只决定份额上限和消息价。</summary>
public const double PredictDepth = 10;
public const int PredictOpenMin = 3, PredictOpenMax = 6, PredictNewPerDay = 2;
public const double PredictInsiderShare = 0.4, PredictInsiderCatch = 0.5, PredictFraudShare = 0.5, PredictFraudCap = 400;
public const double PredictInsiderShare = 0.4, PredictInsiderCatch = 0.7, PredictFraudShare = 0.5, PredictFraudCap = 400;
public const double PredictFactionDaily = 0.06, PredictPMin = 0.03, PredictPMax = 0.97;
public const int PredictHistory = 8;
/// <summary>gas 盘的公开价里"不知道相位"的权重:越大,数清七天周期的玩家越赚。金融审查(agy_fin/subsim)发现 0.5 时 gas 盘胜率 96%、每周净赚约 1,400,调到 0.15。</summary>
@@ -240,7 +255,7 @@ namespace Decentralized.Domain
public const double PredictMoveLog = 0.15;
/// <summary>情报贩子:局势简报价格(CRT)、三档内幕消息的价格(占盘口最大亏损的比例)与准确率、假情报概率(claim 与真相相反)、需要的黑市声望。</summary>
public const double IntelBriefPrice = 120, IntelFake = 0.10;
public static readonly double[] IntelTipPrice = { 0.01, 0.025, 0.05 }, IntelTipAcc = { 0.60, 0.80, 0.95 };
public static readonly double[] IntelTipPrice = { 0.03, 0.08, 0.20 }, IntelTipAcc = { 0.60, 0.80, 0.95 };
public const int IntelRep = 20;
/// <summary>操纵检出:玩家自己的大单把价格推离"没有你时的水平"的对数幅度(取绝对值)低于 ManipFree 不查;
/// 超过后被查概率 = ManipBase + ManipSlope × (幅度 − ManipFree),封顶 ManipMax;被查后永续账户冻结几天。</summary>
@@ -268,6 +283,10 @@ namespace Decentralized.Domain
public const double YieldPoolChance = 0.25, YieldRugNightly = 0.18, YieldCap0 = 4000, YieldCapPerDay = 120, YieldReserveDays = 25;
public static readonly double[] YieldRates = { 0.01, 0.02, 0.03 }, YieldScamByRate = { 0.15, 0.40, 0.75 };
public const double YieldScamTimelock = 0.25, YieldScamAudit = 0.20;
/// <summary>收黑币:相关事件期间每天有人上门的概率(PSC、CRT),Ponero 兑换处开放后每天的概率;币的市值(房租的倍数);
/// 现金要价占市值的比例(PSC、CRT 与 Ponero 分开);钓鱼执法的概率与镇压期间的加成。</summary>
public const double HotEventChance = 0.35, HotPoneroChance = 0.05, HotValueMinRents = 4, HotValueMaxRents = 15;
public const double HotCutMin = 0.45, HotCutMax = 0.60, HotPoneroCutMin = 0.70, HotPoneroCutMax = 0.80, HotSting = 0.05, HotStingCrackdown = 0.10;
/// <summary>假客服:每天上门的概率;伪造转账:用币付款的顾客里是骗子的比例;两者都从第几天起。</summary>
public const double FakeSupportChance = 0.04, FakeTransferShare = 0.08;
public const int ScamMinDay = 10;
@@ -298,5 +317,8 @@ namespace Decentralized.Domain
/// <summary>主交易对(信用点一侧)的深度随天数增长。</summary>
public static double PoolDepth(int day) => PoolDepth0 * (1 + day / 60.0);
/// <summary>永续的成交深度,同样随天数增长。</summary>
public static double PerpDepth(int day) => PerpDepth0 * (1 + day / 60.0);
}
}
+24 -3
View File
@@ -247,6 +247,16 @@ namespace Decentralized.Domain
["HalvingPassMin"] = Tuning.HalvingPassMin,
["HalvingRamp"] = Tuning.HalvingRamp,
["HalvingRampDays"] = Tuning.HalvingRampDays,
["HotCutMax"] = Tuning.HotCutMax,
["HotCutMin"] = Tuning.HotCutMin,
["HotEventChance"] = Tuning.HotEventChance,
["HotPoneroChance"] = Tuning.HotPoneroChance,
["HotPoneroCutMax"] = Tuning.HotPoneroCutMax,
["HotPoneroCutMin"] = Tuning.HotPoneroCutMin,
["HotSting"] = Tuning.HotSting,
["HotStingCrackdown"] = Tuning.HotStingCrackdown,
["HotValueMaxRents"] = Tuning.HotValueMaxRents,
["HotValueMinRents"] = Tuning.HotValueMinRents,
["IntelBriefPrice"] = Tuning.IntelBriefPrice,
["IntelFake"] = Tuning.IntelFake,
["IntelRep"] = Tuning.IntelRep,
@@ -278,20 +288,28 @@ namespace Decentralized.Domain
["PerpBanDays"] = Tuning.PerpBanDays,
["PerpDebtDays"] = Tuning.PerpDebtDays,
["PerpDebtInterest"] = Tuning.PerpDebtInterest,
["PerpDepth0"] = Tuning.PerpDepth0,
["PerpDepthMult"] = Tuning.PerpDepthMult,
["PerpFee"] = Tuning.PerpFee,
["PerpFeeToFund"] = Tuning.PerpFeeToFund,
["PerpFund0"] = Tuning.PerpFund0,
["PerpFundCap"] = Tuning.PerpFundCap,
["PerpFundCoef"] = Tuning.PerpFundCoef,
["PerpFundDrift"] = Tuning.PerpFundDrift,
["PerpFundShock"] = Tuning.PerpFundShock,
["PerpLiqFee"] = Tuning.PerpLiqFee,
["PerpMaint"] = Tuning.PerpMaint,
["PerpNewsMove"] = Tuning.PerpNewsMove,
["PerpNpcAvgPos"] = Tuning.PerpNpcAvgPos,
["PerpNpcBankBase"] = Tuning.PerpNpcBankBase,
["PerpNpcBankFree"] = Tuning.PerpNpcBankFree,
["PerpNpcBankMax"] = Tuning.PerpNpcBankMax,
["PerpNpcBankSlope"] = Tuning.PerpNpcBankSlope,
["PerpNpcGap"] = Tuning.PerpNpcGap,
["PerpNpcLeft"] = Tuning.PerpNpcLeft,
["PerpNpcLiqScale"] = Tuning.PerpNpcLiqScale,
["PerpNpcOi"] = Tuning.PerpNpcOi,
["PerpOpenBuffer"] = Tuning.PerpOpenBuffer,
["PerpPscCap"] = Tuning.PerpPscCap,
["PerpPscLev"] = Tuning.PerpPscLev,
["PerpShockFree"] = Tuning.PerpShockFree,
["PerpSparkCap"] = Tuning.PerpSparkCap,
["PerpSparkLev"] = Tuning.PerpSparkLev,
["PoneroDailyCap"] = Tuning.PoneroDailyCap,
@@ -313,6 +331,7 @@ namespace Decentralized.Domain
["PoolDepth0"] = Tuning.PoolDepth0,
["PoolFee"] = Tuning.PoolFee,
["PredictCap"] = Tuning.PredictCap,
["PredictDepth"] = Tuning.PredictDepth,
["PredictDrift"] = Tuning.PredictDrift,
["PredictFactionDaily"] = Tuning.PredictFactionDaily,
["PredictFee"] = Tuning.PredictFee,
@@ -429,6 +448,8 @@ namespace Decentralized.Domain
["WalletMallQtyMax"] = Tuning.WalletMallQtyMax,
["WalletMax"] = Tuning.WalletMax,
["WalletPoisonShare"] = Tuning.WalletPoisonShare,
["WhaleMax"] = Tuning.WhaleMax,
["WhaleMin"] = Tuning.WhaleMin,
["WickChance"] = Tuning.WickChance,
["WickMax"] = Tuning.WickMax,
["WickMin"] = Tuning.WickMin,
+106
View File
@@ -0,0 +1,106 @@
using System;
using Decentralized.Domain;
namespace Decentralized
{
/// <summary>
/// 收黑币的上门顾客(游戏的对话顾客):游戏里出了事,有人拿着来路不明的币折价换现金,见 <see cref="HotCoins"/>。
/// 一天最多一位。收下:付现金,币进已连接的钱包(PSC、CRT 全额带污点);钓鱼执法:现金被没收并记销赃罪证,币不会到。
/// </summary>
public static class HotCoinSeller
{
private static int seenDay = -1;
public static void Subscribe()
{
ModHook.OnGenerateCustomerLate += OnGenerate;
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Hot coin seller (test)", () => Log.Guard("收黑币(测试)", () =>
{
var d = Session.Data;
string[] assets = { Assets.CRT, Assets.PSC, Assets.Ponero };
var c = Create(assets[d.Rng.Range(0, assets.Length - 1)]);
if (c == null) return;
PlayerStore.Instance.currentClientInstance = null;
PlayerStore.Instance.storeClientManager.clientStack.Insert(0, c);
PlayerStore.Instance.TryCallNextClient();
}));
}
public static void Unsubscribe() => ModHook.OnGenerateCustomerLate -= OnGenerate;
private static void OnGenerate(StoreClientManager manager)
{
var d = Session.Data;
if (d == null || !Unlock.IsUnlocked || !d.Connected) return;
Log.Guard("收黑币", () =>
{
int day = StoreStation.GetDayCounter();
if (day == seenDay) return;
seenDay = day;
bool ponero = Unlock.BlackUnlocked && BlackMarket.DeskOpen(StoreReputation.GetBMReputation());
string asset = HotCoins.Pick(Night.ActiveEvents(), ponero, d.Rng);
if (asset == null) return;
var c = Create(asset);
if (c != null) manager.AddClient(c);
});
}
private static StoreClient Create(string asset)
{
var d = Session.Data;
bool crackdown = Night.ActiveEvents().Contains(MarketEvent.Crackdown);
var o = HotCoins.Make(asset, Session.Price(asset), Session.Rent(), crackdown, d.Rng);
if (o == null) return null;
var c = new StoreClient
{
identifier = "pd_hot_coins", displayName = L.T("hot.name"),
spriteName = asset == Assets.CRT ? SpriteDict.GetRandomBMMaleSpriteName() : asset == Assets.PSC ? SpriteDict.GetRandomRevSpriteName() : SpriteDict.GetRandomShadySpriteName(),
clientIntent = StoreClient.ClientIntent.DIALOGUE,
};
// 选项的动作先于下一句执行:在动作里结算,再把卖家的回话换成结果
var yes = new Dialogue();
var reply = yes.SetText("PLAYER", L.T("hot.say.yes")).NextDialogue();
reply.SetText(c.displayName, L.T("hot.refused")).SetEndAction(Leave);
var no = new Dialogue();
no.SetText("PLAYER", L.T("hot.say.no")).NextDialogue().SetText(c.displayName, L.T("hot.refused")).SetEndAction(Leave);
c.mainDialogue.SetText(c.displayName, L.T("hot.intro." + asset)).NextDialogue()
.SetText(c.displayName, L.T("hot.offer", Fmt.Num(o.Qty), asset, Fmt.Credits(o.Value), Fmt.Credits(o.Cash)))
.AddChoice(DirectoryMaster.Item("yes"), L.T("hot.choice.yes"), "", yes, () => reply.SetText(c.displayName, L.T(Accept(o))))
.AddChoice(DirectoryMaster.Item("cancel"), L.T("hot.choice.no"), "", no, null);
ModHelper.SetClientSource(c, ModInfo.Id);
c.AddBasicDialog();
c.CompleteClientCreation();
Log.Info($"收黑币上门:{o.Qty:0.##} {asset},市值 {o.Value:0},要价 {o.Cash}{(o.Sting ? "(钓鱼执法)" : "")}");
return c;
}
/// <summary>选了收下:现金不够或没连钱包就作罢;钓鱼执法没收现金、记罪证;否则付现金、币进钱包。返回卖家回话的键。</summary>
private static string Accept(HotOffer o)
{
string line = "hot.refused";
Log.Guard("收黑币成交", () =>
{
var d = Session.Data;
if (!d.Connected) { line = "hot.nowallet"; return; }
if (PlayerStore.Instance.playerCash < o.Cash) { line = "hot.nocash"; return; }
ModHelper.AddCredit(-o.Cash, false);
if (o.Sting)
{
PlayerStore.Instance.secData.CommitCrime("FENCING", (int)Math.Min(Tuning.CrimeEventCap, o.Cash));
line = "hot.sting";
Log.Info($"收黑币:钓鱼执法,现金 {o.Cash} 没收,记销赃罪证");
}
else
{
HotCoins.Receive(d.Hot, o);
line = "hot.done";
Log.Info($"收黑币:{o.Qty:0.##} {o.Asset} 进 {WalletWindow.NameOf(d.Hot)},付现金 {o.Cash},钱包污点 {d.Hot.Taint:0}");
}
Session.Save();
});
return line;
}
private static void Leave() => DialogUIManager.Instance.CurrentClientLeave();
}
}
+2
View File
@@ -22,6 +22,7 @@ namespace Decentralized
DealerStock.Subscribe();
UsedDealerClient.Subscribe();
CoinCustomers.Subscribe();
HotCoinSeller.Subscribe();
BlackDelivery.Subscribe();
TumblerStory.Subscribe();
GpuInspectView.Ensure();
@@ -37,6 +38,7 @@ namespace Decentralized
DealerStock.Unsubscribe();
UsedDealerClient.Unsubscribe();
CoinCustomers.Unsubscribe();
HotCoinSeller.Unsubscribe();
BlackDelivery.Unsubscribe();
TumblerStory.Unsubscribe();
GpuInspectView.Remove();
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Schmuggelware (hoch)
black.kind.Tech,Hightech (Aufpreis)
nightlog.bm.ready,"Schwarzmarkt: {0} eingetroffen; sobald du öffnest, kommt ein Kurier vorbei."
guide.web3.title,Web3-Handbuch
guide.web3.text,"Bank und Handel: Die Bankseite ist nur lesbar und zeigt Bargeld, Miete und das CRC auf dem Poinbase-Konto. Die Seite „Guthaben“ von Poinbase regelt Ein- und Auszahlungen; zuerst wird der Coin gewählt: CRC geht über das Bankkonto oder die Wallet, alle anderen Coins nur über die Wallet. Eine Einzahlung von der Bank wandelt Credits in CRC auf deinem Poinbase-Konto um; eine Auszahlung auf die Bank wandelt CRC zurück in Credits um und durchläuft eine Compliance-Prüfung, die die Kontamination des Poinbase-Kontos bewertet. Eine Auszahlung auf eine Wallet braucht die Zieladresse und mehrere Bestätigungen bis zur Gutschrift; die Gasgebühr ist fest auf Normal gesetzt und wird vom abgehenden Coin abgezogen. Ist das Adressformat oder die Prüfziffer falsch, wird abgelehnt; bei einer formal gültigen Adresse, die niemand nutzt, sind die Coins nach der Überweisung weg.¶Handel: PSC steht für Probably Stolen Coin, den durch Grafikkarten und Miner geschürften Coin. Käufe werden im Notierungs-Coin bezahlt, Verkäufe im gehandelten Coin.¶Auf der Web3-Handelsseite lassen sich beliebige zwei Coins tauschen, stets über CRC als Zwischenschritt: Ist CRC eine Seite, läuft der Tausch über einen Pool, sonst über zwei Pools mit zwei Gebühren und sich addierender Slippage; die Vorschau zeigt Menge, Anzahl der Pools und Verlust.§Hardware-Wallets: On-Chain-Coins liegen auf PLEDGER-Hardware-Wallets, jede mit eigenem Guthaben und eigener Kontamination. Eine Wallet ist ein Gegenstand: Ziehe sie auf das Handelsterminal, um sie zu laden. Öffne sie auf der Wallets-Seite des Terminals; verbinde und trenne sie oben rechts im Terminal. Der Handel der Web3-Seite sowie Shop und Mixer der Graunetz-Seite nutzen die verbundene Wallet; ohne Wallet oder ohne Verbindung sind sie nur lesbar und alle Guthaben zeigen 0. Kunden, die in Coins zahlen, zahlen auf die verbundene Wallet.¶Zahlungen (Shop, Mixer, Ponero-Schalter, Einstellgebühren) beginnen als Rechnung auf dem Handelsterminal; gib die Empfängeradresse auf der Wallet ein und halte zum Signieren ✓ gedrückt. Die letzten beiden Zeichen einer Adresse bilden eine Prüfsumme, sodass ein einzelner Tippfehler meist abgefangen wird; gelegentlich ist die Eingabe dennoch gültig und die Coins gehen an eine ungenutzte Adresse. Auch DEX-Swaps erfordern eine Signatur auf der Wallet.¶Poinbase ist ein Verwahrkonto; Einzahlungen erfolgen von der Wallet an die Einzahlungsadresse von Poinbase (PSC, CRC, CRT, CRA und SPARK werden angenommen), Auszahlungen werden auf der Seite „Guthaben“ von Poinbase gestartet. Der Explorer auf der Wallets-Seite zeigt Überweisungen nach Adresse, ausschließlich tatsächlich erfolgte (deine Wallets, Auszahlungen, Miner-Erträge). Weitere Hardware-Wallets verkauft Dr. Jackson; ziehe eine auf das Handelsterminal, um sie hinzuzufügen, bis zu {WalletMax}. Im Shop gibt es günstigere Exemplare. Eine nicht mehr benötigte Wallet kann auf der Wallets-Seite zerstört werden; ihre Coins sind dauerhaft verloren, ebenso alles, was danach an ihre Adresse gesendet wird.¶Überweisungen kosten Gasgebühren: langsam, normal oder schnell, und die Gas-Preise steigen und fallen im Wochenverlauf; bei Netzwerküberlastung steigen die Gasgebühren und langsame Transaktionen können aus dem Mempool fliegen. Vor dem Senden die vollständige Adresse prüfen.§Staking: Im Revolution-Pool gestakte CRA erzielen einen Tageszinssatz, der dem Einsatz zugeschlagen wird; eine Auszahlung erfordert einen vorherigen Antrag und vier Tage Wartezeit – ohne Zinsen während des Wartens und ohne vorzeitige Entnahme. CRA ist teilbesichert: Jedes CRA wird von CRC-Reserven der Revolution und vom Ausgleichstoken SPARK gedeckt; Reservedeckung und Besicherungsquote stehen auf der Staking-Seite. Zinsen werden in neuem, unbesichertem CRA gezahlt, das die Reservedeckung verwässert, umso schneller, je mehr gestakt ist; bei zu niedriger Deckung senkt die Revolution den Zinssatz. Die Revolution greift manchmal in die Reserve; zuvor gibt es Gerüchte, das ist das Vorzeichen. Fällt die Deckung danach unter {CraCrashRatio:%}, bricht das System zusammen: CRA ist binnen drei Tagen wertlos und vier Tage Entsperrung sind zu langsam; darüber gibt es nur einen Abschlag, und Mittel aus Raubzügen gegen die Oberschicht füllen die Reserve allmählich wieder auf.¶Offizielles Prägen: CRC und SPARK einzahlen (Verhältnis nach aktueller Besicherungsquote, die Vorschau zeigt den Bedarf), um CRA zu prägen; Wartezeit {CraMintDaysMin}–{CraMintDaysMax} Tage, das geprägte CRA wandert direkt ins Staking. Verbrennen tauscht CRA zurück in CRC und SPARK, mit gleich langer Wartezeit wie die Entsperrung; reicht die Reserve nicht, wird der CRC-Anteil nach Deckung gekürzt. Wartende Präge- und Verbrennungsaufträge kann die Revolution komplett verweigern: Die nächtliche Wahrscheinlichkeit ist der Betrag, um den der CRA-Preis unter 1 liegt, mal {CraRugPerDepeg}; liegt der Preis nicht unter 1, passierLine truncated
guide.web3.text,"Bank und Handel: Die Bankseite ist nur lesbar und zeigt Bargeld, Miete und das CRC auf dem Poinbase-Konto. Die Seite „Guthaben“ von Poinbase regelt Ein- und Auszahlungen; zuerst wird der Coin gewählt: CRC geht über das Bankkonto oder die Wallet, alle anderen Coins nur über die Wallet. Eine Einzahlung von der Bank wandelt Credits in CRC auf deinem Poinbase-Konto um; eine Auszahlung auf die Bank wandelt CRC zurück in Credits um und durchläuft eine Compliance-Prüfung, die die Kontamination des Poinbase-Kontos bewertet. Eine Auszahlung auf eine Wallet braucht die Zieladresse und mehrere Bestätigungen bis zur Gutschrift; die Gasgebühr ist fest auf Normal gesetzt und wird vom abgehenden Coin abgezogen. Ist das Adressformat oder die Prüfziffer falsch, wird abgelehnt; bei einer formal gültigen Adresse, die niemand nutzt, sind die Coins nach der Überweisung weg.¶Handel: PSC steht für Probably Stolen Coin, den durch Grafikkarten und Miner geschürften Coin. Käufe und Verkäufe werden beide als Menge des gehandelten Coins eingegeben; die Vorschau zeigt den gezahlten oder erhaltenen Notierungs-Coin, der Durchschnittspreis enthält die Gebühr, die Slippage nicht.¶Auf der Web3-Handelsseite lassen sich beliebige zwei Coins tauschen, stets über CRC als Zwischenschritt: Ist CRC eine Seite, läuft der Tausch über einen Pool, sonst über zwei Pools mit zwei Gebühren und sich addierender Slippage; die Vorschau zeigt Menge, Anzahl der Pools und Verlust.§Hardware-Wallets: On-Chain-Coins liegen auf PLEDGER-Hardware-Wallets, jede mit eigenem Guthaben und eigener Kontamination. Eine Wallet ist ein Gegenstand: Ziehe sie auf das Handelsterminal, um sie zu laden. Öffne sie auf der Wallets-Seite des Terminals; verbinde und trenne sie oben rechts im Terminal. Der Handel der Web3-Seite sowie Shop und Mixer der Graunetz-Seite nutzen die verbundene Wallet; ohne Wallet oder ohne Verbindung sind sie nur lesbar und alle Guthaben zeigen 0. Kunden, die in Coins zahlen, zahlen auf die verbundene Wallet.¶Zahlungen (Shop, Mixer, Ponero-Schalter, Einstellgebühren) beginnen als Rechnung auf dem Handelsterminal; gib die Empfängeradresse auf der Wallet ein und halte zum Signieren ✓ gedrückt. Die letzten beiden Zeichen einer Adresse bilden eine Prüfsumme, sodass ein einzelner Tippfehler meist abgefangen wird; gelegentlich ist die Eingabe dennoch gültig und die Coins gehen an eine ungenutzte Adresse. Auch DEX-Swaps erfordern eine Signatur auf der Wallet.¶Poinbase ist ein Verwahrkonto; Einzahlungen erfolgen von der Wallet an die Einzahlungsadresse von Poinbase (PSC, CRC, CRT, CRA und SPARK werden angenommen), Auszahlungen werden auf der Seite „Guthaben“ von Poinbase gestartet. Der Explorer auf der Wallets-Seite zeigt Überweisungen nach Adresse, ausschließlich tatsächlich erfolgte (deine Wallets, Auszahlungen, Miner-Erträge). Weitere Hardware-Wallets verkauft Dr. Jackson; ziehe eine auf das Handelsterminal, um sie hinzuzufügen, bis zu {WalletMax}. Im Shop gibt es günstigere Exemplare. Eine nicht mehr benötigte Wallet kann auf der Wallets-Seite zerstört werden; ihre Coins sind dauerhaft verloren, ebenso alles, was danach an ihre Adresse gesendet wird.¶Überweisungen kosten Gasgebühren: langsam, normal oder schnell, und die Gas-Preise steigen und fallen im Wochenverlauf; bei Netzwerküberlastung steigen die Gasgebühren und langsame Transaktionen können aus dem Mempool fliegen. Vor dem Senden die vollständige Adresse prüfen.§Staking: Im Revolution-Pool gestakte CRA erzielen einen Tageszinssatz, der dem Einsatz zugeschlagen wird; eine Auszahlung erfordert einen vorherigen Antrag und vier Tage Wartezeit – ohne Zinsen während des Wartens und ohne vorzeitige Entnahme. CRA ist teilbesichert: Jedes CRA wird von CRC-Reserven der Revolution und vom Ausgleichstoken SPARK gedeckt; Reservedeckung und Besicherungsquote stehen auf der Staking-Seite. Zinsen werden in neuem, unbesichertem CRA gezahlt, das die Reservedeckung verwässert, umso schneller, je mehr gestakt ist; bei zu niedriger Deckung senkt die Revolution den Zinssatz. Die Revolution greift manchmal in die Reserve; zuvor gibt es Gerüchte, das ist das Vorzeichen. Fällt die Deckung danach unter {CraCrashRatio:%}, bricht das System zusammen: CRA ist binnen drei Tagen wertlos und vier Tage Entsperrung sind zu langsam; darüber gibt es nur einen Abschlag, und Mittel aus Raubzügen gegen die Oberschicht füllen die Reserve allmählich wieder auf.¶Offizielles Prägen: CRC und SPARK einzahlen (Verhältnis nach aktueller Besicherungsquote, die Vorschau zeigt den Bedarf), um CRA zu prägen; Wartezeit {CraMintDaysMin}–{CraMintDaysMax} Tage, das geprägte CRA wandert direkt ins Staking. Verbrennen tauscht CRA zurück in CRC und SPARK, mit gleich langer Wartezeit wie die Entsperrung; reicht die Reserve nicht, wird der CRC-Anteil nach Deckung gekürzt. Wartende Präge- und Verbrennungsaufträge kann die Revolution komplett verweigern: Die nächtlLine truncated
courier.odd1,...Paket ist da.
courier.odd2,(Seine Hand bleibt in der Tasche.) Hier unterschreiben.
courier.sign,Unterschreiben
@@ -954,5 +954,26 @@ asic.st.dead,Durchgebrannt
perp.preview,Nominalwert {0} gesch. Ø-Preis {1} (Slippage {2}%)
perp.sim.close,Schließen Nominalwert {0} gesch. Ø-Preis {1} (Slippage {2}%)
perp.sim.close2,Gebühr {0} ca. {1} CRC zurück (G/V {2})
trade.sim.buy,Kauf ergibt ca. {0} {1} Ø {2} Slippage {3}%
trade.sim.sell,Verkauf ergibt ca. {0} {1} Ø {2} Slippage {3}%
trade.sim.buy,Kauf kostet ca. {0} {1} Ø {2} Slippage {3}%
trade.amount.unit,Menge ({0})
trade.fee,Gebühr {0}%
trade.sim.thin,Übersteigt die Pool-Liquidität
news.wipe.down.title,"{0} fällt an einem Tag um {1}%, {2} Trader liquidiert"
news.wipe.down.desc,"Am vergangenen Tag wurden {1} Long-Positionen auf {0}-Perps liquidiert, insgesamt {2} Credits. Der Versicherungsfonds von Poinbase steht bei {3} Credits."
news.wipe.up.title,"{0} steigt an einem Tag um {1}%, {2} Trader liquidiert"
news.wipe.up.desc,"Am vergangenen Tag wurden {1} Short-Positionen auf {0}-Perps liquidiert, insgesamt {2} Credits. Der Versicherungsfonds von Poinbase steht bei {3} Credits."
hot.name,Verkäufer
hot.intro.CRT,"Gerade ist die Lage angespannt, und dieses CRT ist mir zu heiß. Ich brauche schnell Bargeld."
hot.intro.PSC,"Die Wallet einer Mining-Farm hat letzte Nacht den Besitzer gewechselt. Das PSC liegt jetzt bei mir, und ich nehme nur Bargeld."
hot.intro.PONERO,"Lösegeld, in Ponero. Niemand kann es zurückverfolgen. Nur Bargeld."
hot.offer,"{0} {1}, zum heutigen Kurs {2} wert. Gib mir {3} in bar, und die Coins gehören sofort dir."
hot.choice.yes,Annehmen
hot.choice.no,Ablehnen
hot.say.yes,Abgemacht.
hot.say.no,Davon lasse ich die Finger.
hot.done,Coins sind raus. Wir haben uns nie gesehen.
hot.refused,Andere nehmen es gern.
hot.nocash,Du hast nicht mal das Bargeld? Vergiss es.
hot.nowallet,"Keine Wallet verbunden, wohin sollen die Coins? Vergiss es."
hot.sting,"Keine Bewegung. Security. Ankauf gestohlener Gelder: Das Bargeld wird beschlagnahmt, und das kommt in deine Akte."
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Contraband (high)
black.kind.Tech,High-tech (markup)
nightlog.bm.ready,Black market: {0} arrived; a courier will come by once you open.
guide.web3.title,Web3 Handbook
guide.web3.text,"Bank and trading: the Bank page is read-only and shows cash, rent and the CRC in your Poinbase account. Poinbase's Funds page handles deposits and withdrawals; pick the coin first: CRC can go through the bank account or a wallet, every other coin only through a wallet. Depositing from the bank turns credits into CRC in your Poinbase account; withdrawing to the bank turns CRC back into credits and goes through compliance screening, which looks at the Poinbase account's taint. Withdrawing to a wallet needs a payee address and a few confirmations before it arrives; the gas fee is fixed at the normal tier and taken from the coin sent. A wrong address format or checksum is rejected; a correctly formatted address nobody uses means the coins are gone.¶Trading: PSC stands for Probably Stolen Coin, the coin mined by GPUs and miners. Buys are paid in the quote coin, sells in the traded coin.¶The Web3 trade page can swap any two coins, always through CRC: with CRC on one side it uses one pool, otherwise two pools, with two fees and stacked slippage; the preview shows the amount received, the pools crossed and the loss.§Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and taint. A wallet is an item: drag it onto the trading terminal to load it. Open it on the terminal's Wallets page; connect and disconnect at the top right of the terminal. Trading on the Web3 page and the shop and mixer on the Gray Net page use the connected wallet; with no wallet or no connection they are view-only and every balance reads 0. Coin-paying customers pay into the connected wallet.¶Payments (shop, mixer, Ponero desk, listing fees) start as an invoice on the terminal; type the payee address on the wallet and hold ✓ to sign. The last two characters of an address are a checksum, so a one-character typo is usually caught; once in a while it happens to be valid and the coins go to an address nobody uses. DEX swaps also need a signature on the wallet.¶Poinbase is a custodial account; deposits are sent from a wallet to Poinbase's deposit address (PSC, CRC, CRT, CRA and SPARK are all accepted) and withdrawals are started on Poinbase's Funds page. The Explorer on the Wallets page looks up transfers by address and shows only transfers that really happened (your wallets, withdrawals, miner payouts). More hardware wallets are sold by Dr. Jackson; drag one onto the trading terminal to add it, up to {WalletMax}. The shop has cheaper ones. A wallet you no longer want can be destroyed on the Wallets page; its coins are lost for good, and anything sent to its address afterwards is lost too.¶Transfers pay a gas fee: slow, normal or fast, and gas prices rise and fall over roughly a week; when the network is congested gas fees rise and slow transactions may be dropped from the mempool. Check the full address before sending.§Staking: CRA staked in the Revolution pool earns a daily rate that compounds into the stake; withdrawing means requesting first and waiting four days, with no interest while waiting and no way to take it early. CRA is partly collateralized: each CRA is backed by the CRC reserve the Revolution holds and by the balance token SPARK; reserve coverage and the collateral ratio are shown on the staking page. Interest is paid in new uncollateralized CRA, which dilutes reserve coverage, faster the more is staked; when coverage is too low the Revolution cuts the rate. The Revolution sometimes diverts the reserve, preceded by rumors: that is the warning. If coverage then falls below {CraCrashRatio:%} it collapses: CRA is worthless within three days and four days of unlocking is too slow; above that there is only a discount, and money from raiding the upper class slowly refills the reserve.¶Official minting: deposit CRC and SPARK (ratio per the current collateral ratio; the preview shows what is needed) to mint CRA, queued {CraMintDaysMin}-{CraMintDaysMax} days; the minted CRA goes straight into staking. Burning turns CRA back into CRC and SPARK, waiting as long as the unlock period; when the reserve is short the CRC share is cut by coverage. Queued mints and burns may be dishonored in full by the Revolution: the nightly chance is how far the CRA price is below 1 times {CraRugPerDepeg}; if the price is not below 1 it cannot happen.¶Staking accepts CRA, CRC, CRT and SPARK: the last three are first swapped into CRA on the secondary market at the going price (through CRC, with fees and slippage). SPARK's price swings hard and crashes with the collapse. Staking, minting and burning are contract calls and need a signature on the wallet.§Miners: RatDigg miners (M1 / M2 / M3) are standalone machines with far more hash than a card and a lower power draw per hash; they need a battery, take modules and use no rig slots. Only the shop's miner dealers sell them, gated by black-market standing (M1 {AsicRepM1}, M2 {AsicRepM2}, M3 {AsicRepM3}), sometimes second-hand. When one burns out, repairLine truncated
guide.web3.text,"Bank and trading: the Bank page is read-only and shows cash, rent and the CRC in your Poinbase account. Poinbase's Funds page handles deposits and withdrawals; pick the coin first: CRC can go through the bank account or a wallet, every other coin only through a wallet. Depositing from the bank turns credits into CRC in your Poinbase account; withdrawing to the bank turns CRC back into credits and goes through compliance screening, which looks at the Poinbase account's taint. Withdrawing to a wallet needs a payee address and a few confirmations before it arrives; the gas fee is fixed at the normal tier and taken from the coin sent. A wrong address format or checksum is rejected; a correctly formatted address nobody uses means the coins are gone.¶Trading: PSC stands for Probably Stolen Coin, the coin mined by GPUs and miners. Buys and sells are both entered as an amount of the traded coin; the preview shows the quote coin paid or received, the average price includes the fee and the slippage does not.¶The Web3 trade page can swap any two coins, always through CRC: with CRC on one side it uses one pool, otherwise two pools, with two fees and stacked slippage; the preview shows the amount received, the pools crossed and the loss.§Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and taint. A wallet is an item: drag it onto the trading terminal to load it. Open it on the terminal's Wallets page; connect and disconnect at the top right of the terminal. Trading on the Web3 page and the shop and mixer on the Gray Net page use the connected wallet; with no wallet or no connection they are view-only and every balance reads 0. Coin-paying customers pay into the connected wallet.¶Payments (shop, mixer, Ponero desk, listing fees) start as an invoice on the terminal; type the payee address on the wallet and hold ✓ to sign. The last two characters of an address are a checksum, so a one-character typo is usually caught; once in a while it happens to be valid and the coins go to an address nobody uses. DEX swaps also need a signature on the wallet.¶Poinbase is a custodial account; deposits are sent from a wallet to Poinbase's deposit address (PSC, CRC, CRT, CRA and SPARK are all accepted) and withdrawals are started on Poinbase's Funds page. The Explorer on the Wallets page looks up transfers by address and shows only transfers that really happened (your wallets, withdrawals, miner payouts). More hardware wallets are sold by Dr. Jackson; drag one onto the trading terminal to add it, up to {WalletMax}. The shop has cheaper ones. A wallet you no longer want can be destroyed on the Wallets page; its coins are lost for good, and anything sent to its address afterwards is lost too.¶Transfers pay a gas fee: slow, normal or fast, and gas prices rise and fall over roughly a week; when the network is congested gas fees rise and slow transactions may be dropped from the mempool. Check the full address before sending.§Staking: CRA staked in the Revolution pool earns a daily rate that compounds into the stake; withdrawing means requesting first and waiting four days, with no interest while waiting and no way to take it early. CRA is partly collateralized: each CRA is backed by the CRC reserve the Revolution holds and by the balance token SPARK; reserve coverage and the collateral ratio are shown on the staking page. Interest is paid in new uncollateralized CRA, which dilutes reserve coverage, faster the more is staked; when coverage is too low the Revolution cuts the rate. The Revolution sometimes diverts the reserve, preceded by rumors: that is the warning. If coverage then falls below {CraCrashRatio:%} it collapses: CRA is worthless within three days and four days of unlocking is too slow; above that there is only a discount, and money from raiding the upper class slowly refills the reserve.¶Official minting: deposit CRC and SPARK (ratio per the current collateral ratio; the preview shows what is needed) to mint CRA, queued {CraMintDaysMin}-{CraMintDaysMax} days; the minted CRA goes straight into staking. Burning turns CRA back into CRC and SPARK, waiting as long as the unlock period; when the reserve is short the CRC share is cut by coverage. Queued mints and burns may be dishonored in full by the Revolution: the nightly chance is how far the CRA price is below 1 times {CraRugPerDepeg}; if the price is not below 1 it cannot happen.¶Staking accepts CRA, CRC, CRT and SPARK: the last three are first swapped into CRA on the secondary market at the going price (through CRC, with fees and slippage). SPARK's price swings hard and crashes with the collapse. Staking, minting and burning are contract calls and need a signature on the wallet.§Miners: RatDigg miners (M1 / M2 / M3) are standalone machines with far more hash than a card and a lower power draw per hash; they need a battery, take modules and use no rig slots. Only the shop's miner dealers sell them, gated by blLine truncated
courier.odd1,...Package is here.
courier.odd2,(His hand stays in his pocket.) Sign here.
courier.sign,Sign
@@ -954,5 +954,26 @@ asic.st.dead,Burnt out
perp.preview,Notional {0} est. avg price {1} (slippage {2}%)
perp.sim.close,Close notional {0} est. avg price {1} (slippage {2}%)
perp.sim.close2,Fee {0} about {1} CRC back (P/L {2})
trade.sim.buy,Buy gets about {0} {1} avg {2} slippage {3}%
trade.sim.sell,Sell gets about {0} {1} avg {2} slippage {3}%
trade.sim.buy,Buy costs about {0} {1} avg {2} slippage {3}%
trade.amount.unit,Amount ({0})
trade.fee,Fee {0}%
trade.sim.thin,Exceeds pool liquidity
news.wipe.down.title,"{0} falls {1}% in a day, {2} traders liquidated"
news.wipe.down.desc,"Over the past day {1} long positions on {0} perps were liquidated, {2} credits in total. The Poinbase insurance fund stands at {3} credits."
news.wipe.up.title,"{0} jumps {1}% in a day, {2} traders liquidated"
news.wipe.up.desc,"Over the past day {1} short positions on {0} perps were liquidated, {2} credits in total. The Poinbase insurance fund stands at {3} credits."
hot.name,Seller
hot.intro.CRT,"Things are tense lately and this CRT is too hot to hold. I need cash, fast."
hot.intro.PSC,"A mining farm's wallet changed hands last night. The PSC is with me now, and I only take cash."
hot.intro.PONERO,"Ransom money, in Ponero. Nobody can trace it. Cash only."
hot.offer,"{0} {1}, worth {2} at today's price. Give me {3} in cash and the coins are yours right now."
hot.choice.yes,Take it
hot.choice.no,Pass
hot.say.yes,Deal.
hot.say.no,I'm not touching that.
hot.done,Coins sent. We never met.
hot.refused,Plenty of others will take it.
hot.nocash,You can't even put up the cash? Forget it.
hot.nowallet,"No wallet connected, so where would the coins go? Forget it."
hot.sting,Don't move. Security. Buying stolen funds: the cash is confiscated and this goes on your record.
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Contrabando (alto)
black.kind.Tech,Alta tecnología (con sobreprecio)
nightlog.bm.ready,Mercado negro: {0} ha llegado; un mensajero pasará en cuanto abras.
guide.web3.title,Manual de Web3
guide.web3.text,"Banco y comercio: la página del banco es de solo lectura y muestra efectivo, alquiler y el CRC de la cuenta de Poinbase. La página Fondos de Poinbase gestiona depósitos y retiros; primero se elige la moneda: el CRC puede ir por la cuenta bancaria o la billetera, las demás monedas solo por la billetera. Depositar desde el banco convierte créditos en CRC en tu cuenta de Poinbase; retirar al banco convierte CRC nuevamente en créditos y pasa por una revisión de cumplimiento que evalúa la contaminación de la cuenta de Poinbase. Retirar a una billetera exige la dirección de destino y varias confirmaciones hasta acreditarse; la comisión de gas es fija, nivel normal, y se descuenta de la moneda enviada. Si el formato de la dirección o el dígito de control es incorrecto, se rechaza; si el formato es válido pero nadie usa esa dirección, las monedas enviadas se pierden.¶Comercio: PSC significa Probably Stolen Coin, la moneda minada por tarjetas gráficas y mineros (máquinas). Las compras se pagan en la moneda de cotización y las ventas en la moneda negociada.¶La página de comercio de Web3 permite intercambiar cualquier par de monedas, siempre a través de CRC: si CRC está en un extremo se usa un fondo, si no, dos fondos, con dos comisiones y deslizamiento acumulado; la vista previa muestra la cantidad obtenida, los fondos recorridos y la pérdida.§Billeteras de hardware: las monedas en cadena residen en billeteras de hardware PLEDGER, cada una con sus propios saldos y contaminación. Una billetera es un objeto: arrástrala a la terminal de comercio para cargarla. Ábrela en la página Billeteras de la terminal; conéctala y desconéctala arriba a la derecha de la terminal. El comercio de la página Web3, la tienda y el mezclador de la página Red gris usan la billetera conectada; sin billetera o sin conexión, son solo de lectura y todos los saldos marcan 0. Los clientes que pagan con monedas pagan a la billetera conectada.¶Los pagos (tienda, mezclador, mostrador de Ponero, tarifas de publicación) comienzan como una factura en la terminal; ingresa la dirección del destinatario en la billetera y mantén presionado ✓ para firmar. Los dos últimos caracteres de una dirección son una suma de verificación, por lo que un error tipográfico de un carácter suele detectarse; de vez en cuando resulta válido y las monedas van a una dirección que nadie usa. Los intercambios en DEX también requieren firmar en la billetera.¶Poinbase es una cuenta de custodia; los depósitos se envían desde la billetera a la dirección de depósito de Poinbase (se aceptan PSC, CRC, CRT, CRA y SPARK) y los retiros se inician en la página Fondos de Poinbase. El Explorador de la página Billeteras permite consultar transferencias por dirección y solo muestra transferencias realmente ocurridas (tus billeteras, retiros, ingresos de mineros). El Dr. Jackson vende más billeteras de hardware; arrastra una a la terminal de comercio para agregarla, hasta {WalletMax}. La tienda tiene opciones más baratas. Una billetera que ya no desees puede destruirse en la página Billeteras; sus monedas se pierden para siempre, y todo lo que se envíe después a su dirección también.¶Las transferencias pagan una comisión de gas: lenta, normal o rápida, y los precios del gas suben y bajan en aproximadamente una semana; cuando la red se congestiona, las comisiones de gas suben y las transacciones lentas pueden ser descartadas del mempool. Verifica la dirección completa antes de enviar.§Staking: el CRA en staking en el fondo de la Revolución genera una tasa diaria que se capitaliza en el monto; retirar implica solicitarlo primero y esperar cuatro días, sin intereses durante la espera y sin forma de retirarlo antes. CRA está parcialmente colateralizado: cada CRA está respaldado por la reserva de CRC de la Revolución y por el token de balance SPARK; la cobertura de la reserva y la tasa de colateralización aparecen en la página de staking. Los intereses se pagan con CRA nuevo sin colateral, lo que diluye la cobertura de la reserva, más rápido cuanto más staking haya; si la cobertura es demasiado baja, la Revolución recorta la tasa. La Revolución a veces desvía la reserva, precedida de rumores: es la señal de aviso. Si tras ello la cobertura cae por debajo de {CraCrashRatio:%}, hay colapso: CRA pierde todo su valor en tres días y los cuatro días de desbloqueo serán demasiado lentos; si no baja de ahí, solo hay un descuento, y los fondos de los saqueos a la clase alta van reponiendo la reserva poco a poco.¶Acuñación oficial: depositar CRC y SPARK (proporción según la tasa de colateralización actual; la vista previa indica cuánto hace falta) para acuñar CRA, con una cola de {CraMintDaysMin} a {CraMintDaysMax} días; el CRA acuñado entra directamente en staking. La quema cambia CRA por CRC y SPARK, con una espera igual de larga que el desbloqueo; si la reserva no alcanza, la parte de CRC se redLine truncated
guide.web3.text,"Banco y comercio: la página del banco es de solo lectura y muestra efectivo, alquiler y el CRC de la cuenta de Poinbase. La página Fondos de Poinbase gestiona depósitos y retiros; primero se elige la moneda: el CRC puede ir por la cuenta bancaria o la billetera, las demás monedas solo por la billetera. Depositar desde el banco convierte créditos en CRC en tu cuenta de Poinbase; retirar al banco convierte CRC nuevamente en créditos y pasa por una revisión de cumplimiento que evalúa la contaminación de la cuenta de Poinbase. Retirar a una billetera exige la dirección de destino y varias confirmaciones hasta acreditarse; la comisión de gas es fija, nivel normal, y se descuenta de la moneda enviada. Si el formato de la dirección o el dígito de control es incorrecto, se rechaza; si el formato es válido pero nadie usa esa dirección, las monedas enviadas se pierden.¶Comercio: PSC significa Probably Stolen Coin, la moneda minada por tarjetas gráficas y mineros (máquinas). Tanto las compras como las ventas se introducen como cantidad de la moneda negociada; la vista previa muestra la moneda de cotización pagada o recibida, el precio medio incluye la comisión y el deslizamiento no.¶La página de comercio de Web3 permite intercambiar cualquier par de monedas, siempre a través de CRC: si CRC está en un extremo se usa un fondo, si no, dos fondos, con dos comisiones y deslizamiento acumulado; la vista previa muestra la cantidad obtenida, los fondos recorridos y la pérdida.§Billeteras de hardware: las monedas en cadena residen en billeteras de hardware PLEDGER, cada una con sus propios saldos y contaminación. Una billetera es un objeto: arrástrala a la terminal de comercio para cargarla. Ábrela en la página Billeteras de la terminal; conéctala y desconéctala arriba a la derecha de la terminal. El comercio de la página Web3, la tienda y el mezclador de la página Red gris usan la billetera conectada; sin billetera o sin conexión, son solo de lectura y todos los saldos marcan 0. Los clientes que pagan con monedas pagan a la billetera conectada.¶Los pagos (tienda, mezclador, mostrador de Ponero, tarifas de publicación) comienzan como una factura en la terminal; ingresa la dirección del destinatario en la billetera y mantén presionado ✓ para firmar. Los dos últimos caracteres de una dirección son una suma de verificación, por lo que un error tipográfico de un carácter suele detectarse; de vez en cuando resulta válido y las monedas van a una dirección que nadie usa. Los intercambios en DEX también requieren firmar en la billetera.¶Poinbase es una cuenta de custodia; los depósitos se envían desde la billetera a la dirección de depósito de Poinbase (se aceptan PSC, CRC, CRT, CRA y SPARK) y los retiros se inician en la página Fondos de Poinbase. El Explorador de la página Billeteras permite consultar transferencias por dirección y solo muestra transferencias realmente ocurridas (tus billeteras, retiros, ingresos de mineros). El Dr. Jackson vende más billeteras de hardware; arrastra una a la terminal de comercio para agregarla, hasta {WalletMax}. La tienda tiene opciones más baratas. Una billetera que ya no desees puede destruirse en la página Billeteras; sus monedas se pierden para siempre, y todo lo que se envíe después a su dirección también.¶Las transferencias pagan una comisión de gas: lenta, normal o rápida, y los precios del gas suben y bajan en aproximadamente una semana; cuando la red se congestiona, las comisiones de gas suben y las transacciones lentas pueden ser descartadas del mempool. Verifica la dirección completa antes de enviar.§Staking: el CRA en staking en el fondo de la Revolución genera una tasa diaria que se capitaliza en el monto; retirar implica solicitarlo primero y esperar cuatro días, sin intereses durante la espera y sin forma de retirarlo antes. CRA está parcialmente colateralizado: cada CRA está respaldado por la reserva de CRC de la Revolución y por el token de balance SPARK; la cobertura de la reserva y la tasa de colateralización aparecen en la página de staking. Los intereses se pagan con CRA nuevo sin colateral, lo que diluye la cobertura de la reserva, más rápido cuanto más staking haya; si la cobertura es demasiado baja, la Revolución recorta la tasa. La Revolución a veces desvía la reserva, precedida de rumores: es la señal de aviso. Si tras ello la cobertura cae por debajo de {CraCrashRatio:%}, hay colapso: CRA pierde todo su valor en tres días y los cuatro días de desbloqueo serán demasiado lentos; si no baja de ahí, solo hay un descuento, y los fondos de los saqueos a la clase alta van reponiendo la reserva poco a poco.¶Acuñación oficial: depositar CRC y SPARK (proporción según la tasa de colateralización actual; la vista previa indica cuánto hace falta) para acuñar CRA, con una cola de {CraMintDaysMin} a {CraMintDaysMax} días; el CRA acuñado entra directamente en staking. La queLine truncated
courier.odd1,...Llegó el paquete.
courier.odd2,(Mantiene la mano en el bolsillo). Firma aquí.
courier.sign,Firmar
@@ -954,5 +954,26 @@ asic.st.dead,Quemado
perp.preview,Valor nocional {0} precio medio est. {1} (deslizamiento {2}%)
perp.sim.close,Cierre valor nocional {0} precio medio est. {1} (deslizamiento {2}%)
perp.sim.close2,Comisión {0} se recuperan unos {1} CRC (G/P {2})
trade.sim.buy,La compra da unos {0} {1} medio {2} deslizamiento {3}%
trade.sim.sell,La venta da unos {0} {1} medio {2} deslizamiento {3}%
trade.sim.buy,La compra cuesta unos {0} {1} medio {2} deslizamiento {3}%
trade.amount.unit,Cantidad ({0})
trade.fee,Comisión {0}%
trade.sim.thin,Supera la liquidez del pool
news.wipe.down.title,{0} cae un {1}% en un día: {2} traders liquidados
news.wipe.down.desc,"En el último día se liquidaron {1} posiciones largas en perpetuos de {0}, por un total de {2} créditos. El fondo de seguro de Poinbase queda en {3} créditos."
news.wipe.up.title,{0} sube un {1}% en un día: {2} traders liquidados
news.wipe.up.desc,"En el último día se liquidaron {1} posiciones cortas en perpetuos de {0}, por un total de {2} créditos. El fondo de seguro de Poinbase queda en {3} créditos."
hot.name,Vendedor
hot.intro.CRT,"Las cosas están tensas y este CRT quema. Necesito efectivo, rápido."
hot.intro.PSC,"La billetera de una granja de minería cambió de dueño anoche. El PSC lo tengo yo, y solo acepto efectivo."
hot.intro.PONERO,"Un rescate, en Ponero. Nadie puede rastrearlo. Solo efectivo."
hot.offer,"{0} {1}, que valen {2} al precio de hoy. Dame {3} en efectivo y las monedas son tuyas ahora mismo."
hot.choice.yes,Aceptar
hot.choice.no,Rechazar
hot.say.yes,Trato hecho.
hot.say.no,No pienso tocar eso.
hot.done,Monedas enviadas. Nunca nos vimos.
hot.refused,Ya habrá otro que lo quiera.
hot.nocash,¿Ni siquiera tienes el efectivo? Olvídalo.
hot.nowallet,"No hay billetera conectada, ¿adónde mando las monedas? Olvídalo."
hot.sting,Quieto. Seguridad. Compra de fondos robados: el efectivo queda confiscado y esto va a tu expediente.
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Contrebande (élevée)
black.kind.Tech,High-tech (majoration)
nightlog.bm.ready,Marché noir : {0} est arrivé ; un livreur passera dès l'ouverture.
guide.web3.title,Manuel Web3
guide.web3.text,"Banque et trading : la page Banque est en lecture seule et affiche les espèces, le loyer et les CRC du compte Poinbase. La page Fonds de Poinbase gère dépôts et retraits ; on choisit d'abord la pièce : le CRC passe par le compte bancaire ou le portefeuille, les autres pièces uniquement par le portefeuille. Le dépôt depuis la banque convertit les crédits en CRC sur votre compte Poinbase ; le retrait vers la banque reconvertit les CRC en crédits et passe par un contrôle de conformité, qui évalue la contamination du compte Poinbase. Un retrait vers un portefeuille demande l'adresse du destinataire et plusieurs confirmations avant d'arriver ; les frais de gas sont fixés au niveau normal et prélevés sur la pièce envoyée. Un format d'adresse ou un chiffre de contrôle incorrect est refusé ; une adresse au format valide mais que personne n'utilise fait perdre les pièces envoyées.¶Trading : PSC signifie Probably Stolen Coin, la pièce minée par les cartes graphiques et les mineurs (machines). Les achats sont payés dans la monnaie de cotation, les ventes dans la monnaie échangée.¶La page de trading Web3 permet d'échanger deux pièces au choix, toujours via le CRC : si le CRC est d'un côté, un seul pool est utilisé, sinon deux pools, avec deux frais et un glissement cumulé ; l'aperçu indique le montant obtenu, le nombre de pools traversés et la perte.§Portefeuilles matériels : les pièces sur la blockchain sont conservées dans des portefeuilles matériels PLEDGER, chacun avec ses propres soldes et sa contamination. Un portefeuille est un objet : glissez-le sur le terminal de trading pour le charger. Ouvrez-le sur la page Portefeuilles du terminal ; connectez et déconnectez-le en haut à droite du terminal. Le trading de la page Web3, la boutique et le mixeur de la page Réseau gris utilisent le portefeuille connecté ; sans portefeuille ou sans connexion, ils sont en lecture seule et tous les soldes affichent 0. Les clients qui paient en pièces paient sur le portefeuille connecté.¶Les paiements (boutique, mixeur, comptoir Ponero, frais de mise en vente) débutent par une facture sur le terminal ; saisissez l'adresse du destinataire sur le portefeuille et maintenez ✓ pour signer. Les deux derniers caractères d'une adresse sont une somme de contrôle, de sorte qu'une faute de frappe d'un caractère est généralement interceptée ; il arrive parfois qu'elle soit valide par hasard et les pièces partent alors vers une adresse inutilisée. Les échanges sur le DEX nécessitent également une signature sur le portefeuille.¶Poinbase est un compte dépositaire ; le dépôt s'effectue depuis le portefeuille vers l'adresse de dépôt de Poinbase (PSC, CRC, CRT, CRA et SPARK sont acceptés), le retrait se lance depuis la page Fonds de Poinbase. L'Explorateur de la page Portefeuilles permet de consulter les transferts par adresse, en n'affichant que les transferts réellement effectués (vos portefeuilles, retraits, gains des mineurs). D'autres portefeuilles matériels sont vendus par le Pr Jackson ; glissez-en un sur le terminal de trading pour l'ajouter, jusqu'à {WalletMax} au total. La boutique en propose des moins chers. Un portefeuille devenu inutile peut être détruit sur la page Portefeuilles ; ses pièces sont perdues définitivement, et tout ce qui est envoyé ensuite à son adresse l'est aussi.¶Les transferts sont soumis à des frais de gas : lent, normal ou rapide, et le prix du gas monte et descend sur environ une semaine ; lorsque le réseau est saturé, les frais de gas augmentent et les transactions lentes peuvent être évincées de la mempool. Vérifiez l'adresse complète avant d'envoyer.§Staking : le CRA staké dans le pool de la Révolution rapporte un taux quotidien capitalisé dans le montant staké ; retirer nécessite d'en faire la demande préalable et d'attendre quatre jours, sans intérêt durant cette période ni moyen de récupérer les fonds plus tôt. Le CRA est partiellement collatéralisé : chaque CRA est soutenu par la réserve de CRC détenue par la Révolution et par le jeton d'équilibre SPARK ; le taux de couverture de la réserve et le taux de collatéralisation figurent sur la page de staking. Les intérêts sont versés en nouveaux CRA non collatéralisés, ce qui dilue la couverture de la réserve, d'autant plus vite que le staking est important ; si la couverture est trop faible, la Révolution réduit le taux. La Révolution détourne parfois la réserve, précédée de rumeurs : c'est le présage. Si la couverture tombe ensuite sous {CraCrashRatio:%}, c'est l'effondrement : le CRA perd toute valeur en trois jours et quatre jours de déverrouillage arrivent trop tard ; au-dessus, il y a seulement une décote, et l'argent des pillages de la haute société reconstitue peu à peu la réserve.¶Frappe officielle : déposer du CRC et du SPARK (proportion selon le taux de collatéralisation actuel, l'aperçu indique les moLine truncated
guide.web3.text,"Banque et trading : la page Banque est en lecture seule et affiche les espèces, le loyer et les CRC du compte Poinbase. La page Fonds de Poinbase gère dépôts et retraits ; on choisit d'abord la pièce : le CRC passe par le compte bancaire ou le portefeuille, les autres pièces uniquement par le portefeuille. Le dépôt depuis la banque convertit les crédits en CRC sur votre compte Poinbase ; le retrait vers la banque reconvertit les CRC en crédits et passe par un contrôle de conformité, qui évalue la contamination du compte Poinbase. Un retrait vers un portefeuille demande l'adresse du destinataire et plusieurs confirmations avant d'arriver ; les frais de gas sont fixés au niveau normal et prélevés sur la pièce envoyée. Un format d'adresse ou un chiffre de contrôle incorrect est refusé ; une adresse au format valide mais que personne n'utilise fait perdre les pièces envoyées.¶Trading : PSC signifie Probably Stolen Coin, la pièce minée par les cartes graphiques et les mineurs (machines). Les achats comme les ventes se saisissent en quantité de la monnaie échangée ; l'aperçu indique la monnaie de cotation payée ou reçue, le prix moyen inclut les frais et le glissement non.¶La page de trading Web3 permet d'échanger deux pièces au choix, toujours via le CRC : si le CRC est d'un côté, un seul pool est utilisé, sinon deux pools, avec deux frais et un glissement cumulé ; l'aperçu indique le montant obtenu, le nombre de pools traversés et la perte.§Portefeuilles matériels : les pièces sur la blockchain sont conservées dans des portefeuilles matériels PLEDGER, chacun avec ses propres soldes et sa contamination. Un portefeuille est un objet : glissez-le sur le terminal de trading pour le charger. Ouvrez-le sur la page Portefeuilles du terminal ; connectez et déconnectez-le en haut à droite du terminal. Le trading de la page Web3, la boutique et le mixeur de la page Réseau gris utilisent le portefeuille connecté ; sans portefeuille ou sans connexion, ils sont en lecture seule et tous les soldes affichent 0. Les clients qui paient en pièces paient sur le portefeuille connecté.¶Les paiements (boutique, mixeur, comptoir Ponero, frais de mise en vente) débutent par une facture sur le terminal ; saisissez l'adresse du destinataire sur le portefeuille et maintenez ✓ pour signer. Les deux derniers caractères d'une adresse sont une somme de contrôle, de sorte qu'une faute de frappe d'un caractère est généralement interceptée ; il arrive parfois qu'elle soit valide par hasard et les pièces partent alors vers une adresse inutilisée. Les échanges sur le DEX nécessitent également une signature sur le portefeuille.¶Poinbase est un compte dépositaire ; le dépôt s'effectue depuis le portefeuille vers l'adresse de dépôt de Poinbase (PSC, CRC, CRT, CRA et SPARK sont acceptés), le retrait se lance depuis la page Fonds de Poinbase. L'Explorateur de la page Portefeuilles permet de consulter les transferts par adresse, en n'affichant que les transferts réellement effectués (vos portefeuilles, retraits, gains des mineurs). D'autres portefeuilles matériels sont vendus par le Pr Jackson ; glissez-en un sur le terminal de trading pour l'ajouter, jusqu'à {WalletMax} au total. La boutique en propose des moins chers. Un portefeuille devenu inutile peut être détruit sur la page Portefeuilles ; ses pièces sont perdues définitivement, et tout ce qui est envoyé ensuite à son adresse l'est aussi.¶Les transferts sont soumis à des frais de gas : lent, normal ou rapide, et le prix du gas monte et descend sur environ une semaine ; lorsque le réseau est saturé, les frais de gas augmentent et les transactions lentes peuvent être évincées de la mempool. Vérifiez l'adresse complète avant d'envoyer.§Staking : le CRA staké dans le pool de la Révolution rapporte un taux quotidien capitalisé dans le montant staké ; retirer nécessite d'en faire la demande préalable et d'attendre quatre jours, sans intérêt durant cette période ni moyen de récupérer les fonds plus tôt. Le CRA est partiellement collatéralisé : chaque CRA est soutenu par la réserve de CRC détenue par la Révolution et par le jeton d'équilibre SPARK ; le taux de couverture de la réserve et le taux de collatéralisation figurent sur la page de staking. Les intérêts sont versés en nouveaux CRA non collatéralisés, ce qui dilue la couverture de la réserve, d'autant plus vite que le staking est important ; si la couverture est trop faible, la Révolution réduit le taux. La Révolution détourne parfois la réserve, précédée de rumeurs : c'est le présage. Si la couverture tombe ensuite sous {CraCrashRatio:%}, c'est l'effondrement : le CRA perd toute valeur en trois jours et quatre jours de déverrouillage arrivent trop tard ; au-dessus, il y a seulement une décote, et l'argent des pillages de la haute société reconstitue peu à peu la réserve.¶Frappe officielle : dépoLine truncated
courier.odd1,...Le colis est là.
courier.odd2,(Sa main reste dans sa poche.) Signez ici.
courier.sign,Signer
@@ -954,5 +954,26 @@ asic.st.dead,Grillé
perp.preview,Valeur notionnelle {0} prix moyen est. {1} (glissement {2}%)
perp.sim.close,Clôture valeur notionnelle {0} prix moyen est. {1} (glissement {2}%)
perp.sim.close2,Frais {0} environ {1} CRC récupérés (P/L {2})
trade.sim.buy,L'achat donne environ {0} {1} moy. {2} glissement {3}%
trade.sim.sell,La vente donne environ {0} {1} moy. {2} glissement {3}%
trade.sim.buy,L'achat coûte environ {0} {1} moy. {2} glissement {3}%
trade.amount.unit,Quantité ({0})
trade.fee,Frais {0}%
trade.sim.thin,Dépasse la liquidité du pool
news.wipe.down.title,"{0} chute de {1}% en un jour, {2} traders liquidés"
news.wipe.down.desc,"Au cours de la dernière journée, {1} positions longues sur les perps {0} ont été liquidées, pour {2} crédits au total. Le fonds d'assurance de Poinbase s'établit à {3} crédits."
news.wipe.up.title,"{0} bondit de {1}% en un jour, {2} traders liquidés"
news.wipe.up.desc,"Au cours de la dernière journée, {1} positions courtes sur les perps {0} ont été liquidées, pour {2} crédits au total. Le fonds d'assurance de Poinbase s'établit à {3} crédits."
hot.name,Vendeur
hot.intro.CRT,"Ça chauffe en ce moment et ce CRT me brûle les doigts. Il me faut du liquide, vite."
hot.intro.PSC,"Le portefeuille d'une ferme de minage a changé de main cette nuit. Le PSC est chez moi, et je ne prends que du liquide."
hot.intro.PONERO,"Une rançon, en Ponero. Personne ne peut la tracer. Liquide uniquement."
hot.offer,"{0} {1}, soit {2} au cours du jour. Donnez-moi {3} en liquide et les pièces sont à vous tout de suite."
hot.choice.yes,Accepter
hot.choice.no,Refuser
hot.say.yes,Marché conclu.
hot.say.no,Je n'y touche pas.
hot.done,Pièces envoyées. On ne s'est jamais vus.
hot.refused,D'autres le prendront.
hot.nocash,Vous n'avez même pas le liquide ? Laissez tomber.
hot.nowallet,"Aucun portefeuille connecté, où envoyer les pièces ? Laissez tomber."
hot.sting,Pas un geste. Sécurité. Achat de fonds volés : le liquide est confisqué et ce sera inscrit à votre dossier.
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,禁制品(高)
black.kind.Tech,ハイテク品(割増)
nightlog.bm.ready,闇市場:{0} が到着。開店後に配達人が届けてくれる。
guide.web3.title,Web3ハンドブック
guide.web3.text,銀行と取引:銀行ページは閲覧専用で、現金、家賃、Poinbase口座のCRCを表示する。入金と出金はPoinbaseの資金ページで行い、先にコインを選ぶ。CRCは銀行口座とウォレットのどちらでも可能で、他のコインはウォレットのみ。銀行からの入金はクレジットをPoinbase口座のCRCに変換し、銀行への出金はCRCをクレジットに戻すが、Poinbase口座の汚染を対象としたコンプライアンス審査が行われる。ウォレットへの出金は受取アドレスの入力が必要で、数回の承認を経て着金する。ガス代は通常の段階で固定され、送るコインから差し引かれる。アドレスの形式やチェックディジットが誤っていると拒否される。形式が正しくても誰も使っていないアドレスに送ったコインは失われる。¶取引:PSCは Probably Stolen Coin の略称で、グラフィックボードや専用採掘機で採掘されるコイン。買いは決済通貨で支払い、売りは取引対象のコインで行う。¶Web3の取引ページでは任意の2種類のコインを交換でき、必ずCRCを経由する。CRCが片側なら1つのプール、そうでなければ2つのプールを通り、手数料は2回、スリッページは重なる。プレビューに受取数量、経由するプール数、損失が表示される。§ハードウェアウォレット:チェーン上のコインはPLEDGERハードウェアウォレットに保管され、ウォレットごとに残高と汚染が個別に管理される。ウォレットはアイテムで、取引ターミナルにドラッグして読み込む。ターミナルのウォレットページで開き、ターミナル右上で接続・切断する。Web3ページの取引とグレーネットページのショップ、ミキサーは接続されたウォレットを使用する。ウォレットがない、または接続していないときは閲覧のみで、残高はすべて0になる。コイン決済の客は接続されたウォレットに支払う。¶支払い(ショップ、ミキサー、Ponero窓口、出品手数料)はまずターミナルで請求書を発行し、ウォレット側で送金先アドレスを入力して✓を長押しして署名する。アドレスの末尾2文字はチェックサムのため、1文字の誤入力なら通常は検出されるが、偶然有効なアドレスに一致した場合は誰も使っていないアドレスにコインが送られてしまう。DEXでのスワップもウォレットでの署名が必要となる。¶Poinbaseはカストディ口座で、入金はウォレットからPoinbaseの入金アドレスへ送金し(PSC、CRC、CRT、CRA、SPARKを受け付ける)、出金はPoinbaseの資金ページで行う。ウォレットページのエクスプローラーではアドレスで送金履歴を検索でき、実際に行われた送金(自分のウォレット、出金、採掘機の収益)のみが表示される。追加のハードウェアウォレットはジャックソン博士から購入し、取引ターミナルにドラッグして追加する(最大{WalletMax}個)。ショップにはより安価なものもある。不要になったウォレットは、ウォレットページで破棄できる。中のコインは永久に失われ、その後このアドレスに送られたものも失われる。¶送金にはガス代が必要で、低速・通常・高速の3段階があり、ガス価格は約1週間周期で上下する。ネットワーク混雑時はガス代が高騰し、低速のトランザクションはメムプールから除外されることがある。送金前にアドレス全体を必ず確認すること。§ステーキング:革命家のプールにCRAをステーキングすると日利が付与され、利息は元本に複利で組み入れられる。出金するにはまず申請して4日間待つ必要があり、待機期間中は利息が発生せず、早期引き出しもできない。CRAは部分担保で、CRA1枚ごとに革命家が保有するCRC準備金とバランストークンSPARKが裏付けとなる。準備率と担保率はステーキングページに表示される。利息は担保のない新規CRAで支払われるため準備率が薄まり、ステーキングが多いほど速く進む。準備率が低すぎると革命家は日利を引き下げる。革命家は時折準備金を流用し、事前に噂が流れる。それが予兆だ。流用後に準備率が{CraCrashRatio:%}を割り込むと崩壊する。3日以内にCRAは無価値となり、4日間のロック解除期間では間に合わない。割り込まなければディスカウントにとどまり、上流階級への略奪で得た資金が準備金を徐々に補う。¶公式ミントLine truncated
guide.web3.text,銀行と取引:銀行ページは閲覧専用で、現金、家賃、Poinbase口座のCRCを表示する。入金と出金はPoinbaseの資金ページで行い、先にコインを選ぶ。CRCは銀行口座とウォレットのどちらでも可能で、他のコインはウォレットのみ。銀行からの入金はクレジットをPoinbase口座のCRCに変換し、銀行への出金はCRCをクレジットに戻すが、Poinbase口座の汚染を対象としたコンプライアンス審査が行われる。ウォレットへの出金は受取アドレスの入力が必要で、数回の承認を経て着金する。ガス代は通常の段階で固定され、送るコインから差し引かれる。アドレスの形式やチェックディジットが誤っていると拒否される。形式が正しくても誰も使っていないアドレスに送ったコインは失われる。¶取引:PSCは Probably Stolen Coin の略称で、グラフィックボードや専用採掘機で採掘されるコイン。買いも売りも取引対象のコインの数量で入力する。プレビューには支払う・受け取る決済通貨が表示され、平均価格は手数料込み、スリッページは手数料を含まない。¶Web3の取引ページでは任意の2種類のコインを交換でき、必ずCRCを経由する。CRCが片側なら1つのプール、そうでなければ2つのプールを通り、手数料は2回、スリッページは重なる。プレビューに受取数量、経由するプール数、損失が表示される。§ハードウェアウォレット:チェーン上のコインはPLEDGERハードウェアウォレットに保管され、ウォレットごとに残高と汚染が個別に管理される。ウォレットはアイテムで、取引ターミナルにドラッグして読み込む。ターミナルのウォレットページで開き、ターミナル右上で接続・切断する。Web3ページの取引とグレーネットページのショップ、ミキサーは接続されたウォレットを使用する。ウォレットがない、または接続していないときは閲覧のみで、残高はすべて0になる。コイン決済の客は接続されたウォレットに支払う。¶支払い(ショップ、ミキサー、Ponero窓口、出品手数料)はまずターミナルで請求書を発行し、ウォレット側で送金先アドレスを入力して✓を長押しして署名する。アドレスの末尾2文字はチェックサムのため、1文字の誤入力なら通常は検出されるが、偶然有効なアドレスに一致した場合は誰も使っていないアドレスにコインが送られてしまう。DEXでのスワップもウォレットでの署名が必要となる。¶Poinbaseはカストディ口座で、入金はウォレットからPoinbaseの入金アドレスへ送金し(PSC、CRC、CRT、CRA、SPARKを受け付ける)、出金はPoinbaseの資金ページで行う。ウォレットページのエクスプローラーではアドレスで送金履歴を検索でき、実際に行われた送金(自分のウォレット、出金、採掘機の収益)のみが表示される。追加のハードウェアウォレットはジャックソン博士から購入し、取引ターミナルにドラッグして追加する(最大{WalletMax}個)。ショップにはより安価なものもある。不要になったウォレットは、ウォレットページで破棄できる。中のコインは永久に失われ、その後このアドレスに送られたものも失われる。¶送金にはガス代が必要で、低速・通常・高速の3段階があり、ガス価格は約1週間周期で上下する。ネットワーク混雑時はガス代が高騰し、低速のトランザクションはメムプールから除外されることがある。送金前にアドレス全体を必ず確認すること。§ステーキング:革命家のプールにCRAをステーキングすると日利が付与され、利息は元本に複利で組み入れられる。出金するにはまず申請して4日間待つ必要があり、待機期間中は利息が発生せず、早期引き出しもできない。CRAは部分担保で、CRA1枚ごとに革命家が保有するCRC準備金とバランストークンSPARKが裏付けとなる。準備率と担保率はステーキングページに表示される。利息は担保のない新規CRAで支払われるため準備率が薄まり、ステーキングが多いほど速く進む。準備率が低すぎると革命家は日利を引き下げる。革命家は時折準備金を流用し、事前に噂が流れる。それが予兆だ。流用後に準備率が{CraCrashRatio:%}を割り込むと崩壊する。3日以内にCRAは無価値となり、4日間のロック解除期間では間に合わない。割り込Line truncated
courier.odd1,……荷物が届いた。
courier.odd2,(ポケットに手を入れたままだ)ここにサインを。
courier.sign,サイン
@@ -954,5 +954,26 @@ asic.st.dead,焼損
perp.preview,想定元本 {0} 推定平均価格 {1}(スリッページ {2}%)
perp.sim.close,決済 想定元本 {0} 推定平均価格 {1}(スリッページ {2}%)
perp.sim.close2,手数料 {0} 約 {1} CRC が戻る(損益 {2})
trade.sim.buy,購入で約 {0} {1} 平均 {2} スリッページ {3}%
trade.sim.sell,売却で約 {0} {1} 平均 {2} スリッページ {3}%
trade.sim.buy,購入に約 {0} {1} 平均 {2} スリッページ {3}%
trade.amount.unit,数量({0})
trade.fee,手数料 {0}%
trade.sim.thin,プールの流動性を超過
news.wipe.down.title,{0}が1日で{1}%下落、{2}人がロスカット
news.wipe.down.desc,この1日で{0}無期限先物のロングポジション{1}件がロスカットされ、総額は{2}クレジットに上った。Poinbaseの保険基金残高は{3}クレジット。
news.wipe.up.title,{0}が1日で{1}%上昇、{2}人がロスカット
news.wipe.up.desc,この1日で{0}無期限先物のショートポジション{1}件がロスカットされ、総額は{2}クレジットに上った。Poinbaseの保険基金残高は{3}クレジット。
hot.name,売り手
hot.intro.CRT,最近は物騒で、このCRTを持っているのは危ない。急いで現金にしたい。
hot.intro.PSC,ある採掘場のウォレットが昨夜持ち主を変えた。PSCは今こっちにある。現金しか受け取らない。
hot.intro.PONERO,身代金だ、Poneroで。出所は誰にも追えない。現金のみ。
hot.offer,{0} {1}、今の相場で{2}相当だ。現金{3}で、コインはこの場で送る。
hot.choice.yes,受け取る
hot.choice.no,断る
hot.say.yes,取引成立だ。
hot.say.no,それには手を出さない。
hot.done,送った。俺たちは会っていない。
hot.refused,欲しがる奴はいくらでもいる。
hot.nocash,現金も用意できないのか?ならやめだ。
hot.nowallet,ウォレットがつながっていない。コインをどこに送れと?やめだ。
hot.sting,動くな、警察だ。盗まれた資金の買い取りだな。現金は没収、記録にも残る。
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Kontrabanda (wysoki poziom)
black.kind.Tech,Zaawansowana technologia (marża)
nightlog.bm.ready,Czarny Rynek: {0} na miejscu; kurier pojawi się po otwarciu lokalu.
guide.web3.title,Podręcznik Web3
guide.web3.text,"Bank i handel: strona banku jest tylko do odczytu i pokazuje gotówkę, czynsz oraz CRC na koncie Poinbase. Strona Środki w Poinbase obsługuje wpłaty i wypłaty; najpierw wybiera się monetę: CRC może iść przez konto bankowe lub portfel, pozostałe monety tylko przez portfel. Wpłata z banku zamienia kredyty na CRC na koncie Poinbase; wypłata do banku zamienia CRC z powrotem na kredyty i podlega kontroli zgodności, sprawdzającej skażenie konta Poinbase. Wypłata do portfela wymaga podania adresu odbiorcy i kilku potwierdzeń do zaksięgowania; opłata gas jest stała, na poziomie normalnym, i pobierana z wysyłanej monety. Błędny format adresu lub cyfra kontrolna powoduje odrzucenie; adres o poprawnym formacie, którego nikt nie używa, oznacza utratę wysłanych monet.¶Handel: PSC to skrót od Probably Stolen Coin, monety wydobywanej przez karty graficzne i koparki. Zakupy opłaca się w monecie kwotowanej, sprzedaż – w monecie bazowej.¶Strona handlu Web3 pozwala wymienić dowolne dwie monety, zawsze przez CRC: gdy CRC jest po jednej stronie, używana jest jedna pula, w przeciwnym razie dwie, z dwiema opłatami i sumującym się poślizgiem; podgląd pokazuje otrzymaną ilość, liczbę pul i stratę.§Portfele sprzętowe: monety w łańcuchu znajdują się w portfelach sprzętowych PLEDGER, a każdy z nich ma własne saldo i poziom skażenia. Portfel jest przedmiotem: przeciągnij go na terminal handlowy, aby go załadować. Otwórz go na stronie Portfele w terminalu; połącz i odłącz w prawym górnym rogu terminala. Handel na stronie Web3 oraz sklep i mikser na stronie Szara sieć korzystają z połączonego portfela; bez portfela lub bez połączenia są tylko do odczytu, a wszystkie salda wynoszą 0. Klienci płacący monetami płacą na połączony portfel.¶Płatności (sklep, mikser, kantor Ponero, opłaty za wystawienie) zaczynają się od rachunku w terminalu; wpisz adres odbiorcy w portfelu i przytrzymaj ✓, aby podpisać. Dwa ostatnie znaki adresu to suma kontrolna, więc pomyłka o jeden znak jest zwykle wychwytywana; sporadycznie zdarza się, że okazuje się poprawny i monety trafiają pod adres, z którego nikt nie korzysta. Wymiany na DEX również wymagają podpisu na portfelu.¶Poinbase to konto powiernicze; wpłaty wysyła się z portfela na adres wpłat Poinbase (przyjmowane są PSC, CRC, CRT, CRA i SPARK), a wypłaty zleca się na stronie Środki w Poinbase. Eksplorator na stronie Portfele pozwala sprawdzać przelewy według adresu i pokazuje wyłącznie przelewy, które faktycznie miały miejsce (twoje portfele, wypłaty, zyski koparek). Więcej portfeli sprzętowych sprzedaje Dr Jackson; przeciągnij portfel na terminal handlowy, aby go dodać – maksymalnie do {WalletMax}. W sklepie dostępne są tańsze. Niepotrzebny portfel można zniszczyć na stronie Portfele; jego monety przepadają na zawsze, podobnie jak wszystko, co zostanie później wysłane na jego adres.¶Przelewy wymagają opłaty gas: wolnej, normalnej lub szybkiej, a ceny gasu rosną i spadają w cyklu około tygodnia; gdy sieć jest przeciążona, opłaty gas rosną, a powolne transakcje mogą zostać usunięte z mempoola. Przed wysłaniem sprawdź pełny adres.§Staking: CRA ulokowane w puli Rewolucji przynosi dzienny zysk według stawki dziennej, doliczany do wkładu; wypłata wymaga wcześniejszego złożenia wniosku i odczekania czterech dni, bez naliczania odsetek w okresie oczekiwania i bez możliwości wcześniejszego odbioru. CRA jest częściowo zabezpieczone: każde CRA wspierają rezerwa CRC należąca do Rewolucji oraz token równoważący SPARK; pokrycie rezerwy i stopa zabezpieczenia widnieją na stronie stakingu. Odsetki wypłacane są w nowych, niezabezpieczonych CRA, co rozwadnia pokrycie rezerwy, tym szybciej, im więcej w stakingu; przy zbyt niskim pokryciu Rewolucja obniża stawkę. Rewolucja czasem sięga po rezerwę, a wcześniej krążą pogłoski: to zapowiedź. Jeśli potem pokrycie spadnie poniżej {CraCrashRatio:%}, następuje krach: CRA staje się bezwartościowe w ciągu trzech dni, a cztery dni na odblokowanie to za wolno; powyżej tego progu jest tylko dyskonto, a środki z grabieży Górnego poziomu stopniowo odbudowują rezerwę.¶Oficjalne wybijanie: wpłać CRC i SPARK (proporcja według bieżącej stopy zabezpieczenia, podgląd pokazuje wymagane ilości), aby wybić CRA, w kolejce {CraMintDaysMin}–{CraMintDaysMax} dni; wybite CRA trafia od razu do stakingu. Spalanie zamienia CRA z powrotem na CRC i SPARK, z oczekiwaniem tak długim jak odblokowanie; gdy rezerwy brakuje, udział CRC jest zmniejszany według pokrycia. Oczekujące wybijanie i spalanie Rewolucja może w całości nie zrealizować: nocne prawdopodobieństwo to wartość, o jaką cena CRA jest poniżej 1, razy {CraRugPerDepeg}; jeśli cena nie jest poniżej 1, nic się nie dzieje.¶Do stakingu można wpłacać CRA, CRC, CRT i SPARK: ostatnie trzy są najpierw wymieniane na CRA nLine truncated
guide.web3.text,"Bank i handel: strona banku jest tylko do odczytu i pokazuje gotówkę, czynsz oraz CRC na koncie Poinbase. Strona Środki w Poinbase obsługuje wpłaty i wypłaty; najpierw wybiera się monetę: CRC może iść przez konto bankowe lub portfel, pozostałe monety tylko przez portfel. Wpłata z banku zamienia kredyty na CRC na koncie Poinbase; wypłata do banku zamienia CRC z powrotem na kredyty i podlega kontroli zgodności, sprawdzającej skażenie konta Poinbase. Wypłata do portfela wymaga podania adresu odbiorcy i kilku potwierdzeń do zaksięgowania; opłata gas jest stała, na poziomie normalnym, i pobierana z wysyłanej monety. Błędny format adresu lub cyfra kontrolna powoduje odrzucenie; adres o poprawnym formacie, którego nikt nie używa, oznacza utratę wysłanych monet.¶Handel: PSC to skrót od Probably Stolen Coin, monety wydobywanej przez karty graficzne i koparki. Zarówno zakup, jak i sprzedaż wpisuje się jako ilość monety bazowej; podgląd pokazuje zapłaconą lub otrzymaną monetę kwotowaną, średnia cena zawiera prowizję, a poślizg nie.¶Strona handlu Web3 pozwala wymienić dowolne dwie monety, zawsze przez CRC: gdy CRC jest po jednej stronie, używana jest jedna pula, w przeciwnym razie dwie, z dwiema opłatami i sumującym się poślizgiem; podgląd pokazuje otrzymaną ilość, liczbę pul i stratę.§Portfele sprzętowe: monety w łańcuchu znajdują się w portfelach sprzętowych PLEDGER, a każdy z nich ma własne saldo i poziom skażenia. Portfel jest przedmiotem: przeciągnij go na terminal handlowy, aby go załadować. Otwórz go na stronie Portfele w terminalu; połącz i odłącz w prawym górnym rogu terminala. Handel na stronie Web3 oraz sklep i mikser na stronie Szara sieć korzystają z połączonego portfela; bez portfela lub bez połączenia są tylko do odczytu, a wszystkie salda wynoszą 0. Klienci płacący monetami płacą na połączony portfel.¶Płatności (sklep, mikser, kantor Ponero, opłaty za wystawienie) zaczynają się od rachunku w terminalu; wpisz adres odbiorcy w portfelu i przytrzymaj ✓, aby podpisać. Dwa ostatnie znaki adresu to suma kontrolna, więc pomyłka o jeden znak jest zwykle wychwytywana; sporadycznie zdarza się, że okazuje się poprawny i monety trafiają pod adres, z którego nikt nie korzysta. Wymiany na DEX również wymagają podpisu na portfelu.¶Poinbase to konto powiernicze; wpłaty wysyła się z portfela na adres wpłat Poinbase (przyjmowane są PSC, CRC, CRT, CRA i SPARK), a wypłaty zleca się na stronie Środki w Poinbase. Eksplorator na stronie Portfele pozwala sprawdzać przelewy według adresu i pokazuje wyłącznie przelewy, które faktycznie miały miejsce (twoje portfele, wypłaty, zyski koparek). Więcej portfeli sprzętowych sprzedaje Dr Jackson; przeciągnij portfel na terminal handlowy, aby go dodać – maksymalnie do {WalletMax}. W sklepie dostępne są tańsze. Niepotrzebny portfel można zniszczyć na stronie Portfele; jego monety przepadają na zawsze, podobnie jak wszystko, co zostanie później wysłane na jego adres.¶Przelewy wymagają opłaty gas: wolnej, normalnej lub szybkiej, a ceny gasu rosną i spadają w cyklu około tygodnia; gdy sieć jest przeciążona, opłaty gas rosną, a powolne transakcje mogą zostać usunięte z mempoola. Przed wysłaniem sprawdź pełny adres.§Staking: CRA ulokowane w puli Rewolucji przynosi dzienny zysk według stawki dziennej, doliczany do wkładu; wypłata wymaga wcześniejszego złożenia wniosku i odczekania czterech dni, bez naliczania odsetek w okresie oczekiwania i bez możliwości wcześniejszego odbioru. CRA jest częściowo zabezpieczone: każde CRA wspierają rezerwa CRC należąca do Rewolucji oraz token równoważący SPARK; pokrycie rezerwy i stopa zabezpieczenia widnieją na stronie stakingu. Odsetki wypłacane są w nowych, niezabezpieczonych CRA, co rozwadnia pokrycie rezerwy, tym szybciej, im więcej w stakingu; przy zbyt niskim pokryciu Rewolucja obniża stawkę. Rewolucja czasem sięga po rezerwę, a wcześniej krążą pogłoski: to zapowiedź. Jeśli potem pokrycie spadnie poniżej {CraCrashRatio:%}, następuje krach: CRA staje się bezwartościowe w ciągu trzech dni, a cztery dni na odblokowanie to za wolno; powyżej tego progu jest tylko dyskonto, a środki z grabieży Górnego poziomu stopniowo odbudowują rezerwę.¶Oficjalne wybijanie: wpłać CRC i SPARK (proporcja według bieżącej stopy zabezpieczenia, podgląd pokazuje wymagane ilości), aby wybić CRA, w kolejce {CraMintDaysMin}–{CraMintDaysMax} dni; wybite CRA trafia od razu do stakingu. Spalanie zamienia CRA z powrotem na CRC i SPARK, z oczekiwaniem tak długim jak odblokowanie; gdy rezerwy brakuje, udział CRC jest zmniejszany według pokrycia. Oczekujące wybijanie i spalanie Rewolucja może w całości nie zrealizować: nocne prawdopodobieństwo to wartość, o jaką cena CRA jest poniżej 1, razy {CraRugPerDepeg}; jeśli cena nie jest poniżej 1, nic siLine truncated
courier.odd1,...Paczka dotarła.
courier.odd2,(Trzyma rękę w kieszeni.) Podpisz tutaj.
courier.sign,Podpisz
@@ -954,5 +954,26 @@ asic.st.dead,Przepalony
perp.preview,Wartość nominalna {0} szac. śr. cena {1} (poślizg {2}%)
perp.sim.close,Zamknięcie wartość nominalna {0} szac. śr. cena {1} (poślizg {2}%)
perp.sim.close2,Opłata {0} zwrot ok. {1} CRC (zysk/strata {2})
trade.sim.buy,Zakup da ok. {0} {1} śr. {2} poślizg {3}%
trade.sim.sell,Sprzedaż da ok. {0} {1} śr. {2} poślizg {3}%
trade.sim.buy,Zakup kosztuje ok. {0} {1} śr. {2} poślizg {3}%
trade.amount.unit,Ilość ({0})
trade.fee,Prowizja {0}%
trade.sim.thin,Przekracza płynność puli
news.wipe.down.title,"{0} spada o {1}% w jeden dzień, {2} traderów zlikwidowanych"
news.wipe.down.desc,"W ciągu ostatniego dnia zlikwidowano {1} długich pozycji na kontraktach perp {0}, łącznie {2} kredytów. Fundusz ubezpieczeniowy Poinbase wynosi {3} kredytów."
news.wipe.up.title,"{0} rośnie o {1}% w jeden dzień, {2} traderów zlikwidowanych"
news.wipe.up.desc,"W ciągu ostatniego dnia zlikwidowano {1} krótkich pozycji na kontraktach perp {0}, łącznie {2} kredytów. Fundusz ubezpieczeniowy Poinbase wynosi {3} kredytów."
hot.name,Sprzedawca
hot.intro.CRT,"Ostatnio jest gorąco, a te CRT parzą w ręce. Potrzebuję gotówki, szybko."
hot.intro.PSC,Portfel pewnej kopalni zmienił wczoraj właściciela. PSC jest teraz u mnie i biorę tylko gotówkę.
hot.intro.PONERO,"Okup, w Ponero. Nikt tego nie wyśledzi. Tylko gotówka."
hot.offer,"{0} {1}, warte {2} po dzisiejszym kursie. Daj mi {3} w gotówce, a monety są twoje od razu."
hot.choice.yes,Przyjmij
hot.choice.no,Odmów
hot.say.yes,Umowa stoi.
hot.say.no,Nie tknę tego.
hot.done,Monety wysłane. Nigdy się nie spotkaliśmy.
hot.refused,Inni chętnie wezmą.
hot.nocash,Nie masz nawet gotówki? Daj spokój.
hot.nowallet,"Brak podłączonego portfela, gdzie mam wysłać monety? Daj spokój."
hot.sting,"Nie ruszaj się. Ochrona. Skup kradzionych środków: gotówka zostaje skonfiskowana, a to trafi do twoich akt."
+23 -2
View File
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Контрабанда (высок.)
black.kind.Tech,Высокие технологии (наценка)
nightlog.bm.ready,Чёрный рынок: доставлен товар «{0}»; курьер заглянет после открытия.
guide.web3.title,Руководство по Web3
guide.web3.text,"Банк и торговля: страница банка только для чтения и показывает наличные, аренду и CRC на счёте Poinbase. Страница «Средства» в Poinbase отвечает за ввод и вывод; сначала выбирается монета: CRC можно вводить и выводить через банковский счёт или кошелёк, остальные монеты только через кошелёк. Депозит из банка конвертирует кредиты в CRC на счёте Poinbase; вывод в банк меняет CRC обратно на кредиты и проходит проверку соответствия, оценивающую загрязнение счёта Poinbase. Вывод на кошелёк требует адрес получателя и нескольких подтверждений до зачисления; комиссия за газ фиксирована на обычном уровне и списывается с отправляемой монеты. Неверный формат адреса или контрольная сумма приводят к отказу; адрес с верным форматом, которым никто не пользуется, означает потерю отправленных монет.¶Торговля: PSC означает Probably Stolen Coin — это монета, которую добывают видеокарты и асик-майнеры. Покупка оплачивается в котируемой монете, продажа — в торгуемой монете.¶На торговой странице Web3 можно обменять любые две монеты, всегда через CRC: если CRC с одной стороны, используется один пул, иначе два пула, две комиссии и суммирующееся проскальзывание; предпросмотр показывает получаемое количество, число пулов и потери.§Аппаратные кошельки: ончейн-монеты хранятся на аппаратных кошельках PLEDGER, баланс и загрязнение у каждого свои. Кошелёк — это предмет: перетащите его на торговый терминал, чтобы загрузить. Открывайте его на странице «Кошельки» терминала; подключайте и отключайте в правом верхнем углу терминала. Торговля на странице Web3, магазин и миксер на странице «Серая сеть» используют подключённый кошелёк; без кошелька или без подключения они доступны только для просмотра, а все балансы равны 0. Покупатели, платящие монетами, платят на подключённый кошелёк.¶Платежи (магазин, миксер, пункт обмена Ponero, комиссия за размещение) начинаются со счёта на терминале; введите адрес получателя на кошельке и удерживайте ✓, чтобы подписать. Последние два символа адреса — контрольная сумма, поэтому опечатка в один символ обычно отсекается; изредка адрес случайно оказывается валидным, и монеты уходят на адрес, которым никто не пользуется. Для обмена на DEX также требуется подпись на кошельке.¶Poinbase — кастодиальный аккаунт; депозит отправляется с кошелька на адрес депозита Poinbase (принимаются PSC, CRC, CRT, CRA и SPARK), вывод запускается на странице «Средства» в Poinbase. «Обозреватель» на странице «Кошельки» позволяет искать переводы по адресу и показывает только реально произошедшие переводы (ваши кошельки, выводы, доход майнеров). Дополнительные аппаратные кошельки продаёт Доктор Джексон; перетащите кошелёк на торговый терминал, чтобы добавить его (до {WalletMax}). В магазине есть варианты подешевле. Ненужный кошелёк можно уничтожить на странице «КошелькиLine truncated
guide.web3.text,"Банк и торговля: страница банка только для чтения и показывает наличные, аренду и CRC на счёте Poinbase. Страница «Средства» в Poinbase отвечает за ввод и вывод; сначала выбирается монета: CRC можно вводить и выводить через банковский счёт или кошелёк, остальные монеты только через кошелёк. Депозит из банка конвертирует кредиты в CRC на счёте Poinbase; вывод в банк меняет CRC обратно на кредиты и проходит проверку соответствия, оценивающую загрязнение счёта Poinbase. Вывод на кошелёк требует адрес получателя и нескольких подтверждений до зачисления; комиссия за газ фиксирована на обычном уровне и списывается с отправляемой монеты. Неверный формат адреса или контрольная сумма приводят к отказу; адрес с верным форматом, которым никто не пользуется, означает потерю отправленных монет.¶Торговля: PSC означает Probably Stolen Coin — это монета, которую добывают видеокарты и асик-майнеры. И покупка, и продажа вводятся как количество торгуемой монеты; в предпросмотре видно, сколько котируемой монеты уйдёт или придёт, средняя цена включает комиссию, проскальзывание — нет.¶На торговой странице Web3 можно обменять любые две монеты, всегда через CRC: если CRC с одной стороны, используется один пул, иначе два пула, две комиссии и суммирующееся проскальзывание; предпросмотр показывает получаемое количество, число пулов и потери.§Аппаратные кошельки: ончейн-монеты хранятся на аппаратных кошельках PLEDGER, баланс и загрязнение у каждого свои. Кошелёк — это предмет: перетащите его на торговый терминал, чтобы загрузить. Открывайте его на странице «Кошельки» терминала; подключайте и отключайте в правом верхнем углу терминала. Торговля на странице Web3, магазин и миксер на странице «Серая сеть» используют подключённый кошелёк; без кошелька или без подключения они доступны только для просмотра, а все балансы равны 0. Покупатели, платящие монетами, платят на подключённый кошелёк.¶Платежи (магазин, миксер, пункт обмена Ponero, комиссия за размещение) начинаются со счёта на терминале; введите адрес получателя на кошельке и удерживайте ✓, чтобы подписать. Последние два символа адреса — контрольная сумма, поэтому опечатка в один символ обычно отсекается; изредка адрес случайно оказывается валидным, и монеты уходят на адрес, которым никто не пользуется. Для обмена на DEX также требуется подпись на кошельке.¶Poinbase — кастодиальный аккаунт; депозит отправляется с кошелька на адрес депозита Poinbase (принимаются PSC, CRC, CRT, CRA и SPARK), вывод запускается на странице «Средства» в Poinbase. «Обозреватель» на странице «Кошельки» позволяет искать переводы по адресу и показывает только реально произошедшие переводы (ваши кошельки, выводы, доход майнеров). Дополнительные аппаратные кошельки продаёт Доктор Джексон; перетащите кошелёк на торговый терминал, чтобы добаLine truncated
courier.odd1,...Посылка пришла.
courier.odd2,(Его рука остаётся в кармане.) Подпиши здесь.
courier.sign,Подписать
@@ -954,5 +954,26 @@ asic.st.dead,Сгорел
perp.preview,Номинал {0} ожид. ср. цена {1} (проскальзывание {2}%)
perp.sim.close,Закрытие номинал {0} ожид. ср. цена {1} (проскальзывание {2}%)
perp.sim.close2,Комиссия {0} вернётся около {1} CRC (П/У {2})
trade.sim.buy,Покупка даст около {0} {1} ср. {2} проскальзывание {3}%
trade.sim.sell,Продажа даст около {0} {1} ср. {2} проскальзывание {3}%
trade.sim.buy,Покупка обойдётся примерно в {0} {1} ср. {2} проскальзывание {3}%
trade.amount.unit,Количество ({0})
trade.fee,Комиссия {0}%
trade.sim.thin,Превышает ликвидность пула
news.wipe.down.title,"{0} упал на {1}% за день, ликвидировано трейдеров: {2}"
news.wipe.down.desc,За прошедшие сутки ликвидировано {1} длинных позиций по бессрочным контрактам {0} на общую сумму {2} кредитов. Страховой фонд Poinbase составляет {3} кредитов.
news.wipe.up.title,"{0} вырос на {1}% за день, ликвидировано трейдеров: {2}"
news.wipe.up.desc,За прошедшие сутки ликвидировано {1} коротких позиций по бессрочным контрактам {0} на общую сумму {2} кредитов. Страховой фонд Poinbase составляет {3} кредитов.
hot.name,Продавец
hot.intro.CRT,"Сейчас неспокойно, а этот CRT жжёт руки. Мне нужны наличные, быстро."
hot.intro.PSC,"Кошелёк одной майнинг-фермы прошлой ночью сменил владельца. PSC теперь у меня, и я беру только наличные."
hot.intro.PONERO,"Выкуп, в Ponero. Никто не отследит. Только наличные."
hot.offer,"{0} {1}, по сегодняшнему курсу это {2}. Дайте мне {3} наличными, и монеты сразу ваши."
hot.choice.yes,Взять
hot.choice.no,Отказаться
hot.say.yes,По рукам.
hot.say.no,Я в это не полезу.
hot.done,Монеты отправлены. Мы не встречались.
hot.refused,Найдутся другие.
hot.nocash,Даже наличных нет? Забудьте.
hot.nowallet,"Кошелёк не подключён, куда слать монеты? Забудьте."
hot.sting,"Не двигаться. Служба безопасности. Скупка краденых средств: наличные изъяты, это пойдёт в ваше досье."
+23 -2
View File
@@ -246,7 +246,7 @@ black.kind.Contraband.3,违禁品(高)
black.kind.Tech,高科技物品(加价)
nightlog.bm.ready,商店:{0} 到货,开店后会有快递员上门。
guide.web3.title,Web3 手册
guide.web3.text,"银行与交易:银行页只读,显示现金、房租和 Poinbase 账户里的 CRC。Poinbase 的资金页管入金和出金,先选币种:CRC 可以走银行账户或钱包,其他币只能走钱包。从银行入金把信用点换成 Poinbase 账户里的 CRC;出金到银行把 CRC 换回信用点,要过合规审查,审查看 Poinbase 账户的污点。出金到钱包要填收款地址,等几次确认才到账,Gas 费固定按普通档、从转出的币里扣;地址格式或校验位不对会被拒绝,格式对但没人用的地址,币转过去就没了。¶交易:PSC 全称 Probably Stolen Coin,是显卡和矿机挖出的币。买入按计价币的数量支付,卖出按所交易币的数量卖出。¶Web3 交易页可以任选两种币互换,实际都经 CRC 中转:CRC 在一端走一个池,否则走两个池,付两次手续费、滑点叠加,预览里会显示得到的数量、经过的池数和损耗。§硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和污点分别计算。钱包是一件物品,拖到交易终端上加载;在终端的钱包页打开,在终端右上角连接或断开。Web3 页的交易和灰网页的商店、混币器用已连接的钱包,没有钱包或没有连接时只能看,余额都是 0;用币付款的顾客也进已连接的钱包。¶付款(商店、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。¶Poinbase 是托管账户,入金要从钱包转到它的充值地址(PSC、CRC、CRT、CRA、SPARK 都收),出金在 Poinbase 的资金页发起。钱包页的浏览器可以按地址查转账记录,只显示真实发生的转账(你的钱包、出金、矿机收益)。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 {WalletMax} 个;商店里也有更便宜的。不要的钱包可以在钱包页销毁,里面的币永久丢失,之后发到这个地址的币也丢了。¶转账要付 Gas 费,分慢、普通、快三档,Gas 价格大约一周一个起落;网络拥堵时 Gas 费变贵,慢档可能被挤出内存池。转账前核对完整地址。§质押:把 CRA 质押进革命军质押池每天有日息,利息并入本金;取出要先申请,等四天才到账,等待期间没有利息,也不能提前拿。CRA 是部分抵押的:每份 CRA 由革命军持有的 CRC 储备和平衡代币 SPARK 共同支撑,储备覆盖率和抵押率显示在质押页。质押利息以没有抵押的新 CRA 付出,会稀释储备覆盖率,质押的人越多稀释越快;覆盖率太低革命军会降息。革命军有时会挪用储备,先有风声,那是预兆;挪用后覆盖率跌破 {CraCrashRatio:%} 就崩盘:三天内 CRA 归零,四天的解锁期来不及;没跌破只是折价,劫掠上层带来的资金会慢慢把储备补回来。¶官方铸造:存入 CRC 和 SPARK(比例按当前抵押率,界面预览需要多少)铸造 CRA,排 {CraMintDaysMin}~{CraMintDaysMax} 天,铸出的 CRA 直接进质押;销毁把 CRA 换回 CRC 和 SPARK,等待和解锁期一样长,储备不足时 CRC 份额按覆盖率打折。排队的铸造和销毁,官方可能整笔不兑现:每晚的概率是 CRA 价格低于 1 的幅度乘以 {CraRugPerDepeg},价格不低于 1 就不会。¶质押可以存 CRA、CRC、CRT、SPARK:后三种先在二级市场按市价换成 CRA(经 CRC 中转,付手续费和滑点)再质押。SPARK 价格波动很大,崩盘时会跟着暴跌。质押、铸造、销毁都是合约调用,要在钱包上签名。§矿机:RatDigg 矿机(M1 / M2 / M3)是独立的机器,算力比显卡大得多、耗电更省,要放电池才挖,可以放模块,不占矿架槽位;只在商店的矿机商那里有,要黑市声望(M1 {AsicRepM1}、M2 {AsicRepM2}、M3 {AsicRepM3}),偶尔有二手的。烧毁后须按顺序把电子元件拖到它身上修复,修复后健康降低 {AsicRepairHealthCut}。第 {EraMin} 到 {EraMax} 天之间会有一次""矿机时代"",提前几天上报纸预告,之后大矿场的耗电成本砍半,全网算力涨上去,显卡矿工的收益被摊薄,低档显卡几乎不赚钱,矿机受影响较小。¶收款地址:每台矿机(矿架和 ASIC 矿机)在自己的窗口里设置收款地址,挖矿产出每晚按算力占比发到这个地址,两台矿机可以发给两个地址。默认没设置,没设置或地址对应的钱包已销毁,这一份产出就丢了;换了钱包要记得改地址。§永续合约:Poinbase 的""永续""页,用账户里的 CRC 当保证金,PSC 最高 {PerpPscLev} 倍、SPARK 最高 {PerpSparkLev} 倍,只支持逐仓,同一时间只有一Line truncated
guide.web3.text,"银行与交易:银行页只读,显示现金、房租和 Poinbase 账户里的 CRC。Poinbase 的资金页管入金和出金,先选币种:CRC 可以走银行账户或钱包,其他币只能走钱包。从银行入金把信用点换成 Poinbase 账户里的 CRC;出金到银行把 CRC 换回信用点,要过合规审查,审查看 Poinbase 账户的污点。出金到钱包要填收款地址,等几次确认才到账,Gas 费固定按普通档、从转出的币里扣;地址格式或校验位不对会被拒绝,格式对但没人用的地址,币转过去就没了。¶交易:PSC 全称 Probably Stolen Coin,是显卡和矿机挖出的币。买入和卖出都填所交易币的数量,预览显示要付或能得到的计价币,均价含手续费,滑点不含。¶Web3 交易页可以任选两种币互换,实际都经 CRC 中转:CRC 在一端走一个池,否则走两个池,付两次手续费、滑点叠加,预览里会显示得到的数量、经过的池数和损耗。§硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和污点分别计算。钱包是一件物品,拖到交易终端上加载;在终端的钱包页打开,在终端右上角连接或断开。Web3 页的交易和灰网页的商店、混币器用已连接的钱包,没有钱包或没有连接时只能看,余额都是 0;用币付款的顾客也进已连接的钱包。¶付款(商店、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。¶Poinbase 是托管账户,入金要从钱包转到它的充值地址(PSC、CRC、CRT、CRA、SPARK 都收),出金在 Poinbase 的资金页发起。钱包页的浏览器可以按地址查转账记录,只显示真实发生的转账(你的钱包、出金、矿机收益)。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 {WalletMax} 个;商店里也有更便宜的。不要的钱包可以在钱包页销毁,里面的币永久丢失,之后发到这个地址的币也丢了。¶转账要付 Gas 费,分慢、普通、快三档,Gas 价格大约一周一个起落;网络拥堵时 Gas 费变贵,慢档可能被挤出内存池。转账前核对完整地址。§质押:把 CRA 质押进革命军质押池每天有日息,利息并入本金;取出要先申请,等四天才到账,等待期间没有利息,也不能提前拿。CRA 是部分抵押的:每份 CRA 由革命军持有的 CRC 储备和平衡代币 SPARK 共同支撑,储备覆盖率和抵押率显示在质押页。质押利息以没有抵押的新 CRA 付出,会稀释储备覆盖率,质押的人越多稀释越快;覆盖率太低革命军会降息。革命军有时会挪用储备,先有风声,那是预兆;挪用后覆盖率跌破 {CraCrashRatio:%} 就崩盘:三天内 CRA 归零,四天的解锁期来不及;没跌破只是折价,劫掠上层带来的资金会慢慢把储备补回来。¶官方铸造:存入 CRC 和 SPARK(比例按当前抵押率,界面预览需要多少)铸造 CRA,排 {CraMintDaysMin}~{CraMintDaysMax} 天,铸出的 CRA 直接进质押;销毁把 CRA 换回 CRC 和 SPARK,等待和解锁期一样长,储备不足时 CRC 份额按覆盖率打折。排队的铸造和销毁,官方可能整笔不兑现:每晚的概率是 CRA 价格低于 1 的幅度乘以 {CraRugPerDepeg},价格不低于 1 就不会。¶质押可以存 CRA、CRC、CRT、SPARK:后三种先在二级市场按市价换成 CRA(经 CRC 中转,付手续费和滑点)再质押。SPARK 价格波动很大,崩盘时会跟着暴跌。质押、铸造、销毁都是合约调用,要在钱包上签名。§矿机:RatDigg 矿机(M1 / M2 / M3)是独立的机器,算力比显卡大得多、耗电更省,要放电池才挖,可以放模块,不占矿架槽位;只在商店的矿机商那里有,要黑市声望(M1 {AsicRepM1}、M2 {AsicRepM2}、M3 {AsicRepM3}),偶尔有二手的。烧毁后须按顺序把电子元件拖到它身上修复,修复后健康降低 {AsicRepairHealthCut}。第 {EraMin} 到 {EraMax} 天之间会有一次""矿机时代"",提前几天上报纸预告,之后大矿场的耗电成本砍半,全网算力涨上去,显卡矿工的收益被摊薄,低档显卡几乎不赚钱,矿机受影响较小。¶收款地址:每台矿机(矿架和 ASIC 矿机)在自己的窗口里设置收款地址,挖矿产出每晚按算力占比发到这个地址,两台矿机可以发给两个地址。默认没设置,没设置或地址对应的钱包已销毁,这一份产出就丢了;换了钱包要记得改地址。§永续合约:Poinbase 的""永续""页,用账户里的 CRC 当保证金,PSC 最高 {PerpPscLev} 倍、SPARK 最高 {PerpSparkLLine truncated
courier.odd1,……东西到了。
courier.odd2,"(他的手一直放在口袋里)在这儿签个字。"
courier.sign,签收
@@ -953,5 +953,26 @@ asic.st.dead,已烧毁
perp.preview,名义价值 {0} 预估均价 {1}(滑点 {2}%)
perp.sim.close,平仓 名义价值 {0} 预估均价 {1}(滑点 {2}%)
perp.sim.close2,手续费 {0} 约回 {1} CRC(盈亏 {2})
trade.sim.buy,买入约得 {0} {1} 均价 {2} 滑点 {3}%
trade.sim.sell,卖出约得 {0} {1} 均价 {2} 滑点 {3}%
trade.sim.buy,买入约需 {0} {1} 均价 {2} 滑点 {3}%
trade.amount.unit,数量({0})
trade.fee,手续费 {0}%
trade.sim.thin,超出池子流动性
news.wipe.down.title,{0} 单日下跌 {1}%,{2} 人爆仓
news.wipe.down.desc,过去一天,{0} 永续合约有 {1} 个多头仓位爆仓,爆仓总额 {2} 信用点。Poinbase 保险基金余额 {3} 信用点。
news.wipe.up.title,{0} 单日上涨 {1}%,{2} 人爆仓
news.wipe.up.desc,过去一天,{0} 永续合约有 {1} 个空头仓位爆仓,爆仓总额 {2} 信用点。Poinbase 保险基金余额 {3} 信用点。
hot.name,出货人
hot.intro.CRT,最近风声紧,这批 CRT 留在手里烫手,得尽快换成现金。
hot.intro.PSC,有家矿场的钱包昨晚换了主人。PSC 在我这儿,我只要现金。
hot.intro.PONERO,一笔赎金,Ponero,查不到来路。我只收现金。
hot.offer,{0} {1},按现价值 {2}。给我 {3} 现金,币当场转给你。
hot.choice.yes,收下
hot.choice.no,不要
hot.say.yes,成交。
hot.say.no,这钱我不碰。
hot.done,币转过去了。我们没见过。
hot.refused,有的是人要。
hot.nocash,现金都拿不出来?那算了。
hot.nowallet,钱包都没连上,币往哪儿转?算了。
hot.sting,别动,治安部。收购赃款,现金没收,这笔会记进你的档案。
+8
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Decentralized.Domain;
@@ -329,6 +330,13 @@ namespace Decentralized
else if (e.Kind == "adl") ps.AddNightLog(L.T("nightlog.perp.adl", who, Fmt.Credits(e.Amount)), "cc7755");
else if (e.Kind == "interest") ps.AddNightLog(L.T("nightlog.perp.interest", Fmt.Credits(e.Amount)), "cc7755");
else if (e.Kind == "repaid") ps.AddNightLog(L.T("nightlog.perp.repaid", Fmt.Credits(e.Amount)), "cc7755");
else if (e.Kind == "wipe")
{
// 单日大涨大跌:全网爆仓上报纸(人数和金额含玩家被强平的仓位)
string dir = e.Long ? "down" : "up", pct = Math.Abs(e.Move * 100).ToString("0", CultureInfo.InvariantCulture), n = Fmt.Credits(e.Count);
News.Show("pd_news_wipe_" + e.Product + "_" + day, L.T("news.wipe." + dir + ".title", e.Product, pct, n), L.T("news.wipe." + dir + ".desc", e.Product, n, Fmt.Credits(e.Amount), Fmt.Credits(d.Perps.InsuranceFund)), 2);
Log.Info($"爆仓新闻:{e.Product} {e.Move:+0.000;-0.000},{e.Count} 人,{e.Amount:0} 信用点,保险基金 {d.Perps.InsuranceFund:0}");
}
}
foreach (var e in stakeEvents)
{
+11 -1
View File
@@ -24,7 +24,8 @@ namespace Decentralized
/// <summary>一局的 mod 状态。整体序列化成 JSON 存进游戏的 mod 存档数据;显卡的健康度等存在显卡物品的标签上。</summary>
public sealed class SaveData
{
public int Version = 1;
/// <summary>存档数据的版本:2 起主池手续费、保险基金用新的数值。</summary>
public int Version = 2;
public int Day;
public Rng Rng = new Rng((ulong)DateTime.UtcNow.Ticks);
public Market Market;
@@ -142,6 +143,15 @@ namespace Decentralized
if (Data.Market == null || Data.Market.DexPool(Assets.SPARK) == null) Data.Market = Market.CreateDefault(StoreStation.GetDayCounter());
// 旧存档里的商家地址没有校验位:换成合法地址
foreach (var s in Data.Black.Sellers) if (!ChainAddress.Valid(s.Name)) s.Name = ChainAddress.Make(Data.Rng.NextUInt());
if (Data.Version < 2)
{
// 主池手续费存在池子里,改成新值,池深按新数值重设(侧池夜里重设);保险基金按新的规模补足
Data.Market.Main.Fee = Tuning.ExchangeFee;
Data.Market.Main.SetPrice(Data.Market.Price, Tuning.PoolDepth(StoreStation.GetDayCounter()));
Data.Perps.InsuranceFund = Math.Max(Data.Perps.InsuranceFund, Tuning.PerpFund0);
Data.Version = 2;
Log.Info("存档数据升级到版本 2:主池手续费、保险基金");
}
if (Data.Story == null) Data.Story = new StoryMods();
StoryMods.Current = Data.Story;
Log.Info($"状态已载入(第 {Data.Day} 天,PSC {Data.Market.Price:0.00})");
+17 -15
View File
@@ -309,9 +309,9 @@ namespace Decentralized
private static bool ParseAmount(out double v) =>
double.TryParse((_amount ?? "").Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out v) && v > 0;
private static void AmountRow(CustomUIBuilder b, bool label = true)
private static void AmountRow(CustomUIBuilder b, bool label = true, string unit = null)
{
if (label) b.AddLabel(L.T("trade.amount"));
if (label) b.AddLabel(unit == null ? L.T("trade.amount") : L.T("trade.amount.unit", unit));
b.BeginPanel(RightW - 30f, -1f, TextAnchor.MiddleCenter, 0f, 0f);
_clear.Add(b.Last.image);
b.AddInput("0", _amount, s => { _amount = s; RefreshLive(); }, "amount", s => { _amount = s; RefreshLive(); });
@@ -427,7 +427,7 @@ namespace Decentralized
foreach (var pool in Session.Data.Market.Pools.Where(x => x.Venue == venue))
{
var p = pool;
b.AddLabel(L.T("trade.pair", p.Base, p.Quote, L.T("venue." + p.Venue)) + " " + L.T("trade.price", Fmt.Num(p.Price)));
b.AddLabel(L.T("trade.pair", p.Base, p.Quote, L.T("venue." + p.Venue)) + " " + L.T("trade.price", Fmt.Num(p.Price)) + " " + L.T("trade.fee", (p.Fee * 100).ToString("0.0#", CultureInfo.InvariantCulture)));
LiveLabel(b, () => SpotPreview(p, true), "trade_preview_dim");
LiveLabel(b, () => SpotPreview(p, false), "trade_preview_dim");
b.BeginRow(4f);
@@ -437,15 +437,15 @@ namespace Decentralized
}
}
/// <summary>现货模拟:按输入数量算买入或卖出能得到多少、平均成交价、相对现价的滑点(不改池子)。买入数量是计价币,卖出数量是标的币。</summary>
/// <summary>现货模拟(不改池子):输入的数量是标的币;买入算要付多少计价币,卖出算能得到多少。均价含手续费,滑点不含手续费。</summary>
private static string SpotPreview(Pool p, bool buy)
{
if (!ParseAmount(out double v)) return "";
double got = buy ? p.BaseOut(v) : p.QuoteOut(v);
if (got <= 0) return "";
double avg = buy ? v / got : got / v;
double slip = buy ? avg / p.Price - 1 : 1 - avg / p.Price;
return L.T(buy ? "trade.sim.buy" : "trade.sim.sell", Fmt.Num(got), buy ? p.Base : p.Quote, Fmt.Num(avg), (Math.Max(0, slip) * 100).ToString("0.0", CultureInfo.InvariantCulture));
double quote = buy ? p.QuoteIn(v) : p.QuoteOut(v);
if (quote <= 0 || double.IsInfinity(quote)) return buy ? L.T("trade.sim.thin") : "";
double avg = quote / v, net = buy ? avg * (1 - p.Fee) : avg / (1 - p.Fee);
double slip = buy ? net / p.Price - 1 : 1 - net / p.Price;
return L.T(buy ? "trade.sim.buy" : "trade.sim.sell", Fmt.Num(quote), p.Quote, Fmt.Num(avg), (Math.Max(0, slip) * 100).ToString("0.00", CultureInfo.InvariantCulture));
}
private static readonly float[] HoldWBase = new[] { 80f, 100f, 110f, 110f };
@@ -499,7 +499,7 @@ namespace Decentralized
}, r =>
{
r.AddHeader(L.T("trade.h"));
AmountRow(r);
AmountRow(r, unit: d.Market.Main.Base);
TradeRows(r, venue);
});
}
@@ -1143,7 +1143,7 @@ namespace Decentralized
for (int t = 0; t < 3; t++)
{
int tier = t;
r.AddButton(L.T("intel.tip.buy", (int)Math.Round(Tuning.IntelTipAcc[t] * 100), Fmt.Num(Tuning.IntelTipPrice[t] * m.MaxLoss)), () => IntelBuyTip(mk, tier));
r.AddButton(L.T("intel.tip.buy", (int)Math.Round(Tuning.IntelTipAcc[t] * 100), Fmt.Num(Tuning.IntelTipPrice[t] * m.Loss)), () => IntelBuyTip(mk, tier));
r.Last?.SetPreferredSize(RightW - 30f, 28f * F);
if (t < 2) r.AddSpace(2f);
}
@@ -1179,7 +1179,7 @@ namespace Decentralized
private static void IntelBuyTip(PredictMarket m, int tier)
{
var d = Session.Data;
double price = Tuning.IntelTipPrice[tier] * m.MaxLoss;
double price = Tuning.IntelTipPrice[tier] * m.Loss;
if (d.Hot.Avail(Assets.CRT) + 1e-9 < price) { _message = L.T("intel.err.funds"); Open(); return; }
_message = L.T("hw.wait");
Open();
@@ -1961,7 +1961,8 @@ namespace Decentralized
double mult = MultFor(g.Key);
foreach (var it in g.Items.Take(n))
{
var s = d.Black.List(g.Id, g.Model, g.FakeOf, g.Health, g.Ref, mult, pw, asset, day, Session.Price);
int heat = it.IsTag("STOLEN_VALUE_INT") ? it.GetTagReadonly("STOLEN_VALUE_INT").GetInt() : 0;
var s = d.Black.List(g.Id, g.Model, g.FakeOf, g.Health, g.Ref, mult, pw, asset, day, Session.Price, heat);
if (s == null) { fail++; continue; }
it.Destroy();
ok++;
@@ -2706,13 +2707,14 @@ namespace Decentralized
Open();
}
/// <summary>交易:Poinbase 是托管账户,直接成交。</summary>
/// <summary>交易:Poinbase 是托管账户,直接成交。输入的数量是标的币:买入按池子反算要付的计价币。</summary>
private static void Trade(Pool p, bool buy)
{
if (!ReadAmount(out double v)) return;
var w = Session.Data.Poinbase;
if (buy) v = p.QuoteIn(v);
string pay = buy ? p.Quote : p.Base;
if (w.Avail(pay) + 1e-9 < v) { _message = L.T(frozenPay(w, pay) ? "msg.frozen" : "msg.balance"); Open(); return; }
if (double.IsInfinity(v) || w.Avail(pay) + 1e-9 < v) { _message = L.T(frozenPay(w, pay) ? "msg.frozen" : "msg.balance"); Open(); return; }
DoTrade(p, buy, v, w);
}
+90 -28
View File
@@ -348,7 +348,7 @@ internal static class Program
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);
var big = Market.CreateDefault(1).Quote(Assets.CRC, Assets.SPARK, Tuning.PoolDepth(1) * Tuning.SparkDepthShare / 4);
Check(big.Impact > 0.2, $"SPARK 池比较薄,大单滑点大:{big.Impact:P0}");
});
@@ -509,8 +509,8 @@ internal static class Program
var w = new Wallet { Taint = 500, Basis = 1000 };
w.Add(Assets.CRC, 1000);
var r = new Exchange().Cashout(w, 1000, px, 1, 200, false, new Rng((ulong)i));
if (r.Outcome == AmlOutcome.Heavy) { heavy++; crime = r.Crime; Check(Near(r.Received, 998 - 500, 1e-6), "重度:没收污点部分"); }
else Check(Near(r.Received, 998, 1e-6) && r.Tax == 0, "未命中:全额到账;本金不计税");
if (r.Outcome == AmlOutcome.Heavy) { heavy++; crime = r.Crime; Check(Near(r.Received, 1000 * (1 - Tuning.ExchangeFee) - 500, 1e-6), "重度:没收污点部分"); }
else Check(Near(r.Received, 1000 * (1 - Tuning.ExchangeFee), 1e-6) && r.Tax == 0, "未命中:全额到账;本金不计税");
}
Check(Near(heavy / 1000.0, 0.75, 0.04) && crime == 500, $"污点 50% 时约 75% 重度命中,罪证 = 污点额:{heavy / 1000.0:P0}");
var light = new Wallet { Taint = 150 };
@@ -523,7 +523,7 @@ internal static class Program
lr = new Exchange().Cashout(w, 1000, px, 1, 200, false, new Rng(i));
}
Check(lr.Outcome == AmlOutcome.Light && lr.Crime == 0 && Near(lr.Confiscated, 150, 1e-6), "污点 15%:轻度命中,没收 150、不记罪证");
Check(Near(lr.Tax, (998 - 150) * Tuning.TaxRate, 1e-6), "成本为 0 时到账部分全额计税");
Check(Near(lr.Tax, (1000 * (1 - Tuning.ExchangeFee) - 150) * Tuning.TaxRate, 1e-6), "成本为 0 时到账部分全额计税");
var ex = new Exchange();
var big = new Wallet();
big.Add(Assets.CRC, 4000);
@@ -890,6 +890,12 @@ internal static class Program
Check(s2.State == SaleState.Sold, "没到放款日不动");
b2.Night(5, false, w2, new Rng(9), 0, price);
Check(s2.State == SaleState.Paid && Near(w2.Get(Assets.CRT), crt0 + s2.Proceeds, 1e-9) && Near(w2.Taint, s2.Taint, 1e-9) && (s2.Taint == 0 || Near(s2.Taint, s2.Proceeds * BlackMarket.TaintRatio(0.8), 1e-6)), "放款:货款进钱包,污点按比例");
// 赃物:货款按热度带污点,不走随机
var bh = new BlackMarket();
var wh = new Wallet(); wh.Add(Assets.CRT, 1000);
var sh = bh.List("c4", null, null, 0, 500, 0.8, wh, Assets.CRT, 1, price, 60);
bh.Night(2, false, wh, new Rng(7), 0, price);
Check(sh.State == SaleState.Sold && Near(sh.Taint, sh.Proceeds * 0.6, 1e-9), $"热度 60% 的赃物:污点 {sh.Taint:0} = 货款 × 60%");
// 假卡被看穿
int fake = 0;
for (int i = 0; i < 400; i++)
@@ -1091,9 +1097,9 @@ internal static class Program
{
Func<string, double> pr = a => a == Assets.PSC ? 100 : 1;
Wallet NewAcct(double crc, double taint = 0) { var w = new Wallet { Address = "pb" }; w.Add(Assets.CRC, crc); w.Taint = taint; w.Basis = crc; return w; }
// 滑点:名义价值占池深的比例,买入往上、卖出往下
// 滑点:名义价值占永续深度的比例,买入往上、卖出往下
var bs = new PerpBook();
double pool = Tuning.PoolDepth(1);
double pool = Tuning.PerpDepth(1);
Check(Math.Abs(bs.Exec(100, 2000, true, 1) - 100 * (1 + 2000 / (Tuning.PerpDepthMult * pool))) < 1e-9 && bs.Exec(100, 2000, false, 1) < 100 && bs.Exec(100, 1e12, true, 1) <= 150.0001, "滑点:买入上滑、卖出下滑,封顶 50%");
// 滑点吃掉了强平线之间的空间:开仓被拒
var bt = new PerpBook { DepthMult = 0.05 }; var at = NewAcct(5000);
@@ -1132,7 +1138,7 @@ internal static class Program
b4.Open(a4, "SPARK", true, 1000, 3, 10, 1, pr);
double crc4 = a4.Get(Assets.CRC);
b4.Night(2, new Dictionary<string, double> { ["SPARK"] = 5 }, a4, pr);
Check(b4.Positions.Count == 0 && b4.Debt > 0 && b4.InsuranceFund < 1 + Tuning.PerpFundDrift, $"大跌穿仓,基金见底,欠款 {b4.Debt:0}");
Check(b4.Positions.Count == 0 && b4.Debt > 0 && b4.InsuranceFund < 1, $"大跌穿仓,基金见底,欠款 {b4.Debt:0}");
Check(b4.Open(a4, "SPARK", true, 10, 1, 5, 2, pr) == PerpResult.Debt, "有欠款不能开仓");
double debt0 = b4.Debt; a4.Add(Assets.CRC, 100);
b4.Night(3, new Dictionary<string, double> { ["SPARK"] = 5 }, a4, pr);
@@ -1156,6 +1162,19 @@ internal static class Program
b7.Night(2, new Dictionary<string, double> { ["SPARK"] = 10 }, a7, pr);
var ev7 = b7.Night(3, new Dictionary<string, double> { ["SPARK"] = 3 }, a7, pr);
Check(ev7.Any(e => e.Kind == "adl") && b7.Positions.Count == 0, "基金见底,盈利空头被自动减仓");
// NPC 爆仓:小行情爆仓的剩余保证金进基金,大行情穿仓吃基金;涨跌达到新闻线记一条 wipe(含玩家)
double oi = PerpBook.NpcOi("PSC", 30);
Check(PerpBook.NpcFlow(0.02, oi, out double l2) > 0 && l2 > 0 && PerpBook.NpcFlow(-0.04, oi, out _) > 0, $"2%–4% 的行情基金净流入 {PerpBook.NpcFlow(0.02, oi, out _):0}");
Check(PerpBook.NpcFlow(0.25, oi, out double l25) < 0 && Math.Abs(l25 - oi) < 1e-6, $"25% 的行情亏损一侧全部爆仓、基金净流出 {PerpBook.NpcFlow(0.25, oi, out _):0}");
Check(-PerpBook.NpcFlow(0.25, oi, out _) < Tuning.PerpFund0 / 5, "一次 25% 的行情吃不掉基金初值的五分之一");
var b8 = new PerpBook { DepthMult = 1e12 }; var a8 = NewAcct(5000);
b8.Night(1, new Dictionary<string, double> { ["PSC"] = 100 }, a8, pr);
b8.Open(a8, "PSC", true, 1000, 5, 100, 1, pr);
var ev8 = b8.Night(2, new Dictionary<string, double> { ["PSC"] = 85 }, a8, pr);
var wipe = ev8.FirstOrDefault(e => e.Kind == "wipe");
PerpBook.NpcFlow(-0.15, PerpBook.NpcOi("PSC", 2), out double npc8);
Check(wipe != null && wipe.Long && wipe.Count == (int)Math.Round(npc8 / Tuning.PerpNpcAvgPos) + 1 && wipe.Amount > npc8, $"−15%:多头爆仓 {wipe?.Count} 人(含玩家)");
Check(!b8.Night(3, new Dictionary<string, double> { ["PSC"] = 87 }, a8, pr).Any(e => e.Kind == "wipe"), "小行情不上新闻");
});
Test("CRA 质押池:计息、解锁期、污点随币、螺旋", () =>
@@ -1277,22 +1296,63 @@ internal static class Program
Check(o.State == OrderState.Refunded && Math.Abs(b.Get(Assets.CRT) - bBefore) < 1e-6 && a.Get(Assets.CRT) == aBefore, $"骗子托管退款回 B:{o.State}");
});
Test("Poinbase 现货:按标的数量反算要付的计价币", () =>
{
var m = Market.CreateDefault(38);
var p = m.Main;
double q = p.QuoteIn(2);
Check(Near(p.BaseOut(q), 2, 1e-9), $"买 2 PSC 要付 {q:0.00} CRC,反算回来正好 2 个");
double impact = q * (1 - p.Fee) / 2 / p.Price - 1;
Check(impact > 0 && impact < 0.0005, $"买 2 PSC 的滑点(不含手续费){impact * 100:0.000}% < 0.05%");
double sell = 1 - p.QuoteOut(200) / (1 - p.Fee) / 200 / p.Price;
Check(sell > 0.01 && sell < 0.04, $"卖 200 PSC 的滑点 {sell * 100:0.0}%");
Check(double.IsPositiveInfinity(p.QuoteIn(p.BaseReserve)) && p.QuoteIn(0) == 0, "超出储备为无穷,0 个为 0");
});
Test("收黑币:事件对应币种、报价、收下后的污点", () =>
{
var rng = new Rng(3);
int crt = 0, psc = 0, pon = 0;
for (int i = 0; i < 4000; i++)
{
string a1 = HotCoins.Pick(new[] { MarketEvent.GangWar }, false, rng);
if (a1 == Assets.CRT) crt++; else if (a1 != null) psc++;
if (HotCoins.Pick(new MarketEvent[0], true, rng) == Assets.Ponero) pon++;
}
Check(psc == 0 && Math.Abs(crt / 4000.0 - Tuning.HotEventChance) < 0.03, $"帮派火并期间只有 CRT:{crt}/4000");
Check(Math.Abs(pon / 4000.0 - Tuning.HotPoneroChance) < 0.015, $"兑换处开放后的 Ponero:{pon}/4000");
Check(HotCoins.Pick(new[] { MarketEvent.RevRaidUpper }, false, new Rng(1)) is string sa ? sa == Assets.PSC : true, "革命军袭击上层是 PSC");
Check(HotCoins.Pick(new MarketEvent[0], false, rng) == null, "没有事件、兑换处没开:没人上门");
var o = HotCoins.Make(Assets.CRT, 1, 500, false, new Rng(9));
Check(o.Value >= 500 * Tuning.HotValueMinRents && o.Value <= 500 * Tuning.HotValueMaxRents && o.Cash >= o.Value * Tuning.HotCutMin - 1 && o.Cash <= o.Value * Tuning.HotCutMax + 1, $"报价:市值 {o.Value:0},现金 {o.Cash}");
var w = new Wallet();
HotCoins.Receive(w, o);
Check(Near(w.Get(Assets.CRT), o.Qty, 1e-9) && Near(w.Taint, o.Value, 1e-9) && Near(w.Basis, o.Cash, 1e-9), "CRT 全额带污点,成本是付的现金");
var op = HotCoins.Make(Assets.Ponero, 50, 500, false, new Rng(9));
var wp = new Wallet();
HotCoins.Receive(wp, op);
Check(wp.Taint == 0 && op.Cash >= op.Value * Tuning.HotPoneroCutMin - 1, "Ponero 不带污点、折扣小");
int stings = 0, stingsCd = 0;
for (int i = 0; i < 4000; i++) { if (HotCoins.Make(Assets.CRT, 1, 500, false, rng).Sting) stings++; if (HotCoins.Make(Assets.CRT, 1, 500, true, rng).Sting) stingsCd++; }
Check(stingsCd > stings * 2, $"镇压期间钓鱼执法更多:{stings} → {stingsCd}");
});
Test("预测市场:LMSR 定价、最大亏损、买卖", () =>
{
foreach (double p0 in new[] { 0.5, 0.08, 0.9 })
{
var m = PredictMarket.Create(1, PredictKind.Event, "x", "t", 0, 10, 11, 12, p0);
Check(Math.Abs(m.PYes - p0) < 1e-9, $"初始价 = 先验 {p0}:{m.PYes:0.0000}");
Check(Math.Abs(m.MaxLoss - PredictMarket.LossFor(10)) < 1e-6, "最大亏损等于预设");
Check(Math.Abs(m.Loss - PredictMarket.LossFor(10)) < 1e-6 && Math.Abs(m.B - Tuning.PredictDepth * m.Loss / Math.Log(2)) < 1e-6, "单盘额度等于预设,流动性与先验无关");
double cost = 100, sh = m.SharesFor(true, cost);
Check(Math.Abs(m.BuyCost(true, sh) - cost) < 1e-6, $"闭式反解和成本函数一致({p0})");
Check(Math.Abs(m.SellValue(true, 0)) < 1e-9, "卖 0 份收回 0");
// 系统最大亏损:玩家买满一边,赢了系统最多亏 MaxLoss
double paid = m.BuyCost(true, 5000);
Check(5000 - paid <= m.MaxLoss + 1e-6, $"买得再多系统也亏不过最大亏损:{5000 - paid:0.0} ≤ {m.MaxLoss:0.0}");
var m2 = PredictMarket.Create(1, PredictKind.Event, "x", "t", 0, 10, 11, 12, p0);
double paidNo = m2.BuyCost(false, 5000);
Check(5000 - paidNo <= m2.MaxLoss + 1e-6, "反方向同理");
// 小额下注的滑点:100 的均价比现价贵不到 5%(低先验盘也一样)
double avg = cost / sh;
Check(avg / p0 - 1 < 0.05, $"下注 100 的滑点 {(avg / p0 - 1) * 100:0.0}%({p0})");
// 份额上限按额度:买满一边,系统最多亏份额上限
double paid = m.BuyCost(true, m.ShareCap);
Check(m.ShareCap - paid <= Tuning.PredictCap * m.Loss + 1e-6, $"买满上限系统亏 {m.ShareCap - paid:0.0}");
// 买了再卖:只损失手续费之外的价差为 0
var m3 = PredictMarket.Create(1, PredictKind.Event, "x", "t", 0, 10, 11, 12, p0);
double s3 = m3.SharesFor(true, 50);
@@ -1312,15 +1372,16 @@ internal static class Program
Check(bk.Buy(acct, m, true, 0, 5, pr, false, out _) == PredictResult.Amount, "金额为 0 被拒");
Check(bk.Buy(acct, m, true, 2000, 5, pr, false, out _) == PredictResult.Funds, "钱不够被拒");
Check(bk.Buy(acct, m, true, 100, 6, pr, false, out _) == PredictResult.Closed, "窗口开始后封盘");
var res = bk.Buy(acct, m, true, 102, 5, pr, false, out double sh);
double spend = 100 * (1 + Tuning.PredictFee);
var res = bk.Buy(acct, m, true, spend, 5, pr, false, out double sh);
Check(res == PredictResult.Ok && sh > 0, "买入成功");
var pos = bk.PosOf(m.Id, acct.Address);
Check(Math.Abs(pos.Cost - 100) < 1e-6 && Math.Abs(acct.Get(Assets.CRC) - 898) < 1e-6, $"成本 100(手续费 2):{pos.Cost:0.00}");
Check(Math.Abs(pos.Taint - 40.8) < 1e-6 && Math.Abs(acct.Taint - 359.2) < 1e-6, $"污点按花掉的价值比例带进持仓:{pos.Taint:0.00}");
Check(Math.Abs(pos.Cost - 100) < 1e-6 && Math.Abs(acct.Get(Assets.CRC) - (1000 - spend)) < 1e-6, $"成本 100(另付手续费):{pos.Cost:0.00}");
Check(Math.Abs(pos.Taint - 400 * spend / 1000) < 1e-6 && Math.Abs(acct.Taint - (400 - 400 * spend / 1000)) < 1e-6, $"污点按花掉的价值比例带进持仓:{pos.Taint:0.00}");
Check(bk.Buy(acct, m, false, 10, 5, pr, false, out _) == PredictResult.Opposite, "不能同盘反方向");
// 卖出:价差为 0,只付 2% 手续费
// 卖出:价差为 0,只付手续费
double before = acct.Get(Assets.CRC);
Check(bk.SellAll(acct, m, 5, out double got) == PredictResult.Ok && Math.Abs(got - 98) < 1e-6, $"原价卖回只扣手续费:{got:0.00}");
Check(bk.SellAll(acct, m, 5, out double got) == PredictResult.Ok && Math.Abs(got - 100 * (1 - Tuning.PredictFee)) < 1e-6, $"原价卖回只扣手续费:{got:0.00}");
Check(Math.Abs(acct.Get(Assets.CRC) - before - got) < 1e-6 && bk.PosOf(m.Id, acct.Address) == null, "回到账户");
Check(acct.Taint < 400 && acct.Taint > 359.2, "卖回时污点按退回的比例回来");
// 持仓上限
@@ -1343,9 +1404,10 @@ internal static class Program
var lose = PredictMarket.Create(++bk.Seq, PredictKind.Event, "blackout", "x", 0, 4, 5, 6, 0.2);
var voided = PredictMarket.Create(++bk.Seq, PredictKind.Faction, "FACTION_SECURITY", "镇压", 0, 4, 5, 8, 0.2);
bk.Markets.AddRange(new[] { win, lose, voided });
bk.Buy(acct, win, true, 51, 4, pr, false, out double sw);
bk.Buy(acct, lose, true, 51, 4, pr, false, out _);
bk.Buy(acct, voided, true, 51, 4, pr, false, out _);
double stake = 50 * (1 + Tuning.PredictFee);
bk.Buy(acct, win, true, stake, 4, pr, false, out double sw);
bk.Buy(acct, lose, true, stake, 4, pr, false, out _);
bk.Buy(acct, voided, true, stake, 4, pr, false, out _);
double cash = acct.Get(Assets.CRC);
bk.Night(5, new[] { "oxymoreWave", "powerShortage" }, bk.Happened, _ => acct, rng);
Check(win.Outcome < 0 && lose.Outcome < 0, "窗口没结束不结算");
@@ -1359,7 +1421,7 @@ internal static class Program
double c2 = acct.Get(Assets.CRC);
var ev2 = bk.Night(9, new string[0], bk.Happened, _ => acct, rng);
Check(ev2.Any(e => e.Kind == "void") && Math.Abs(acct.Get(Assets.CRC) - c2 - 50) < 1e-6, $"缺数据作废并退本金:{acct.Get(Assets.CRC) - c2:0.00}");
// 内幕被查:持仓达到上限的 40% 就有概率;200 次里大约一半
// 内幕被查:持仓达到上限的 40% 就有概率,按查处概率被查
int caught = 0, wins = 0;
for (int i = 0; i < 400; i++)
{
@@ -1372,7 +1434,7 @@ internal static class Program
if (e[0].Kind == "caught") { caught++; Check(e[0].Fraud > 0 && e[0].Fraud <= Tuning.PredictFraudCap, "罪证有上限"); }
else wins++;
}
Check(caught > 140 && caught < 260, $"内幕大单约一半被查:{caught}/400");
Check(Math.Abs(caught / 400.0 - Tuning.PredictInsiderCatch) < 0.08, $"内幕大单按查处概率被查:{caught}/400");
// 小额内幕不会被查
var b3 = new PredictBook(); var a3 = new Wallet { Address = "p" }; a3.Add(Assets.CRC, 1e6);
var m3 = PredictMarket.Create(++b3.Seq, PredictKind.Event, "e", "t", 0, 4, 5, 5, 0.1); b3.Markets.Add(m3);
@@ -1413,7 +1475,7 @@ internal static class Program
int caught = 0;
for (ulong sd = 1; sd <= 60; sd++)
{
var b2 = new PredictBook(); b2.Markets.Add(new PredictMarket { Id = m.Id, Kind = m.Kind, Key = m.Key, Title = m.Title, FromDay = 5, ToDay = 5, P0 = m.P0, B = m.B, QYes = m.QYes, QNo = m.QNo });
var b2 = new PredictBook(); b2.Markets.Add(new PredictMarket { Id = m.Id, Kind = m.Kind, Key = m.Key, Title = m.Title, FromDay = 5, ToDay = 5, P0 = m.P0, B = m.B, Budget = m.Budget, QYes = m.QYes, QNo = m.QNo });
foreach (var p in bk.Positions) b2.Positions.Add(new PredictPos { Market = p.Market, Wallet = p.Wallet, Yes = p.Yes, Shares = p.Shares, Cost = p.Cost, Insider = p.Insider });
double a0 = w1.Get(Assets.CRC), b0 = w2.Get(Assets.CRC);
var ev = b2.Night(5, new string[0], x => true, pick, new Rng(sd));
@@ -1421,7 +1483,7 @@ internal static class Program
else Check(w1.Get(Assets.CRC) > a0 && w2.Get(Assets.CRC) > b0, "赢了各自的钱包都收到兑付");
w1.Balances[Assets.CRC] = a0; w2.Balances[Assets.CRC] = b0;
}
Check(caught > 15 && caught < 45, $"分到两个钱包的内幕持仓合计后约一半被查:{caught}/60");
Check(Math.Abs(caught / 60.0 - Tuning.PredictInsiderCatch) < 0.2, $"分到两个钱包的内幕持仓合计后按查处概率被查:{caught}/60");
});
Test("预测市场:夜间消息反应、情报、新盘口先验", () =>
@@ -1450,7 +1512,7 @@ internal static class Program
double expect = (1 - Tuning.IntelFake) * Tuning.IntelTipAcc[tier] + Tuning.IntelFake * 0;
Check(Math.Abs(right / (double)trials - expect) < 0.04, $"第 {tier + 1} 档说对的比例约 {expect:0.00}:{right / (double)trials:0.00}");
}
Check(Math.Abs(PredictBook.MakeTip(m, true, 2, rng).Paid - Tuning.IntelTipPrice[2] * m.MaxLoss) < 1e-9, "价格按盘口最大亏损的比例");
Check(Math.Abs(PredictBook.MakeTip(m, true, 2, rng).Paid - Tuning.IntelTipPrice[2] * m.Loss) < 1e-9, "价格按单盘额度的比例");
// 到期后消息一起清掉
bk.Tips.Add(new PredictTip { Market = closing.Id });
var w = new Wallet { Address = "x" };
@@ -1634,7 +1696,7 @@ internal static class Program
if (fraud > 0) { caught++; Check(got == 0 && fraud <= Tuning.PredictFraudCap, "被查本金和收益全部没收"); }
else Check(got > cost, "没被查时赚到价差");
}
Check(Math.Abs(caught / (double)n - Tuning.PredictInsiderCatch) < 0.08, $"约一半被查:{caught}/{n}");
Check(Math.Abs(caught / (double)n - Tuning.PredictInsiderCatch) < 0.08, $"按查处概率被查:{caught}/{n}");
// 小额内幕、非内幕卖出不查
var bk2 = new PredictBook(); var w2 = new Wallet { Address = "w" }; w2.Add(Assets.CRC, 1e6);
var m2 = PredictMarket.Create(++bk2.Seq, PredictKind.Event, "e", "t", 0, 4, 7, 7, 0.05); bk2.Markets.Add(m2);