1 Commits
26 changed files with 222 additions and 200 deletions

No files matched your search

+17
View File
@@ -1,5 +1,22 @@
# Changelog # Changelog
## 2.1.0
- Web3 商店的现货和商家货架改为每周一、周四早上上新(原来每 7 天一次);镇压等原因错过的上新日在下一晚补上。
- 新增夜间 NPC 买家:现货和货架上每件货每晚有 20% 的概率被买走,卖完下架,上新当晚的新货不受影响。
- 普通商家每家的货种 3 → 5,单件基础价上限 4000 → 8000;个人卖家混进尖端货的门槛保持 4000。
- 商家价格系数调整:普通商家(含全新矿卡、尖端店铺、矿机商)0.88–1.28,大宗商家 0.75–1.15,个人卖家 0.98–1.38,二手矿卡商 0.74–1.08,已计入等待期间平台跑路的期望损失(原来普通 0.70–0.95、全新卡 0.85–1.00、二手卡 0.65–0.90、大宗 0.55–0.75、尖端和矿机 0.85–1.00、个人 0.50–1.20),压低买货洗钱的收益。手册里大宗商家的“价格最低”改为“库存大”。
- 换币客户:买币的出价从市值 ×0.95–1.30 改为 ×1.15–1.3;卖币的要价从 80%–45% 改为 90%–50%(按脏币比例线性)。
- PLEDGER 广播读条:慢档 1.5 秒、普通档 1 秒、快档 0.5 秒,不再按确认数变长,也不能跳过;拥堵时慢档、普通档仍按原倍数放慢。
- 自营混币器的“口碑”改名“清洗效率”,显示出款洗掉的污点比例,越高越好(原来显示剩下的污点,越低越好)。
- 平台跑路后的关闭时间 10 天 → 5 天;修正重新开张后第一天货架是空的。
- 修正矿架、矿机运转时不触发模块的“使用”效果:每晚挖矿和涡轮增压各算一次运转,自学习模块会成长,过压模块可能烧毁,退化模块会掉属性(和原版机器一致)。
- 删除假客服(包括手册说明和相关文案)。
- PLEDGER 主页余额改成带表头的三栏(币种、数量 / 脏币、估值),斜杠上下对齐,不再换行;脏币数量普通行暗红、选中行黄色。
- PLEDGER 按住 ✓ 签名:慢档 1.5 秒、普通档 1 秒、快档 0.5 秒(原来 1.8 / 1.2 / 0.6)。
- PLEDGER 发送页:金额框固定高度,不再被压扁;有待付账单时“最近”列表最多显示 2 条。
- 手册和商店升级说明对应更新,8 种语言。
## 2.0.0 ## 2.0.0
污点规则重做(按币种记脏币,只有干净的币能进 Poinbase 和银行,出金审查删除)、OTC Desk 场外换币台、自营混币器、Tumbler 支线扩展、挖矿去模块上限。存档兼容,读旧存档时自动升级。 污点规则重做(按币种记脏币,只有干净的币能进 Poinbase 和银行,出金审查删除)、OTC Desk 场外换币台、自营混币器、Tumbler 支线扩展、挖矿去模块上限。存档兼容,读旧存档时自动升级。
+28 -2
View File
@@ -105,10 +105,18 @@ namespace Decentralized.Domain
return goods; return goods;
} }
/// <summary>每周刷新一次(或首次开放时):按声望开放的档次抽 StockCount 种货,每种 1–3 件(高档与显卡、高科技 1 件)。</summary> /// <summary>最近一个该上新的夜晚(不晚于 day):夜间结算时 day 还是当天,第二天早上才看到货,所以周一的货在周日夜里上。</summary>
public static int LastRefreshNight(int day)
{
for (int d = day; d > day - 7; d--)
if (Tuning.BmRefreshWeekdays.Contains((d + 1) % 7)) return d;
return day;
}
/// <summary>到了上新日(或首次开放时,错过的上新日在下一晚补上):按声望开放的档次抽 StockCount 种货,每种 1–3 件(高档与显卡、高科技 1 件)。</summary>
public bool Refresh(int day, int rep, Rng rng, Func<string, long> value) public bool Refresh(int day, int rep, Rng rng, Func<string, long> value)
{ {
if (!Open(rep) || day - RefreshedDay < Tuning.BmRefreshDays) return false; if (!Open(rep) || RefreshedDay >= LastRefreshNight(day)) return false;
RefreshedDay = day; RefreshedDay = day;
Offers.Clear(); Offers.Clear();
foreach (var g in Roll(StockCount(rep), day, rep, rng, value, PriceOf)) foreach (var g in Roll(StockCount(rep), day, rep, rng, value, PriceOf))
@@ -133,6 +141,24 @@ namespace Decentralized.Domain
return true; return true;
} }
/// <summary>夜间 NPC 买家:现货和商家货架上每件货各按 <see cref="Tuning.BmNpcBuyChance"/> 被买走,卖完下架。返回卖出的件数。</summary>
public int NpcBuys(Rng rng)
{
int total = 0;
foreach (var o in Offers) { int n = NpcSold(o.Qty, rng); o.Qty -= n; total += n; }
foreach (var l in Catalog) { int n = NpcSold(l.Qty, rng); l.Qty -= n; total += n; }
Offers.RemoveAll(o => o.Qty <= 0);
Catalog.RemoveAll(l => l.Qty <= 0);
return total;
}
private static int NpcSold(int qty, Rng rng)
{
int n = 0;
for (int i = 0; i < qty; i++) if (rng.Chance(Tuning.BmNpcBuyChance)) n++;
return n;
}
/// <summary>Ponero 对信用点的价格:跟随 PSC。</summary> /// <summary>Ponero 对信用点的价格:跟随 PSC。</summary>
public static double PoneroPrice(double pscPrice) => pscPrice * Tuning.PoneroPscRatio; public static double PoneroPrice(double pscPrice) => pscPrice * Tuning.PoneroPscRatio;
+23 -9
View File
@@ -119,13 +119,29 @@ namespace Decentralized.Domain
public double RugChance => Scales.R(Math.Min(Tuning.BmRugMax, Tuning.BmRugBase + Held / 10000.0 * Tuning.BmRugPerTenK)); public double RugChance => Scales.R(Math.Min(Tuning.BmRugMax, Tuning.BmRugBase + Held / 10000.0 * Tuning.BmRugPerTenK));
/// <summary>每周必有的"矿工路线"商家类型(从中抽 2 家),其余按全部类型抽。</summary> /// <summary>每次上新必有的"矿工路线"商家类型(从中抽 2 家),其余按全部类型抽。</summary>
private static readonly MerchantType[] Core = { MerchantType.GpuNew, MerchantType.GpuUsed, MerchantType.Rigs, MerchantType.Modules }; private static readonly MerchantType[] Core = { MerchantType.GpuNew, MerchantType.GpuUsed, MerchantType.Rigs, MerchantType.Modules };
private static readonly MerchantType[] Others = { MerchantType.Arms, MerchantType.GunMods, MerchantType.Docs, MerchantType.Pharma, MerchantType.Chem, MerchantType.Brewer, private static readonly MerchantType[] Others = { MerchantType.Arms, MerchantType.GunMods, MerchantType.Docs, MerchantType.Pharma, MerchantType.Chem, MerchantType.Brewer,
MerchantType.Farm, MerchantType.Husbandry, MerchantType.Miner, MerchantType.Water, MerchantType.Storage, MerchantType.Tools, MerchantType.Luxury }; MerchantType.Farm, MerchantType.Husbandry, MerchantType.Miner, MerchantType.Water, MerchantType.Storage, MerchantType.Tools, MerchantType.Luxury };
private static double F(Rng rng, double lo, double hi) => lo + rng.NextDouble() * (hi - lo); private static double F(Rng rng, double lo, double hi) => lo + rng.NextDouble() * (hi - lo);
/// <summary>这类商家的价格系数范围。</summary>
private static (double Min, double Max) FactorRange(MerchantType t) =>
t == MerchantType.Bulk ? (Tuning.BmFactorBulkMin, Tuning.BmFactorBulkMax)
: t == MerchantType.Personal ? (Tuning.BmFactorPersonalMin, Tuning.BmFactorPersonalMax)
: t == MerchantType.GpuUsed ? (Tuning.BmFactorUsedMin, Tuning.BmFactorUsedMax)
: (Tuning.BmFactorMin, Tuning.BmFactorMax);
/// <summary>单件货的价格系数:个人卖家每件各自随机,其他商家在自家系数上小幅浮动,都不超出这类商家的范围。</summary>
private static double ListingFactor(BmSeller s, Rng rng)
{
var range = FactorRange(s.Type);
return s.Type == MerchantType.Personal
? F(rng, range.Min, range.Max)
: Math.Max(range.Min, Math.Min(range.Max, s.Factor * F(rng, 1 - Tuning.BmPriceJitter, 1 + Tuning.BmPriceJitter)));
}
private static List<BmEntry> AllEntries() => Merchants.Table.Values.SelectMany(x => x).GroupBy(x => x.Id).Select(g => g.First()).ToList(); private static List<BmEntry> AllEntries() => Merchants.Table.Values.SelectMany(x => x).GroupBy(x => x.Id).Select(g => g.First()).ToList();
private static string[] HighGpus => Hardware.Specs.Values.Where(x => !x.Asic && !x.Scrap && x.Tier >= Tuning.BmEliteGpuTier).Select(x => x.Model).ToArray(); private static string[] HighGpus => Hardware.Specs.Values.Where(x => !x.Asic && !x.Scrap && x.Tier >= Tuning.BmEliteGpuTier).Select(x => x.Model).ToArray();
@@ -146,7 +162,7 @@ namespace Decentralized.Domain
: s.Type == MerchantType.Elite ? rng.Range(1, Tuning.BmEliteQtyMax) : s.Type == MerchantType.Elite ? rng.Range(1, Tuning.BmEliteQtyMax)
: s.Type == MerchantType.Personal ? rng.Range(1, Tuning.BmPersonalQtyMax) : s.Type == MerchantType.Personal ? rng.Range(1, Tuning.BmPersonalQtyMax)
: s.Type == MerchantType.GpuNew ? rng.Range(Math.Max(1, Tuning.BmQtyMin - Tuning.BmNewGpuQtyMinCut), Tuning.BmQtyMax - Tuning.BmNewGpuQtyMaxCut) : rng.Range(Tuning.BmQtyMin, Tuning.BmQtyMax); : s.Type == MerchantType.GpuNew ? rng.Range(Math.Max(1, Tuning.BmQtyMin - Tuning.BmNewGpuQtyMinCut), Tuning.BmQtyMax - Tuning.BmNewGpuQtyMaxCut) : rng.Range(Tuning.BmQtyMin, Tuning.BmQtyMax);
double factor = s.Type == MerchantType.Personal ? F(rng, Tuning.BmPersonalFactorMin, Tuning.BmPersonalFactorMax) : s.Factor * F(rng, 1 - Tuning.BmPriceJitter, 1 + Tuning.BmPriceJitter); double factor = ListingFactor(s, rng);
BmListing l = null; BmListing l = null;
bool eliteGpu = s.Type == MerchantType.Elite && rng.Chance(Tuning.BmEliteGpuChance); bool eliteGpu = s.Type == MerchantType.Elite && rng.Chance(Tuning.BmEliteGpuChance);
bool personalGpu = s.Type == MerchantType.Personal && rng.Chance(Tuning.BmPersonalGpuChance); bool personalGpu = s.Type == MerchantType.Personal && rng.Chance(Tuning.BmPersonalGpuChance);
@@ -168,7 +184,7 @@ namespace Decentralized.Domain
var e = entries[k]; var e = entries[k];
long val = value(e.Id); long val = value(e.Id);
if (val <= 0) { entries.RemoveAt(k); continue; } if (val <= 0) { entries.RemoveAt(k); continue; }
bool ok = s.Type == MerchantType.Elite ? val >= Tuning.BmEliteMinValue : wantElite ? val > Tuning.BmMaxUnitValue : val <= Tuning.BmMaxUnitValue; bool ok = s.Type == MerchantType.Elite ? val >= Tuning.BmEliteMinValue : wantElite ? val > Tuning.BmPersonalEliteMinValue : val <= Tuning.BmMaxUnitValue;
if (!ok) continue; if (!ok) continue;
pick = e; v = val; found = true; entries.RemoveAt(k); pick = e; v = val; found = true; entries.RemoveAt(k);
} }
@@ -194,7 +210,7 @@ namespace Decentralized.Domain
foreach (var m in models) { roll -= AsicWeight(m); if (roll <= 0) { model = m; break; } } foreach (var m in models) { roll -= AsicWeight(m); if (roll <= 0) { model = m; break; } }
bool fresh = rng.Chance(Tuning.AsicNewShare); bool fresh = rng.Chance(Tuning.AsicNewShare);
double health = fresh ? 100 : rng.Range(Tuning.AsicUsedHealthMin, Tuning.AsicUsedHealthMax); double health = fresh ? 100 : rng.Range(Tuning.AsicUsedHealthMin, Tuning.AsicUsedHealthMax);
double factor = s.Factor * F(rng, 1 - Tuning.BmPriceJitter, 1 + Tuning.BmPriceJitter); double factor = ListingFactor(s, rng);
return new List<BmListing> return new List<BmListing>
{ {
new BmListing { Seller = idx, Item = "gpu:" + model, Kind = GoodKind.Gpu, Level = 2, Model = model, Health = health, Qty = model == "M1" ? rng.Range(1, 2) : 1, new BmListing { Seller = idx, Item = "gpu:" + model, Kind = GoodKind.Gpu, Level = 2, Model = model, Health = health, Qty = model == "M1" ? rng.Range(1, 2) : 1,
@@ -202,7 +218,7 @@ namespace Decentralized.Domain
}; };
} }
/// <summary>每周重新生成商家、货架和论坛情报(与现货同一天刷新):从 6 种类型里抽 BmMerchantCount 家,另有概率出现一家大宗商家。</summary> /// <summary>每次上新重新生成商家、货架和论坛情报(与现货同一天刷新):从 6 种类型里抽 BmMerchantCount 家,另有概率出现一家大宗商家。</summary>
public void RefreshOrders(int day, int rep, Rng rng, Func<string, long> value, bool allTypes = false) public void RefreshOrders(int day, int rep, Rng rng, Func<string, long> value, bool allTypes = false)
{ {
Sellers.Clear(); Catalog.Clear(); Forum.Clear(); Sellers.Clear(); Catalog.Clear(); Forum.Clear();
@@ -222,12 +238,10 @@ namespace Decentralized.Domain
bool scam = rng.Chance(personal ? Tuning.BmPersonalScam : Tuning.BmScamSellerShare); bool scam = rng.Chance(personal ? Tuning.BmPersonalScam : Tuning.BmScamSellerShare);
// 骗子多半是新号,也有刷过好评的老号;个人卖家都是新号 // 骗子多半是新号,也有刷过好评的老号;个人卖家都是新号
bool fresh = personal || (scam ? rng.Chance(Tuning.BmScamFresh) : rng.Chance(Tuning.BmHonestFresh)); bool fresh = personal || (scam ? rng.Chance(Tuning.BmScamFresh) : rng.Chance(Tuning.BmHonestFresh));
double lo = t == MerchantType.Elite || t == MerchantType.Asic ? Tuning.BmFactorEliteMin : t == MerchantType.GpuNew ? Tuning.BmFactorNewMin : t == MerchantType.GpuUsed ? Tuning.BmFactorUsedMin : t == MerchantType.Bulk ? Tuning.BmFactorBulkMin : Tuning.BmFactorMin;
double hi = t == MerchantType.Elite || t == MerchantType.Asic ? Tuning.BmFactorEliteMax : t == MerchantType.GpuNew ? Tuning.BmFactorNewMax : t == MerchantType.GpuUsed ? Tuning.BmFactorUsedMax : t == MerchantType.Bulk ? Tuning.BmFactorBulkMax : Tuning.BmFactorMax;
var s = new BmSeller var s = new BmSeller
{ {
Name = ChainAddress.Make(rng.NextUInt()), Name = ChainAddress.Make(rng.NextUInt()),
Scam = scam, Type = t, Factor = personal ? 1.0 : F(rng, lo, hi), Scam = scam, Type = t, Factor = F(rng, FactorRange(t).Min, FactorRange(t).Max),
Trades = fresh ? rng.Range(0, Tuning.BmFreshTradesMax) : rng.Range(Tuning.BmOldTradesMin, Tuning.BmOldTradesMax), Trades = fresh ? rng.Range(0, Tuning.BmFreshTradesMax) : rng.Range(Tuning.BmOldTradesMin, Tuning.BmOldTradesMax),
Rating = scam && !fresh ? rng.Range(Tuning.BmScamOldRatingMin, Tuning.BmScamOldRatingMax) : fresh ? rng.Range(Tuning.BmFreshRatingMin, Tuning.BmFreshRatingMax) : rng.Range(Tuning.BmOldRatingMin, Tuning.BmOldRatingMax), Rating = scam && !fresh ? rng.Range(Tuning.BmScamOldRatingMin, Tuning.BmScamOldRatingMax) : fresh ? rng.Range(Tuning.BmFreshRatingMin, Tuning.BmFreshRatingMax) : rng.Range(Tuning.BmOldRatingMin, Tuning.BmOldRatingMax),
}; };
@@ -238,7 +252,7 @@ namespace Decentralized.Domain
if (RugChance > Scales.R(Tuning.BmRugBase * Tuning.BmForumRugFactor)) Forum.Add("rug"); if (RugChance > Scales.R(Tuning.BmRugBase * Tuning.BmForumRugFactor)) Forum.Add("rug");
} }
/// <summary>目录里全部货按订单价算的总值(信用点),用来核对每周周转量。</summary> /// <summary>目录里全部货按订单价算的总值(信用点),用来核对每次上新的周转量。</summary>
public double CatalogValue => Catalog.Sum(l => (double)l.Price * l.Qty); public double CatalogValue => Catalog.Sum(l => (double)l.Price * l.Qty);
/// <summary>下单:钱包里的币按实付折算扣除,脏枚数与成本按比例留在卖家那边(记在订单上)。成功返回订单。</summary> /// <summary>下单:钱包里的币按实付折算扣除,脏枚数与成本按比例留在卖家那边(记在订单上)。成功返回订单。</summary>
-2
View File
@@ -66,8 +66,6 @@ namespace Decentralized.Domain
public List<Approval> Approvals = new List<Approval>(); public List<Approval> Approvals = new List<Approval>();
public List<YieldPool> Pools = new List<YieldPool>(); public List<YieldPool> Pools = new List<YieldPool>();
public int Seq; public int Seq;
/// <summary>骗子用过的收款地址(假客服、钓鱼):转到这些地址时晨间日志说明被骗。</summary>
public List<string> ScamAddrs = new List<string>();
private static readonly string[] AirdropNames = { "Poinbase", "PSC Foundation", "RatDigg", "Revolution DAO", "Gutter Labs", "Station Rewards" }; private static readonly string[] AirdropNames = { "Poinbase", "PSC Foundation", "RatDigg", "Revolution DAO", "Gutter Labs", "Station Rewards" };
private static readonly string[] PoolNames = { "Nebula Yield", "Rustwater Vault", "Orbit Farm", "Deck 9 Savings", "Gutterflow Pool", "Halo Staking", "Ironclad Earn" }; private static readonly string[] PoolNames = { "Nebula Yield", "Rustwater Vault", "Orbit Farm", "Deck 9 Savings", "Gutterflow Pool", "Halo Staking", "Ironclad Earn" };
+24 -18
View File
@@ -117,9 +117,12 @@ namespace Decentralized.Domain
public const double SideArbRate = 0.75, SideDepthShare = 0.3, SparkDepthShare = 0.15; public const double SideArbRate = 0.75, SideDepthShare = 0.3, SparkDepthShare = 0.15;
/// <summary>Poinbase 的 SPARK/CRC 订单簿深度占主池深度的比例。</summary> /// <summary>Poinbase 的 SPARK/CRC 订单簿深度占主池深度的比例。</summary>
public const double PoinSparkDepthShare = 0.5; public const double PoinSparkDepthShare = 0.5;
/// <summary>Web3 黑市:开放所需黑市声望,中 / 高档货所需声望,现货每周刷新的天数与基础件数(每高 BmStockPerRep 声望多一件),现货溢价。</summary> /// <summary>Web3 黑市:开放所需黑市声望,中 / 高档货所需声望,现货基础件数(每高 BmStockPerRep 声望多一件),现货溢价。</summary>
public const int BmOpenRep = 10, BmMidRep = 40, BmHighRep = 80, BmRefreshDays = 7, BmStockBase = 4; public const int BmOpenRep = 10, BmMidRep = 40, BmHighRep = 80, BmStockBase = 4;
public const double BmStockPerRep = 40, BmPremium = 0.30; public const double BmStockPerRep = 40, BmPremium = 0.30;
/// <summary>现货和商家货架在星期几的早上上新(游戏的天数 % 7:0 周日、1 周一……);夜间 NPC 买家买走每件货的概率。</summary>
public static readonly int[] BmRefreshWeekdays = { 1, 4 };
public const double BmNpcBuyChance = 0.20;
/// <summary>Ponero 兑换处:开放所需黑市声望、每次兑入 / 兑出的手续费、每天可兑换的额度(信用点)、对 PSC 的价格比。</summary> /// <summary>Ponero 兑换处:开放所需黑市声望、每次兑入 / 兑出的手续费、每天可兑换的额度(信用点)、对 PSC 的价格比。</summary>
public const int PoneroOpenRep = 30; public const int PoneroOpenRep = 30;
public const double PoneroFee = 0.06, PoneroDailyCap = 1000, PoneroPscRatio = 0.5; public const double PoneroFee = 0.06, PoneroDailyCap = 1000, PoneroPscRatio = 0.5;
@@ -127,7 +130,7 @@ namespace Decentralized.Domain
/// 上门被截获的概率(镇压期间再加)、骗子卖家占比、每晚平台跑路基础概率与每万信用点托管资金加的概率(封顶)、跑路后关闭的天数。</summary> /// 上门被截获的概率(镇压期间再加)、骗子卖家占比、每晚平台跑路基础概率与每万信用点托管资金加的概率(封顶)、跑路后关闭的天数。</summary>
public const double BmEscrowFee = 0.05, BmAdvanceDiscount = 0.10, BmInterceptDoor = 0.08, BmInterceptCrackdown = 0.15; public const double BmEscrowFee = 0.05, BmAdvanceDiscount = 0.10, BmInterceptDoor = 0.08, BmInterceptCrackdown = 0.15;
public const double BmScamSellerShare = 0.15, BmRugBase = 0.002, BmRugPerTenK = 0.004, BmRugMax = 0.05; public const double BmScamSellerShare = 0.15, BmRugBase = 0.002, BmRugPerTenK = 0.004, BmRugMax = 0.05;
public const int BmAdvanceMinTrades = 30, BmDoorDays = 3, BmRugClosedDays = 10; public const int BmAdvanceMinTrades = 30, BmDoorDays = 3, BmRugClosedDays = 5;
/// <summary>蜜罐:每晚平台被执法接管的基础概率、每点治安声望加的概率、封顶、持续天数;之后订单被追查的延迟天数; /// <summary>蜜罐:每晚平台被执法接管的基础概率、每点治安声望加的概率、封顶、持续天数;之后订单被追查的延迟天数;
/// 订单被截获时变成受控交付的概率;每晚某个近期卖家落网的概率。</summary> /// 订单被截获时变成受控交付的概率;每晚某个近期卖家落网的概率。</summary>
public const double BmHoneypotBase = 0.01, BmHoneypotPerSecRep = 0.0004, BmHoneypotMax = 0.06, BmControlled = 0.35, BmSellerBust = 0.008; public const double BmHoneypotBase = 0.01, BmHoneypotPerSecRep = 0.0004, BmHoneypotMax = 0.06, BmControlled = 0.35, BmSellerBust = 0.008;
@@ -158,19 +161,20 @@ namespace Decentralized.Domain
public const double BmWeightPsc = 0.8, BmWeightCrt = 1, BmWeightCra = 0.6, BmWeightPonero = 0.4; public const double BmWeightPsc = 0.8, BmWeightCrt = 1, BmWeightCra = 0.6, BmWeightPonero = 0.4;
/// <summary>PLEDGER 区块高度每晚自然增长的范围(区块数,含两端)。</summary> /// <summary>PLEDGER 区块高度每晚自然增长的范围(区块数,含两端)。</summary>
public const int BlocksPerDayMin = 120, BlocksPerDayMax = 170; public const int BlocksPerDayMin = 120, BlocksPerDayMax = 170;
/// <summary>商家货架:每周的商家数(其中 2 家从矿卡 / 矿架 / 模组 4 类里抽,其余从其他类型里抽)、每家的货种数、每种货的库存范围;大宗商家出现概率、库存范围、送货天数; /// <summary>商家货架:每次上新的商家数(其中 2 家从矿卡 / 矿架 / 模组 4 类里抽,其余从其他类型里抽)、每家的货种数、每种货的库存范围;大宗商家出现概率、库存范围、送货天数;
/// 各类商家的价格系数范围(订单价 = 基础价 × 系数);批量折扣档(件数、折扣)。</summary> /// 价格系数范围(订单价 = 基础价 × 系数):普通商家(含全新矿卡、尖端店铺、矿机商)、大宗商家、个人卖家、二手矿卡商(有假卡风险,比全新卡便宜);都已扣除等待期间平台跑路的期望损失(3 天的订单约 2%,大宗 6 天约 5%);批量折扣档(件数、折扣)。</summary>
public const int BmMerchantCount = 7, BmCoreMerchants = 2, BmMerchantListings = 3, BmQtyMin = 2, BmQtyMax = 6, BmBulkQtyMin = 10, BmBulkQtyMax = 25, BmBulkDays = 6; public const int BmMerchantCount = 7, BmCoreMerchants = 2, BmMerchantListings = 5, BmQtyMin = 2, BmQtyMax = 6, BmBulkQtyMin = 10, BmBulkQtyMax = 25, BmBulkDays = 6;
public const double BmBulkChance = 0.25, BmFactorMin = 0.70, BmFactorMax = 0.95, BmFactorNewMin = 0.85, BmFactorNewMax = 1.00, BmFactorUsedMin = 0.65, BmFactorUsedMax = 0.90, BmFactorBulkMin = 0.55, BmFactorBulkMax = 0.75; public const double BmBulkChance = 0.25, BmFactorMin = 0.88, BmFactorMax = 1.28, BmFactorBulkMin = 0.75, BmFactorBulkMax = 1.15, BmFactorPersonalMin = 0.98, BmFactorPersonalMax = 1.38, BmFactorUsedMin = 0.74, BmFactorUsedMax = 1.08;
/// <summary>商家货架上单件基础价的上限(过贵的货不上,免得一件把周转量撑歪)。</summary> /// <summary>商家货架上单件基础价的上限(过贵的货不上,免得一件把周转量撑歪)。</summary>
public const long BmMaxUnitValue = 4000; public const long BmMaxUnitValue = 8000;
/// <summary>尖端店铺:每周出现概率、货种数、库存范围、单件基础价下限、价格系数范围、送货天数。</summary> /// <summary>尖端店铺:每次上新的出现概率、货种数、库存范围、单件基础价下限、送货天数。</summary>
public const double BmEliteChance = 0.15, BmFactorEliteMin = 0.85, BmFactorEliteMax = 1.00; public const double BmEliteChance = 0.15;
public const int BmEliteListings = 2, BmEliteQtyMax = 2, BmEliteDays = 5; public const int BmEliteListings = 2, BmEliteQtyMax = 2, BmEliteDays = 5;
public const long BmEliteMinValue = 2000; public const long BmEliteMinValue = 2000;
/// <summary>个人卖家:每周家数、货种数、库存上限、每件的价格系数范围(各件独立随机)、是骗子的概率、混进尖端货的概率。</summary> /// <summary>个人卖家:每次上新的家数、货种数、库存上限、是骗子的概率、混进尖端货的概率、尖端货的基础价下限。</summary>
public const int BmPersonalCount = 2, BmPersonalListings = 3, BmPersonalQtyMax = 2; public const int BmPersonalCount = 2, BmPersonalListings = 3, BmPersonalQtyMax = 2;
public const double BmPersonalFactorMin = 0.50, BmPersonalFactorMax = 1.20, BmPersonalScam = 0.25, BmPersonalEliteShare = 0.10; public const double BmPersonalScam = 0.25, BmPersonalEliteShare = 0.10;
public const long BmPersonalEliteMinValue = 4000;
public const int BmBulk1Count = 5, BmBulk2Count = 10; public const int BmBulk1Count = 5, BmBulk2Count = 10;
public const double BmBulk1Discount = 0.05, BmBulk2Discount = 0.10; public const double BmBulk1Discount = 0.05, BmBulk2Discount = 0.10;
/// <summary>出售量越大货款越容易带污点:近 7 天成交额达到参考量时,污点概率与比例各加最多 BmVolumeTaintMax。</summary> /// <summary>出售量越大货款越容易带污点:近 7 天成交额达到参考量时,污点概率与比例各加最多 BmVolumeTaintMax。</summary>
@@ -190,8 +194,10 @@ namespace Decentralized.Domain
public const double TxFeeSlow = 0.5, TxFeeNormal = 1.5, TxFeeFast = 4, TxCongestedFeeMult = 4; public const double TxFeeSlow = 0.5, TxFeeNormal = 1.5, TxFeeFast = 4, TxCongestedFeeMult = 4;
/// <summary>Gas 档位的确认速度倍数(时间乘它):Gas 越高确认越快、进度条走得越快;Poinbase 出金固定普通档。</summary> /// <summary>Gas 档位的确认速度倍数(时间乘它):Gas 越高确认越快、进度条走得越快;Poinbase 出金固定普通档。</summary>
public const double TxSpeedSlow = 1.5, TxSpeedNormal = 1, TxSpeedFast = 0.5; public const double TxSpeedSlow = 1.5, TxSpeedNormal = 1, TxSpeedFast = 0.5;
/// <summary>PLEDGER 广播读条的基础秒数(普通档),乘档位速度倍数和拥堵倍数:慢档 1.5 秒、快档 0.5 秒,不能跳过。</summary>
public const double TxBarSecs = 1;
/// <summary>PLEDGER 按住 ✓ 签名的基础秒数(普通档),乘档位速度倍数:快档更短、慢档更长。</summary> /// <summary>PLEDGER 按住 ✓ 签名的基础秒数(普通档),乘档位速度倍数:快档更短、慢档更长。</summary>
public const double TxHoldSecs = 1.2; public const double TxHoldSecs = 1;
/// <summary>Gas 价格指数:以 GasPeriod 天为周期正弦涨跌,振幅 GasAmp(0.5×–1.5×),每天再乘 1 ± GasNoise 的随机波动。</summary> /// <summary>Gas 价格指数:以 GasPeriod 天为周期正弦涨跌,振幅 GasAmp(0.5×–1.5×),每天再乘 1 ± GasNoise 的随机波动。</summary>
public const int TxGasPeriod = 7; public const int TxGasPeriod = 7;
public const double TxGasAmp = 0.5, TxGasNoise = 0.15; public const double TxGasAmp = 0.5, TxGasNoise = 0.15;
@@ -228,7 +234,7 @@ namespace Decentralized.Domain
public const int PerpPscLev = 5, PerpSparkLev = 3; public const int PerpPscLev = 5, PerpSparkLev = 3;
public const double PerpPscCap = 20000, PerpSparkCap = 5000; public const double PerpPscCap = 20000, PerpSparkCap = 5000;
/// <summary>RatDigg 矿机(ASIC):黑市矿机商每周出现的概率;M1 / M2 / M3 需要的黑市声望与出现权重;新机占比与二手的健康度范围。</summary> /// <summary>RatDigg 矿机(ASIC):黑市矿机商每次上新的出现概率;M1 / M2 / M3 需要的黑市声望与出现权重;新机占比与二手的健康度范围。</summary>
public const double AsicChance = 0.25, AsicNewShare = 0.7; public const double AsicChance = 0.25, AsicNewShare = 0.7;
public const int AsicRepM1 = 40, AsicRepM2 = 60, AsicRepM3 = 80; public const int AsicRepM1 = 40, AsicRepM2 = 60, AsicRepM3 = 80;
public const double AsicWeightM1 = 1.0, AsicWeightM2 = 0.6, AsicWeightM3 = 0.4; public const double AsicWeightM1 = 1.0, AsicWeightM2 = 0.6, AsicWeightM3 = 0.4;
@@ -292,12 +298,12 @@ namespace Decentralized.Domain
/// <summary>卖币客户:有相关事件时出手事件里来的币(全额污点)的概率,Ponero 兑换处开放后出手 Ponero 的概率;币的市值(房租的倍数); /// <summary>卖币客户:有相关事件时出手事件里来的币(全额污点)的概率,Ponero 兑换处开放后出手 Ponero 的概率;币的市值(房租的倍数);
/// 其他币的污点比例范围;现金价占市值的比例(污点比例 0 时、1 时,之间线性;Ponero 单独一档);便衣的概率与镇压期间的加成;客户地址来历的最多笔数。</summary> /// 其他币的污点比例范围;现金价占市值的比例(污点比例 0 时、1 时,之间线性;Ponero 单独一档);便衣的概率与镇压期间的加成;客户地址来历的最多笔数。</summary>
public const double OtcEventChance = 0.7, OtcPoneroChance = 0.15, OtcValueMinRents = 4, OtcValueMaxRents = 15; public const double OtcEventChance = 0.7, OtcPoneroChance = 0.15, OtcValueMinRents = 4, OtcValueMaxRents = 15;
public const double OtcTaintMin = 0.2, OtcTaintMax = 0.9, OtcCutClean = 0.80, OtcCutDirty = 0.45, OtcPoneroCutMin = 0.70, OtcPoneroCutMax = 0.80; public const double OtcTaintMin = 0.2, OtcTaintMax = 0.9, OtcCutClean = 0.90, OtcCutDirty = 0.50, OtcPoneroCutMin = 0.70, OtcPoneroCutMax = 0.80;
public const double OtcSting = 0.05, OtcStingCrackdown = 0.10; public const double OtcSting = 0.05, OtcStingCrackdown = 0.10;
public const int OtcHistoryMax = 3; public const int OtcHistoryMax = 3;
/// <summary>买币客户:要买的币的市值(房租的倍数);出价相对市价的随机溢价范围(可能低于市价,成不成交由玩家决定)。</summary> /// <summary>买币客户:要买的币的市值(房租的倍数);出价相对市价的随机溢价范围(可能低于市价,成不成交由玩家决定)。</summary>
public const double OtcBuyMinRents = 2, OtcBuyMaxRents = 8; public const double OtcBuyMinRents = 2, OtcBuyMaxRents = 8;
public const double OtcBidMin = -0.05, OtcBidMax = 0.30; public const double OtcBidMin = 0.15, OtcBidMax = 0.30;
/// <summary> /// <summary>
/// 自营混币器(买下场外换币台就开放):默认费率、可选费率;口碑(近期出款剩下的污点比例)跟出款走的速度、客户把剩下的污点比例折成费率的权重、Tumbler 关停时客户不混的额外成本、匿名集的半饱和值(每轮清洗率 = 基准 × 匿名集 /(匿名集 + 它))、平均轮数、客户在途的币计入匿名集的比例; /// 自营混币器(买下场外换币台就开放):默认费率、可选费率;口碑(近期出款剩下的污点比例)跟出款走的速度、客户把剩下的污点比例折成费率的权重、Tumbler 关停时客户不混的额外成本、匿名集的半饱和值(每轮清洗率 = 基准 × 匿名集 /(匿名集 + 它))、平均轮数、客户在途的币计入匿名集的比例;
/// 基础需求(信用点,随天数增长)、黑市声望 0 时的需求系数、客流对成本差的灵敏度、每晚需求的随机幅度、单笔存入的平均额; /// 基础需求(信用点,随天数增长)、黑市声望 0 时的需求系数、客流对成本差的灵敏度、每晚需求的随机幅度、单笔存入的平均额;
@@ -315,8 +321,8 @@ namespace Decentralized.Domain
public const int OwnMixSeizeDays = 7, OwnMixRugRep = 25; public const int OwnMixSeizeDays = 7, OwnMixRugRep = 25;
public const double OwnMixRugCrime = 400; public const double OwnMixRugCrime = 400;
/// <summary>假客服:每天上门的概率;伪造转账:用币付款的顾客里是骗子的比例;两者都从第几天起。</summary> /// <summary>伪造转账:用币付款的顾客里是骗子的比例;从第几天起。</summary>
public const double FakeSupportChance = 0.04, FakeTransferShare = 0.08; public const double FakeTransferShare = 0.08;
public const int ScamMinDay = 10; public const int ScamMinDay = 10;
/// <summary>Web3 内置自动换币:商家不收手里的币时,按这个比例多付(DEX 手续费 0.3% 加上高滑点),省得自己去换。</summary> /// <summary>Web3 内置自动换币:商家不收手里的币时,按这个比例多付(DEX 手续费 0.3% 加上高滑点),省得自己去换。</summary>
+6 -8
View File
@@ -56,12 +56,10 @@ namespace Decentralized.Domain
["BmEscrowFee"] = Tuning.BmEscrowFee, ["BmEscrowFee"] = Tuning.BmEscrowFee,
["BmFactorBulkMax"] = Tuning.BmFactorBulkMax, ["BmFactorBulkMax"] = Tuning.BmFactorBulkMax,
["BmFactorBulkMin"] = Tuning.BmFactorBulkMin, ["BmFactorBulkMin"] = Tuning.BmFactorBulkMin,
["BmFactorEliteMax"] = Tuning.BmFactorEliteMax,
["BmFactorEliteMin"] = Tuning.BmFactorEliteMin,
["BmFactorMax"] = Tuning.BmFactorMax, ["BmFactorMax"] = Tuning.BmFactorMax,
["BmFactorMin"] = Tuning.BmFactorMin, ["BmFactorMin"] = Tuning.BmFactorMin,
["BmFactorNewMax"] = Tuning.BmFactorNewMax, ["BmFactorPersonalMax"] = Tuning.BmFactorPersonalMax,
["BmFactorNewMin"] = Tuning.BmFactorNewMin, ["BmFactorPersonalMin"] = Tuning.BmFactorPersonalMin,
["BmFactorUsedMax"] = Tuning.BmFactorUsedMax, ["BmFactorUsedMax"] = Tuning.BmFactorUsedMax,
["BmFactorUsedMin"] = Tuning.BmFactorUsedMin, ["BmFactorUsedMin"] = Tuning.BmFactorUsedMin,
["BmFakeDetect"] = Tuning.BmFakeDetect, ["BmFakeDetect"] = Tuning.BmFakeDetect,
@@ -91,15 +89,15 @@ namespace Decentralized.Domain
["BmMidRep"] = Tuning.BmMidRep, ["BmMidRep"] = Tuning.BmMidRep,
["BmNewGpuQtyMaxCut"] = Tuning.BmNewGpuQtyMaxCut, ["BmNewGpuQtyMaxCut"] = Tuning.BmNewGpuQtyMaxCut,
["BmNewGpuQtyMinCut"] = Tuning.BmNewGpuQtyMinCut, ["BmNewGpuQtyMinCut"] = Tuning.BmNewGpuQtyMinCut,
["BmNpcBuyChance"] = Tuning.BmNpcBuyChance,
["BmOldRatingMax"] = Tuning.BmOldRatingMax, ["BmOldRatingMax"] = Tuning.BmOldRatingMax,
["BmOldRatingMin"] = Tuning.BmOldRatingMin, ["BmOldRatingMin"] = Tuning.BmOldRatingMin,
["BmOldTradesMax"] = Tuning.BmOldTradesMax, ["BmOldTradesMax"] = Tuning.BmOldTradesMax,
["BmOldTradesMin"] = Tuning.BmOldTradesMin, ["BmOldTradesMin"] = Tuning.BmOldTradesMin,
["BmOpenRep"] = Tuning.BmOpenRep, ["BmOpenRep"] = Tuning.BmOpenRep,
["BmPersonalCount"] = Tuning.BmPersonalCount, ["BmPersonalCount"] = Tuning.BmPersonalCount,
["BmPersonalEliteMinValue"] = Tuning.BmPersonalEliteMinValue,
["BmPersonalEliteShare"] = Tuning.BmPersonalEliteShare, ["BmPersonalEliteShare"] = Tuning.BmPersonalEliteShare,
["BmPersonalFactorMax"] = Tuning.BmPersonalFactorMax,
["BmPersonalFactorMin"] = Tuning.BmPersonalFactorMin,
["BmPersonalGpuChance"] = Tuning.BmPersonalGpuChance, ["BmPersonalGpuChance"] = Tuning.BmPersonalGpuChance,
["BmPersonalGpuNew"] = Tuning.BmPersonalGpuNew, ["BmPersonalGpuNew"] = Tuning.BmPersonalGpuNew,
["BmPersonalListings"] = Tuning.BmPersonalListings, ["BmPersonalListings"] = Tuning.BmPersonalListings,
@@ -111,7 +109,6 @@ namespace Decentralized.Domain
["BmQtyMin"] = Tuning.BmQtyMin, ["BmQtyMin"] = Tuning.BmQtyMin,
["BmRatingFakeLoss"] = Tuning.BmRatingFakeLoss, ["BmRatingFakeLoss"] = Tuning.BmRatingFakeLoss,
["BmRatingStart"] = Tuning.BmRatingStart, ["BmRatingStart"] = Tuning.BmRatingStart,
["BmRefreshDays"] = Tuning.BmRefreshDays,
["BmRugBase"] = Tuning.BmRugBase, ["BmRugBase"] = Tuning.BmRugBase,
["BmRugClosedDays"] = Tuning.BmRugClosedDays, ["BmRugClosedDays"] = Tuning.BmRugClosedDays,
["BmRugMax"] = Tuning.BmRugMax, ["BmRugMax"] = Tuning.BmRugMax,
@@ -231,7 +228,6 @@ namespace Decentralized.Domain
["ExchangeFee"] = Tuning.ExchangeFee, ["ExchangeFee"] = Tuning.ExchangeFee,
["FakeDeathFactor"] = Tuning.FakeDeathFactor, ["FakeDeathFactor"] = Tuning.FakeDeathFactor,
["FakeSignChance"] = Tuning.FakeSignChance, ["FakeSignChance"] = Tuning.FakeSignChance,
["FakeSupportChance"] = Tuning.FakeSupportChance,
["FakeTransferShare"] = Tuning.FakeTransferShare, ["FakeTransferShare"] = Tuning.FakeTransferShare,
["FundsBaseSecs"] = Tuning.FundsBaseSecs, ["FundsBaseSecs"] = Tuning.FundsBaseSecs,
["FundsConfSecs"] = Tuning.FundsConfSecs, ["FundsConfSecs"] = Tuning.FundsConfSecs,
@@ -455,6 +451,7 @@ namespace Decentralized.Domain
["TumblerTrialDays"] = Tuning.TumblerTrialDays, ["TumblerTrialDays"] = Tuning.TumblerTrialDays,
["TumblerTrialHintAcc"] = Tuning.TumblerTrialHintAcc, ["TumblerTrialHintAcc"] = Tuning.TumblerTrialHintAcc,
["TumblerTrialOpen"] = Tuning.TumblerTrialOpen, ["TumblerTrialOpen"] = Tuning.TumblerTrialOpen,
["TxBarSecs"] = Tuning.TxBarSecs,
["TxConfirmBase"] = Tuning.TxConfirmBase, ["TxConfirmBase"] = Tuning.TxConfirmBase,
["TxConfirmBig"] = Tuning.TxConfirmBig, ["TxConfirmBig"] = Tuning.TxConfirmBig,
["TxConfirmBigValue"] = Tuning.TxConfirmBigValue, ["TxConfirmBigValue"] = Tuning.TxConfirmBigValue,
@@ -523,6 +520,7 @@ namespace Decentralized.Domain
public static readonly Dictionary<string, double[]> Arrays = new Dictionary<string, double[]> public static readonly Dictionary<string, double[]> Arrays = new Dictionary<string, double[]>
{ {
["BmRefreshWeekdays"] = Array.ConvertAll(Tuning.BmRefreshWeekdays, v => (double)v),
["BmSellMults"] = Array.ConvertAll(Tuning.BmSellMults, v => (double)v), ["BmSellMults"] = Array.ConvertAll(Tuning.BmSellMults, v => (double)v),
["CraSpiralPath"] = Array.ConvertAll(Tuning.CraSpiralPath, v => (double)v), ["CraSpiralPath"] = Array.ConvertAll(Tuning.CraSpiralPath, v => (double)v),
["IntelTipAcc"] = Array.ConvertAll(Tuning.IntelTipAcc, v => (double)v), ["IntelTipAcc"] = Array.ConvertAll(Tuning.IntelTipAcc, v => (double)v),
+2
View File
@@ -149,6 +149,7 @@ namespace Decentralized
Session.TonightKj += kj; Session.TonightKj += kj;
Session.TonightCards.Add(new KeyValuePair<GameItem, ModuleBonus>(m, b)); Session.TonightCards.Add(new KeyValuePair<GameItem, ModuleBonus>(m, b));
Session.TonightMachine[m] = m; Session.TonightMachine[m] = m;
MachineHelper.OnMachineActioned(m, modules); // 算一次运转:自学习成长、过压烧毁、退化模块掉属性,今晚的加成按运转前算
Update(m, modules); Update(m, modules);
} }
@@ -161,6 +162,7 @@ namespace Decentralized
int kj = (int)Math.Ceiling(u.Kj(b)); int kj = (int)Math.Ceiling(u.Kj(b));
if (battery.childItems.Count == 0 || !PowerHelper.DrawPowerSource(battery.childItem, kj)) { Log.Info("涡轮增压:矿机电池电量不够,这一轮没挖"); return; } if (battery.childItems.Count == 0 || !PowerHelper.DrawPowerSource(battery.childItem, kj)) { Log.Info("涡轮增压:矿机电池电量不够,这一轮没挖"); return; }
TurboMine.Round(m, new List<KeyValuePair<GameItem, ModuleBonus>> { new KeyValuePair<GameItem, ModuleBonus>(m, b) }); TurboMine.Round(m, new List<KeyValuePair<GameItem, ModuleBonus>> { new KeyValuePair<GameItem, ModuleBonus>(m, b) });
MachineHelper.OnMachineActioned(m, modules);
Update(m, modules); Update(m, modules);
} }
+11 -4
View File
@@ -5,7 +5,7 @@ using Decentralized.Domain;
namespace Decentralized namespace Decentralized
{ {
/// <summary> /// <summary>
/// Web3 黑市的货物进出:每周刷新现货与订单目录,夜间推进订单并写夜间日志, /// Web3 黑市的货物进出:每周一、周四上新现货与订单目录,夜间推进订单并写夜间日志,
/// 上门(快递员当顾客上门)把到货交给玩家。 /// 上门(快递员当顾客上门)把到货交给玩家。
/// </summary> /// </summary>
public static class BlackDelivery public static class BlackDelivery
@@ -83,11 +83,12 @@ namespace Decentralized
public static GoodKind KindOf(string id) => id.StartsWith("gpu:") ? GoodKind.Gpu : Merchants.Info(id).Kind; public static GoodKind KindOf(string id) => id.StartsWith("gpu:") ? GoodKind.Gpu : Merchants.Info(id).Kind;
/// <summary>每周刷新:现货与订单目录一起。返回是否刷新了。</summary> /// <summary>上新:现货与订单目录一起。返回是否刷新了。</summary>
public static bool Restock(SaveData d, int day, bool force = false) public static bool Restock(SaveData d, int day, bool force = false)
{ {
int rep = StoreReputation.GetBMReputation(); int rep = StoreReputation.GetBMReputation();
if (d.Black.Closed(day)) return false; // day 是今晚,货要赶在明早:重新开张的当晚就上货
if (d.Black.Closed(day + 1)) return false;
if (force) d.Black.RefreshedDay = -999; if (force) d.Black.RefreshedDay = -999;
if (!d.Black.Refresh(day, rep, d.Rng, Value)) return false; if (!d.Black.Refresh(day, rep, d.Rng, Value)) return false;
d.Black.RefreshOrders(day, rep, d.Rng, Value); d.Black.RefreshOrders(day, rep, d.Rng, Value);
@@ -141,7 +142,13 @@ namespace Decentralized
} }
if (e.Kind == "rug") Night_RugNews(day); if (e.Kind == "rug") Night_RugNews(day);
} }
if (Unlock.BlackUnlocked && !crackdown) Restock(d, day); if (Unlock.BlackUnlocked && !crackdown)
{
// NPC 买家先买,当晚新上的货不受影响
int sold = d.Black.NpcBuys(d.Rng);
if (sold > 0) Log.Info($"黑市 NPC 买家:第 {day} 天夜里买走 {sold} 件,现货剩 {d.Black.Offers.Count} 种,货架剩 {d.Black.Catalog.Count} 种");
Restock(d, day);
}
} }
private static void Night_RugNews(int day) => News.Show("pd_news_bmrug_" + day, L.T("news.bmrug.title"), L.T("news.bmrug.desc"), 4); private static void Night_RugNews(int day) => News.Show("pd_news_bmrug_" + day, L.T("news.bmrug.title"), L.T("news.bmrug.desc"), 4);
+1 -31
View File
@@ -11,7 +11,7 @@ namespace Decentralized
public static class CoinCustomers public static class CoinCustomers
{ {
private static readonly HashSet<StoreClient> Marked = new HashSet<StoreClient>(); private static readonly HashSet<StoreClient> Marked = new HashSet<StoreClient>();
private static int markDay = -1, supportDay = -1; private static int markDay = -1;
public static void Subscribe() public static void Subscribe()
{ {
@@ -177,12 +177,6 @@ namespace Decentralized
{ {
int day = StoreStation.GetDayCounter(); int day = StoreStation.GetDayCounter();
if (day != markDay) { Marked.Clear(); markDay = day; } if (day != markDay) { Marked.Clear(); markDay = day; }
// 假客服:一天最多一次
if (day >= Tuning.ScamMinDay && supportDay != day)
{
supportDay = day;
if (Session.Data.Rng.Chance(Tuning.FakeSupportChance)) manager.AddClient(FakeSupport());
}
foreach (var c in manager.clientStack) foreach (var c in manager.clientStack)
{ {
if (c == null || c.isSecurity || Marked.Contains(c) || c.clientIntent != StoreClient.ClientIntent.BUY || c.isNoContributeToEvidence) continue; if (c == null || c.isSecurity || Marked.Contains(c) || c.clientIntent != StoreClient.ClientIntent.BUY || c.isNoContributeToEvidence) continue;
@@ -227,30 +221,6 @@ namespace Decentralized
Log.Info($"伪造转账:{client.displayName} 拿走 {item.name}({cost} 信用点),{asset} 不会到账"); Log.Info($"伪造转账:{client.displayName} 拿走 {item.name}({cost} 信用点),{asset} 不会到账");
} }
/// <summary>假客服:自称 Poinbase 客服,说账户被风控,要把 CRC 转到"安全地址"。Poinbase 从不上门,也从不要求转账;转过去的币就没了。</summary>
public static StoreClient FakeSupportForTest() => FakeSupport();
private static StoreClient FakeSupport()
{
var d = Session.Data;
string addr = ChainAddress.Make(d.Rng.NextUInt());
d.Scams.ScamAddrs.Add(addr);
int amount = 100 * d.Rng.Range(3, 15);
var c = new StoreClient
{
identifier = "pd_fake_support", displayName = L.T("scam.support.name"), spriteName = SpriteDict.GetRandomUpperSpriteName(),
clientIntent = StoreClient.ClientIntent.DIALOGUE,
};
c.mainDialogue.SetText(c.displayName, L.T("scam.support.1")).NextDialogue()
.SetText(c.displayName, L.T("scam.support.2", amount, addr)).NextDialogue()
.SetText(c.displayName, L.T("scam.support.3"));
ModHelper.SetClientSource(c, ModInfo.Id);
c.AddBasicDialog();
c.CompleteClientCreation();
Log.Info($"假客服上门:要 {amount} CRC 转到 {addr}");
return c;
}
/// <summary>成交后顾客说的话:告诉玩家这单是币到账,不是信用点。</summary> /// <summary>成交后顾客说的话:告诉玩家这单是币到账,不是信用点。</summary>
private static void Say(StoreClient client, string asset, double total) private static void Say(StoreClient client, string asset, double total)
{ {
+1 -1
View File
@@ -7,7 +7,7 @@ namespace Decentralized
{ {
public const string Id = "probably_decentralized"; public const string Id = "probably_decentralized";
public const string Name = "Probably Decentralized"; public const string Name = "Probably Decentralized";
public const string Version = "2.0.0"; public const string Version = "2.1.0";
} }
/// <summary>本地化:游戏的 mod 本地化表(ModFiles/Localization/*.csv),当前语言缺失时回退英文。</summary> /// <summary>本地化:游戏的 mod 本地化表(ModFiles/Localization/*.csv),当前语言缺失时回退英文。</summary>
-8
View File
@@ -106,14 +106,6 @@ namespace Decentralized
d.Market.Wick = 0; double w = 0; for (int i = 0; i < 200 && w == 0; i++) w = d.Market.TryWick(d.Rng, day); d.Market.Wick = 0; double w = 0; for (int i = 0; i < 200 && w == 0; i++) w = d.Market.TryWick(d.Rng, day);
Log.Info($"测试:空投 {string.Join(",", d.Scams.Airdrops.Select(a => a.Name + (a.Scam ? "*" : "")))};池子 {string.Join(",", d.Scams.Pools.Select(p => p.Name + (p.Scam ? "*" : "")))};插针 {w:0.000} 回去 {d.Market.WickBack:0.00}"); Log.Info($"测试:空投 {string.Join(",", d.Scams.Airdrops.Select(a => a.Name + (a.Scam ? "*" : "")))};池子 {string.Join(",", d.Scams.Pools.Select(p => p.Name + (p.Scam ? "*" : "")))};插针 {w:0.000} 回去 {d.Market.WickBack:0.00}");
})); }));
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Scams: fake support now (test)", () => Log.Guard("假客服测试", () =>
{
var m = PlayerStore.Instance.storeClientManager;
var c = CoinCustomers.FakeSupportForTest();
PlayerStore.Instance.currentClientInstance = null;
m.clientStack.Insert(0, c);
PlayerStore.Instance.TryCallNextClient();
}));
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Chart: run market 30 days (test)", () => Log.Guard("K 线测试", () => ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Chart: run market 30 days (test)", () => Log.Guard("K 线测试", () =>
{ {
// 用真实的行情过程往前跑 30 天,记录蜡烛(会改动这一局的 PSC 价格,只在测试存档用) // 用真实的行情过程往前跑 30 天,记录蜡烛(会改动这一局的 PSC 价格,只在测试存档用)
+2
View File
@@ -655,6 +655,7 @@ namespace Decentralized
Session.TonightPoweredRigs++; Session.TonightPoweredRigs++;
Session.TonightKj += kj; Session.TonightKj += kj;
foreach (var c in list) { Session.TonightCards.Add(new KeyValuePair<GameItem, ModuleBonus>(c, b)); Session.TonightMachine[c] = rig; } foreach (var c in list) { Session.TonightCards.Add(new KeyValuePair<GameItem, ModuleBonus>(c, b)); Session.TonightMachine[c] = rig; }
MachineHelper.OnMachineActioned(rig, modules); // 算一次运转:自学习成长、过压烧毁、退化模块掉属性,今晚的加成按运转前算
UpdateRig(rig, modules, cards); UpdateRig(rig, modules, cards);
} }
@@ -667,6 +668,7 @@ namespace Decentralized
int kj = RigKj(cards, b); int kj = RigKj(cards, b);
if (battery.childItems.Count == 0 || !PowerHelper.DrawPowerSource(battery.childItem, kj)) { Log.Info("涡轮增压:矿架电池电量不够,这一轮没挖"); return; } if (battery.childItems.Count == 0 || !PowerHelper.DrawPowerSource(battery.childItem, kj)) { Log.Info("涡轮增压:矿架电池电量不够,这一轮没挖"); return; }
TurboMine.Round(rig, list.Select(c => new KeyValuePair<GameItem, ModuleBonus>(c, b)).ToList()); TurboMine.Round(rig, list.Select(c => new KeyValuePair<GameItem, ModuleBonus>(c, b)).ToList());
MachineHelper.OnMachineActioned(rig, modules);
UpdateRig(rig, modules, cards); UpdateRig(rig, modules, cards);
} }
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,Eingefrorene {0} {1} freigegeben.
news.crtfreeze.title,Schwarzmarkt friert für Razzia einige CRT-Adressen ein news.crtfreeze.title,Schwarzmarkt friert für Razzia einige CRT-Adressen ein
news.crtfreeze.desc,"Gerüchten zufolge hat der Schwarzmarkt Security eine Liste von CRT-Adressen übergeben, um in Ruhe gelassen zu werden. Halter mit niedrigem Ansehen werden eher eingefroren." news.crtfreeze.desc,"Gerüchten zufolge hat der Schwarzmarkt Security eine Liste von CRT-Adressen übergeben, um in Ruhe gelassen zu werden. Halter mit niedrigem Ansehen werden eher eingefroren."
black.upgrade.title,Web3-Shop black.upgrade.title,Web3-Shop
black.upgrade.desc,"Schaltet den Shop auf der Graunetz-Seite des Terminals frei: der On-Chain-Zweig der Schwarzmarkt-Fraktion. Wöchentlich wechselnde Schmuggelware, gelegentlich Hightech-Waren und Grafikkarten (mit Aufpreis); per Sofortkauf erwerben oder bestellen und auf einen Kurier warten. Nur Coins (PSC, CRT, CRA, Ponero), kontaminierte Coins werden akzeptiert. Erfordert Schwarzmarkt-Ansehen; offline bei Razzien." black.upgrade.desc,"Schaltet den Shop auf der Graunetz-Seite des Terminals frei: der On-Chain-Zweig der Schwarzmarkt-Fraktion. Jeden Montag und Donnerstag neue Schmuggelware, gelegentlich Hightech-Waren und Grafikkarten (mit Aufpreis); per Sofortkauf erwerben oder bestellen und auf einen Kurier warten. Nur Coins (PSC, CRT, CRA, Ponero), kontaminierte Coins werden akzeptiert. Erfordert Schwarzmarkt-Ansehen; offline bei Razzien."
black.offline,Der On-Chain-Zugang des Shops ist während der Razzia offline. black.offline,Der On-Chain-Zugang des Shops ist während der Razzia offline.
black.closed,"Schwarzmarkt-Ansehen von {0} erforderlich, um den Shop zu betreten (aktuell {1})." black.closed,"Schwarzmarkt-Ansehen von {0} erforderlich, um den Shop zu betreten (aktuell {1})."
black.sub.buy,Kaufen black.sub.buy,Kaufen
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Schmuggelware (hoch)
black.kind.Tech,Hightech (Aufpreis) black.kind.Tech,Hightech (Aufpreis)
nightlog.bm.ready,"Schwarzmarkt: {0} eingetroffen; sobald du öffnest, kommt ein Kurier vorbei." nightlog.bm.ready,"Schwarzmarkt: {0} eingetroffen; sobald du öffnest, kommt ein Kurier vorbei."
guide.web3.title,Web3-Handbuch guide.web3.title,Web3-Handbuch
guide.web3.text,"Bank und Handel: Die Bank-Seite ist schreibgeschützt und zeigt Bargeld, Miete und die CRC auf deinem Poinbase-Konto an. Die Guthaben-Seite von Poinbase wickelt Ein- und Auszahlungen ab; wähle zuerst den Coin: CRC kann über das Bankkonto oder eine Wallet laufen, jeder andere Coin nur über eine Wallet. Einzahlungen von der Bank wandeln Credits in CRC auf deinem Poinbase-Konto um; Auszahlungen auf das Bankkonto wandeln CRC ohne Prüfung wieder in Credits um (das Poinbase-Konto hält ausschließlich sauberes Geld). Auszahlungen an eine Wallet erfordern eine Empfängeradresse und einige Bestätigungen, bevor sie ankommen; die Gas-Gebühr ist fest auf der normalen Stufe und wird vom gesendeten Coin abgezogen. Ein falsches Adressformat oder eine fehlerhafte Prüfsumme wird abgelehnt; eine korrekt formatierte Adresse, die niemand nutzt, bedeutet, dass die Coins verloren sind.¶Handel: PSC steht für Probably Stolen Coin, den von Grafikkarten und Minern geschürften Coin. Der Poinbase-Spotmarkt hat zwei Handelspaare, PSC/CRC und SPARK/CRC, die dem im Chart ausgewählten Coin folgen. Käufe und Verkäufe werden jeweils als Betrag des gehandelten Coins eingegeben; die Vorschau zeigt die gezahlte oder erhaltene Notierungswährung, der Durchschnittspreis enthält die Gebühr, die Slippage nicht.¶Die Web3-Handelsseite kann zwei beliebige Coins tauschen, immer über CRC: Liegt CRC auf einer Seite, nutzt sie einen Pool, andernfalls zwei Pools mit doppelten Gebühren und gestapelter Slippage; die Vorschau zeigt den erhaltenen Betrag, die durchlaufenen Pools und den Verlust. Stablecoin-Swaps (CRT oder CRA gegen CRC) nutzen Stable-Pools: eine Gebühr von {StableFee:%} und nahezu keine Slippage nahe der Bindung; bei einer Entkopplung wird die Liquidität dünner, und bei einem Kollaps wird sie abgezogen und die Slippage springt in die Höhe.§Hardware-Wallets: On-Chain-Coins liegen in PLEDGER-Hardware-Wallets, jede mit eigenen Guthaben und kontaminierten Coins (bei jedem Coin wird erfasst, wie viele davon kontaminiert sind; siehe Kontamination). Eine Wallet ist ein Gegenstand: Ziehe sie auf das Handelsterminal, um sie zu laden. Öffne sie auf der Wallets-Seite des Terminals; das Verbinden und Trennen erfolgt oben rechts am Terminal. Der Handel auf der Web3-Seite sowie der Shop und Mixer auf der Graunetz-Seite nutzen die verbundene Wallet; ohne Wallet oder Verbindung sind sie schreibgeschützt und jedes Guthaben steht bei 0. Kunden, die mit Coins zahlen, zahlen auf die verbundene Wallet ein.¶Zahlungen (Shop, Mixer, Ponero-Schalter, Listungsgebühren) beginnen als Rechnung auf dem Terminal; tippe die Empfängeradresse auf der Wallet ein und halte ✓ gedrückt, um zu signieren. Die letzten beiden Zeichen einer Adresse sind eine Prüfsumme, sodass ein Tippfehler um ein Zeichen meistens abgefangen wird; gelegentlich ist sie zufällig gültig und die Coins gehen an eine Adresse, die niemand nutzt. DEX-Swaps erfordern ebenfalls eine Signatur auf der Wallet.¶Poinbase ist ein verwahrtes Konto; Einzahlungen werden von einer Wallet an die Einzahlungsadresse von Poinbase gesendet (nur PSC, CRC und SPARK; die konforme Börse akzeptiert weder das CRT des Schwarzmarkts noch das CRA der Revolution, und die Wallet blockiert das Senden an die Einzahlungsadresse; es können nur saubere Coins eingezahlt werden, siehe Kontamination) und Auszahlungen werden auf der Guthaben-Seite von Poinbase veranlasst. Der Explorer auf der Wallets-Seite sucht Überweisungen nach Adresse und zeigt nur tatsächlich erfolgte Überweisungen an: jede Bewegung in und aus deinen Wallets (Überweisungen, DEX-Swaps und andere Contract-Aufrufe, Miner-Auszahlungen, Auszahlungen, von anderen gesendete Coins); Ponero ist ein Privacy Coin und wird nie angezeigt. Weitere Hardware-Wallets werden von Dr. Jackson verkauft; ziehe eine auf das Handelsterminal, um sie hinzuzufügen, bis zu maximal {WalletMax}. Der Shop bietet günstigere an. Eine Wallet, die du nicht mehr benötigst, kann auf der Wallets-Seite zerstört werden; ihre Coins sind unwiderruflich verloren, und alles, was danach an ihre Adresse gesendet wird, ist ebenfalls verloren.¶Überweisungen zahlen eine Gas-Gebühr: langsam, normal oder schnell, und die Gas-Preise steigen und fallen über etwa eine Woche hinweg; bei Netzwerküberlastung steigen die Gas-Gebühren und langsame Transaktionen können aus dem Mempool verworfen werden. Prüfe vor dem Absenden die vollständige Adresse.§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 schnLine truncated guide.web3.text,"Bank und Handel: Die Bank-Seite ist schreibgeschützt und zeigt Bargeld, Miete und die CRC auf deinem Poinbase-Konto an. Die Guthaben-Seite von Poinbase wickelt Ein- und Auszahlungen ab; wähle zuerst den Coin: CRC kann über das Bankkonto oder eine Wallet laufen, jeder andere Coin nur über eine Wallet. Einzahlungen von der Bank wandeln Credits in CRC auf deinem Poinbase-Konto um; Auszahlungen auf das Bankkonto wandeln CRC ohne Prüfung wieder in Credits um (das Poinbase-Konto hält ausschließlich sauberes Geld). Auszahlungen an eine Wallet erfordern eine Empfängeradresse und einige Bestätigungen, bevor sie ankommen; die Gas-Gebühr ist fest auf der normalen Stufe und wird vom gesendeten Coin abgezogen. Ein falsches Adressformat oder eine fehlerhafte Prüfsumme wird abgelehnt; eine korrekt formatierte Adresse, die niemand nutzt, bedeutet, dass die Coins verloren sind.¶Handel: PSC steht für Probably Stolen Coin, den von Grafikkarten und Minern geschürften Coin. Der Poinbase-Spotmarkt hat zwei Handelspaare, PSC/CRC und SPARK/CRC, die dem im Chart ausgewählten Coin folgen. Käufe und Verkäufe werden jeweils als Betrag des gehandelten Coins eingegeben; die Vorschau zeigt die gezahlte oder erhaltene Notierungswährung, der Durchschnittspreis enthält die Gebühr, die Slippage nicht.¶Die Web3-Handelsseite kann zwei beliebige Coins tauschen, immer über CRC: Liegt CRC auf einer Seite, nutzt sie einen Pool, andernfalls zwei Pools mit doppelten Gebühren und gestapelter Slippage; die Vorschau zeigt den erhaltenen Betrag, die durchlaufenen Pools und den Verlust. Stablecoin-Swaps (CRT oder CRA gegen CRC) nutzen Stable-Pools: eine Gebühr von {StableFee:%} und nahezu keine Slippage nahe der Bindung; bei einer Entkopplung wird die Liquidität dünner, und bei einem Kollaps wird sie abgezogen und die Slippage springt in die Höhe.§Hardware-Wallets: On-Chain-Coins liegen in PLEDGER-Hardware-Wallets, jede mit eigenen Guthaben und kontaminierten Coins (bei jedem Coin wird erfasst, wie viele davon kontaminiert sind; siehe Kontamination). Eine Wallet ist ein Gegenstand: Ziehe sie auf das Handelsterminal, um sie zu laden. Öffne sie auf der Wallets-Seite des Terminals; das Verbinden und Trennen erfolgt oben rechts am Terminal. Der Handel auf der Web3-Seite sowie der Shop und Mixer auf der Graunetz-Seite nutzen die verbundene Wallet; ohne Wallet oder Verbindung sind sie schreibgeschützt und jedes Guthaben steht bei 0. Kunden, die mit Coins zahlen, zahlen auf die verbundene Wallet ein.¶Zahlungen (Shop, Mixer, Ponero-Schalter, Listungsgebühren) beginnen als Rechnung auf dem Terminal; tippe die Empfängeradresse auf der Wallet ein und halte ✓ gedrückt, um zu signieren. Die letzten beiden Zeichen einer Adresse sind eine Prüfsumme, sodass ein Tippfehler um ein Zeichen meistens abgefangen wird; gelegentlich ist sie zufällig gültig und die Coins gehen an eine Adresse, die niemand nutzt. DEX-Swaps erfordern ebenfalls eine Signatur auf der Wallet.¶Poinbase ist ein verwahrtes Konto; Einzahlungen werden von einer Wallet an die Einzahlungsadresse von Poinbase gesendet (nur PSC, CRC und SPARK; die konforme Börse akzeptiert weder das CRT des Schwarzmarkts noch das CRA der Revolution, und die Wallet blockiert das Senden an die Einzahlungsadresse; es können nur saubere Coins eingezahlt werden, siehe Kontamination) und Auszahlungen werden auf der Guthaben-Seite von Poinbase veranlasst. Der Explorer auf der Wallets-Seite sucht Überweisungen nach Adresse und zeigt nur tatsächlich erfolgte Überweisungen an: jede Bewegung in und aus deinen Wallets (Überweisungen, DEX-Swaps und andere Contract-Aufrufe, Miner-Auszahlungen, Auszahlungen, von anderen gesendete Coins); Ponero ist ein Privacy Coin und wird nie angezeigt. Weitere Hardware-Wallets werden von Dr. Jackson verkauft; ziehe eine auf das Handelsterminal, um sie hinzuzufügen, bis zu maximal {WalletMax}. Der Shop bietet günstigere an. Eine Wallet, die du nicht mehr benötigst, kann auf der Wallets-Seite zerstört werden; ihre Coins sind unwiderruflich verloren, und alles, was danach an ihre Adresse gesendet wird, ist ebenfalls verloren.¶Überweisungen zahlen eine Gas-Gebühr: langsam, normal oder schnell, und die Gas-Preise steigen und fallen über etwa eine Woche hinweg; bei Netzwerküberlastung steigen die Gas-Gebühren und langsame Transaktionen können aus dem Mempool verworfen werden. Prüfe vor dem Absenden die vollständige Adresse.§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 schnLine truncated
courier.odd1,...Paket ist da. courier.odd1,...Paket ist da.
courier.odd2,(Seine Hand bleibt in der Tasche.) Hier unterschreiben. courier.odd2,(Seine Hand bleibt in der Tasche.) Hier unterschreiben.
courier.sign,Unterschreiben courier.sign,Unterschreiben
@@ -346,7 +346,6 @@ hw.tx.signing,Wird signiert…
hw.tx.mempool,Übertragen; wartet im Mempool… hw.tx.mempool,Übertragen; wartet im Mempool…
hw.tx.packed,In Block #{0} enthalten hw.tx.packed,In Block #{0} enthalten
hw.tx.confirm,Block #{0} Bestätigung {1}/{2} hw.tx.confirm,Block #{0} Bestätigung {1}/{2}
hw.skip,Überspringen
hw.done.h,Bestätigt hw.done.h,Bestätigt
hw.done.block,Block #{0} hw.done.block,Block #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,Einfügen
hw.copied,Adresse kopiert. hw.copied,Adresse kopiert.
hw.copied.addr,{0} kopiert hw.copied.addr,{0} kopiert
hw.balance.frozen," (gefroren {0})" hw.balance.frozen," (gefroren {0})"
hw.balance.dirty," ({0} kontaminiert)"
wallets.destroy,Zerstören wallets.destroy,Zerstören
wallets.destroy.sure,Bestätigen wallets.destroy.sure,Bestätigen
wallets.destroyed,{0} zerstört: {1} wallets.destroyed,{0} zerstört: {1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,Renditepool „{0}“ hat einen Rug Pull hingelegt; {1} CRC vo
nightlog.scam.dry,Renditepool „{0}“ hat keine Reserven mehr und wurde geschlossen; {1} CRC wurden an {2} zurückgegeben. nightlog.scam.dry,Renditepool „{0}“ hat keine Reserven mehr und wurde geschlossen; {1} CRC wurden an {2} zurückgegeben.
nightlog.scam.paid,Auszahlung aus „{0}“ eingetroffen: {2} hat {1} CRC erhalten. nightlog.scam.paid,Auszahlung aus „{0}“ eingetroffen: {2} hat {1} CRC erhalten.
nightlog.scam.fakepay,Gefälschte Überweisung: {0} nightlog.scam.fakepay,Gefälschte Überweisung: {0}
nightlog.scam.sent,Die an die sichere Adresse des „Supports“ gesendeten {0} {1} landeten bei einem Betrüger.
coinpay.intro,Ich zahle in {0}; die Bestätigung auf der Chain dauert einen Moment. coinpay.intro,Ich zahle in {0}; die Bestätigung auf der Chain dauert einen Moment.
coinpay.intro.fake,"{0} habe ich schon gesendet, hier ist der Screenshot. Rück die Ware raus, ich habe es eilig." coinpay.intro.fake,"{0} habe ich schon gesendet, hier ist der Screenshot. Rück die Ware raus, ich habe es eilig."
coinpay.fake.entry,"{0} hat {1} mitgenommen und behauptet, Coins im Wert von {2} Credits bezahlt zu haben; auf der Chain gibt es keine solche Transaktion." coinpay.fake.entry,"{0} hat {1} mitgenommen und behauptet, Coins im Wert von {2} Credits bezahlt zu haben; auf der Chain gibt es keine solche Transaktion."
scam.support.name,Poinbase-Support
scam.support.1,"Hallo, hier ist der Poinbase-Support. Wir haben eine ungewöhnliche Anmeldung in Ihrem Konto festgestellt und es wurde markiert."
scam.support.2,Bitte senden Sie heute {0} CRC zur Verifizierung an die sichere Adresse {1}; der Betrag wird direkt im Anschluss zurückerstattet.
scam.support.3,"Andernfalls wird das Konto dauerhaft gefroren. Ich muss los, denken Sie an die Überweisung."
predict.sold.caught,"Verkauft, {0} erhalten. Die Polizei vermutet Insiderhandel; {1} CRC davon werden als kontaminiert markiert." predict.sold.caught,"Verkauft, {0} erhalten. Die Polizei vermutet Insiderhandel; {1} CRC davon werden als kontaminiert markiert."
predict.row.move," (letzte Nacht {0} {1})" predict.row.move," (letzte Nacht {0} {1})"
predict.stats.h,Verlauf (durchschnittl. Eröffnungskurs / tatsächliche Quote) predict.stats.h,Verlauf (durchschnittl. Eröffnungskurs / tatsächliche Quote)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,"Beschlagnahmt, geschlossen bis Tag {0}"
ownmix.status.open,Geöffnet ownmix.status.open,Geöffnet
ownmix.status.paused,Pausiert ownmix.status.paused,Pausiert
ownmix.k.fee,Gebühr ownmix.k.fee,Gebühr
ownmix.k.rating,Ansehen (Restkontamination) ownmix.k.rating,Wascheffizienz
ownmix.k.heat,Fahndungsdruck ownmix.k.heat,Fahndungsdruck
ownmix.heat.0,Niedrig ownmix.heat.0,Niedrig
ownmix.heat.1,Mittel ownmix.heat.1,Mittel
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,Frozen {0} {1} thawed.
news.crtfreeze.title,Black market freezes some CRT addresses for the crackdown news.crtfreeze.title,Black market freezes some CRT addresses for the crackdown
news.crtfreeze.desc,Word is the black market gave security a list of CRT addresses in exchange for being left alone. Holders with low standing are likelier to be frozen. news.crtfreeze.desc,Word is the black market gave security a list of CRT addresses in exchange for being left alone. Holders with low standing are likelier to be frozen.
black.upgrade.title,Web3 Shop black.upgrade.title,Web3 Shop
black.upgrade.desc,"Unlocks the shop in the terminal's Gray Net page: the black-market faction's on-chain arm. Weekly shelves of contraband, occasionally high-tech goods and GPUs (at a markup); buy spot, or order and wait for a courier. Coin only (PSC, CRT, CRA, Ponero), tainted coin accepted. Needs black-market standing; offline during crackdowns." black.upgrade.desc,"Unlocks the shop in the terminal's Gray Net page: the black-market faction's on-chain arm. Shelves of contraband restocked every Monday and Thursday, occasionally high-tech goods and GPUs (at a markup); buy spot, or order and wait for a courier. Coin only (PSC, CRT, CRA, Ponero), tainted coin accepted. Needs black-market standing; offline during crackdowns."
black.offline,The shop's on-chain entrance is offline during the crackdown. black.offline,The shop's on-chain entrance is offline during the crackdown.
black.closed,You need black-market standing of {0} to enter the shop (currently {1}). black.closed,You need black-market standing of {0} to enter the shop (currently {1}).
black.sub.buy,Buy black.sub.buy,Buy
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Contraband (high)
black.kind.Tech,High-tech (markup) black.kind.Tech,High-tech (markup)
nightlog.bm.ready,Black market: {0} arrived; a courier will come by once you open. nightlog.bm.ready,Black market: {0} arrived; a courier will come by once you open.
guide.web3.title,Web3 Handbook 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 with no screening (the Poinbase account only ever holds clean money). 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. Poinbase spot has two pairs, PSC/CRC and SPARK/CRC, following the coin picked on the chart. 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. Stablecoin swaps (CRT or CRA against CRC) use stable pools: a {StableFee:%} fee and almost no slippage near the peg; during a depeg liquidity thins, and in a collapse it is pulled and slippage jumps.§Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and dirty coins (each coin tracks how many of it are dirty; see 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 (only PSC, CRC and SPARK; the compliant exchange takes neither the black market's CRT nor the Revolution's CRA, and the wallet blocks sending them to the deposit address; only clean coins can be deposited, see Taint) 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: every movement in and out of your wallets (transfers, DEX swaps and other contract calls, miner payouts, withdrawals, coins others send you); Ponero is a privacy coin and never shows. 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 chanceLine 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 with no screening (the Poinbase account only ever holds clean money). 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. Poinbase spot has two pairs, PSC/CRC and SPARK/CRC, following the coin picked on the chart. 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. Stablecoin swaps (CRT or CRA against CRC) use stable pools: a {StableFee:%} fee and almost no slippage near the peg; during a depeg liquidity thins, and in a collapse it is pulled and slippage jumps.§Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and dirty coins (each coin tracks how many of it are dirty; see 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 (only PSC, CRC and SPARK; the compliant exchange takes neither the black market's CRT nor the Revolution's CRA, and the wallet blocks sending them to the deposit address; only clean coins can be deposited, see Taint) 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: every movement in and out of your wallets (transfers, DEX swaps and other contract calls, miner payouts, withdrawals, coins others send you); Ponero is a privacy coin and never shows. 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 chanceLine truncated
courier.odd1,...Package is here. courier.odd1,...Package is here.
courier.odd2,(His hand stays in his pocket.) Sign here. courier.odd2,(His hand stays in his pocket.) Sign here.
courier.sign,Sign courier.sign,Sign
@@ -346,7 +346,6 @@ hw.tx.signing,Signing…
hw.tx.mempool,Broadcast; waiting in the mempool… hw.tx.mempool,Broadcast; waiting in the mempool…
hw.tx.packed,Included in block #{0} hw.tx.packed,Included in block #{0}
hw.tx.confirm,Block #{0} confirmation {1}/{2} hw.tx.confirm,Block #{0} confirmation {1}/{2}
hw.skip,Skip
hw.done.h,Confirmed hw.done.h,Confirmed
hw.done.block,Block #{0} hw.done.block,Block #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,Paste
hw.copied,Address copied. hw.copied,Address copied.
hw.copied.addr,Copied {0} hw.copied.addr,Copied {0}
hw.balance.frozen," (frozen {0})" hw.balance.frozen," (frozen {0})"
hw.balance.dirty," ({0} dirty)"
wallets.destroy,Destroy wallets.destroy,Destroy
wallets.destroy.sure,Confirm wallets.destroy.sure,Confirm
wallets.destroyed,Destroyed {0}: {1} wallets.destroyed,Destroyed {0}: {1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,"Yield pool ""{0}"" rugged; {1} CRC from {2} is gone."
nightlog.scam.dry,"Yield pool ""{0}"" ran out of reserve and closed; {1} CRC returned to {2}." nightlog.scam.dry,"Yield pool ""{0}"" ran out of reserve and closed; {1} CRC returned to {2}."
nightlog.scam.paid,"Withdrawal from ""{0}"" arrived: {2} received {1} CRC." nightlog.scam.paid,"Withdrawal from ""{0}"" arrived: {2} received {1} CRC."
nightlog.scam.fakepay,Forged transfer: {0} nightlog.scam.fakepay,Forged transfer: {0}
nightlog.scam.sent,"The {0} {1} sent to the ""support"" safe address went to a scammer."
coinpay.intro,I'll pay in {0}; it takes a moment to confirm on chain. coinpay.intro,I'll pay in {0}; it takes a moment to confirm on chain.
coinpay.intro.fake,"Already sent the {0}, here's the screenshot. Hand it over, I'm in a hurry." coinpay.intro.fake,"Already sent the {0}, here's the screenshot. Hand it over, I'm in a hurry."
coinpay.fake.entry,{0} took {1} claiming to have paid {2} credits in coin; no such transaction on chain. coinpay.fake.entry,{0} took {1} claiming to have paid {2} credits in coin; no such transaction on chain.
scam.support.name,Poinbase Support
scam.support.1,"Hello, Poinbase support here. We detected an unusual login on your account and it has been flagged."
scam.support.2,Please send {0} CRC to the safe address {1} today for verification; it will be returned right after.
scam.support.3,"Otherwise the account will be frozen for good. I have to go, remember to send it."
predict.sold.caught,"Sold, received {0}. Police suspect insider trading; {1} CRC of it is marked as dirty." predict.sold.caught,"Sold, received {0}. Police suspect insider trading; {1} CRC of it is marked as dirty."
predict.row.move," (last night {0} {1})" predict.row.move," (last night {0} {1})"
predict.stats.h,History (avg opening price / actual rate) predict.stats.h,History (avg opening price / actual rate)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,"Seized, closed until day {0}"
ownmix.status.open,Open ownmix.status.open,Open
ownmix.status.paused,Paused ownmix.status.paused,Paused
ownmix.k.fee,Fee ownmix.k.fee,Fee
ownmix.k.rating,Reputation (taint left on payouts) ownmix.k.rating,Wash Efficiency
ownmix.k.heat,Heat ownmix.k.heat,Heat
ownmix.heat.0,Low ownmix.heat.0,Low
ownmix.heat.1,Medium ownmix.heat.1,Medium
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,Los {0} {1} congelados se han descongelado.
news.crtfreeze.title,El mercado negro congela algunas direcciones de CRT ante la represión news.crtfreeze.title,El mercado negro congela algunas direcciones de CRT ante la represión
news.crtfreeze.desc,Se rumorea que el mercado negro entregó una lista de direcciones de CRT a Seguridad a cambio de inmunidad. Quienes tengan baja reputación son más propensos a ser congelados. news.crtfreeze.desc,Se rumorea que el mercado negro entregó una lista de direcciones de CRT a Seguridad a cambio de inmunidad. Quienes tengan baja reputación son más propensos a ser congelados.
black.upgrade.title,Tienda Web3 black.upgrade.title,Tienda Web3
black.upgrade.desc,"Desbloquea la tienda en la página Red gris de la terminal: el brazo en cadena del mercado negro. Surtido semanal de contrabando, ocasionalmente artículos de alta tecnología y tarjetas gráficas (con sobreprecio); compra al contado o haz pedidos y espera al mensajero. Solo monedas (PSC, CRT, CRA, Ponero), se aceptan monedas contaminadas. Requiere reputación con el mercado negro; fuera de servicio durante represiones." black.upgrade.desc,"Desbloquea la tienda en la página Red gris de la terminal: el brazo en cadena del mercado negro. Surtido de contrabando cada lunes y jueves, ocasionalmente artículos de alta tecnología y tarjetas gráficas (con sobreprecio); compra al contado o haz pedidos y espera al mensajero. Solo monedas (PSC, CRT, CRA, Ponero), se aceptan monedas contaminadas. Requiere reputación con el mercado negro; fuera de servicio durante represiones."
black.offline,El acceso en cadena a la tienda está fuera de servicio durante la represión. black.offline,El acceso en cadena a la tienda está fuera de servicio durante la represión.
black.closed,Necesitas una reputación de {0} con el mercado negro para entrar a la tienda (actual: {1}). black.closed,Necesitas una reputación de {0} con el mercado negro para entrar a la tienda (actual: {1}).
black.sub.buy,Comprar black.sub.buy,Comprar
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Contrabando (alto)
black.kind.Tech,Alta tecnología (con sobreprecio) black.kind.Tech,Alta tecnología (con sobreprecio)
nightlog.bm.ready,Mercado negro: {0} ha llegado; un mensajero pasará en cuanto abras. nightlog.bm.ready,Mercado negro: {0} ha llegado; un mensajero pasará en cuanto abras.
guide.web3.title,Manual de Web3 guide.web3.title,Manual de Web3
guide.web3.text,"Banco y comercio: la página del Banco es de solo lectura y muestra el efectivo, el alquiler y el CRC en tu cuenta de Poinbase. La página de Fondos de Poinbase gestiona depósitos y retiros; primero elige la moneda: CRC puede operar mediante cuenta bancaria o billetera, mientras que cualquier otra moneda solo puede hacerlo mediante billetera. Depositar desde el banco convierte créditos en CRC dentro de tu cuenta de Poinbase; retirar al banco vuelve a convertir CRC en créditos sin revisión (la cuenta de Poinbase solo contiene dinero limpio). Retirar a una billetera requiere una dirección de destinatario y varias confirmaciones antes de llegar; la tarifa de Gas es fija en nivel normal y se descuenta de la moneda enviada. Un formato de dirección o suma de verificación incorrecto se rechaza; si la dirección tiene el formato correcto pero nadie la usa, las monedas se pierden.¶Comercio: PSC son las siglas de Probably Stolen Coin, la moneda extraída por tarjetas gráficas y mineros. El mercado spot de Poinbase tiene dos pares, PSC/CRC y SPARK/CRC, según la moneda seleccionada en el gráfico. Las compras y ventas se ingresan como una cantidad de la moneda negociada; la vista previa muestra la moneda de cotización pagada o recibida, el precio promedio incluye la comisión y el deslizamiento no.¶La página de comercio Web3 permite intercambiar cualquier par de monedas, siempre a través de CRC: con CRC en un extremo se usa un pool; de lo contrario, dos pools, con dos comisiones y deslizamiento acumulado; la vista previa muestra la cantidad recibida, los pools cruzados y la pérdida. Los intercambios entre monedas estables (CRT o CRA frente a CRC) utilizan pools estables: comisión del {StableFee:%} y casi nulo deslizamiento cerca de la paridad; durante una pérdida de paridad la liquidez disminuye, y ante un colapso se retira por completo disparando el deslizamiento.§Billeteras de hardware: las monedas en cadena residen en billeteras de hardware PLEDGER, cada una con sus propios saldos y monedas contaminadas (cada moneda registra cuántas unidades están contaminadas; consulta Contaminación). Una billetera es un objeto: arrástrala a la terminal de comercio para cargarla. Ábrela en la página de Billeteras de la terminal; conéctala y desconéctala en la esquina superior derecha de la terminal. El comercio en la página Web3 y la tienda y el mezclador en la página de la Red gris usan la billetera conectada; sin billetera o sin conexión son de solo lectura y todos los saldos marcan 0. Los clientes que pagan con monedas depositan en la billetera conectada.¶Los pagos (tienda, mezclador, mostrador de Ponero, tarifas de listado) 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 corresponden a una suma de verificación, por lo que un error de un solo carácter suele detectarse; de vez en cuando resulta ser válido por casualidad y las monedas van a una dirección que nadie usa. Los intercambios en DEX también requieren una firma en la billetera.¶Poinbase es una cuenta de custodia; los depósitos se envían desde una billetera a la dirección de depósito de Poinbase (solo PSC, CRC y SPARK; el intercambio regulado no acepta el CRT del Mercado negro ni el CRA de la Revolución, y la billetera bloquea su envío a la dirección de depósito; solo pueden depositarse monedas limpias, consulta Contaminación) y los retiros se inician en la página de Fondos de Poinbase. El Explorador en la página de Billeteras consulta transferencias por dirección y solo muestra las transacciones reales: cada movimiento entrante y saliente de tus billeteras (transferencias, intercambios en DEX y otras llamadas de contrato, pagos de mineros, retiros, monedas enviadas por otros); Ponero es una moneda de privacidad y nunca se muestra. El Dr. Jackson vende más billeteras de hardware; arrastra una a la terminal de comercio para agregarla, hasta un máximo de {WalletMax}. La tienda tiene opciones más económicas. Una billetera que ya no desees puede destruirse en la página de Billeteras; sus monedas se perderán para siempre, y todo lo que se envíe a su dirección después también se perderá.¶Las transferencias pagan una tarifa de Gas: lenta, normal o rápida, y los precios del Gas suben y bajan en ciclos de aproximadamente una semana; cuando la red está congestionada las tarifas de Gas aumentan y las transacciones lentas pueden ser eliminadas de la mempool. Revisa 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 Line truncated guide.web3.text,"Banco y comercio: la página del Banco es de solo lectura y muestra el efectivo, el alquiler y el CRC en tu cuenta de Poinbase. La página de Fondos de Poinbase gestiona depósitos y retiros; primero elige la moneda: CRC puede operar mediante cuenta bancaria o billetera, mientras que cualquier otra moneda solo puede hacerlo mediante billetera. Depositar desde el banco convierte créditos en CRC dentro de tu cuenta de Poinbase; retirar al banco vuelve a convertir CRC en créditos sin revisión (la cuenta de Poinbase solo contiene dinero limpio). Retirar a una billetera requiere una dirección de destinatario y varias confirmaciones antes de llegar; la tarifa de Gas es fija en nivel normal y se descuenta de la moneda enviada. Un formato de dirección o suma de verificación incorrecto se rechaza; si la dirección tiene el formato correcto pero nadie la usa, las monedas se pierden.¶Comercio: PSC son las siglas de Probably Stolen Coin, la moneda extraída por tarjetas gráficas y mineros. El mercado spot de Poinbase tiene dos pares, PSC/CRC y SPARK/CRC, según la moneda seleccionada en el gráfico. Las compras y ventas se ingresan como una cantidad de la moneda negociada; la vista previa muestra la moneda de cotización pagada o recibida, el precio promedio incluye la comisión y el deslizamiento no.¶La página de comercio Web3 permite intercambiar cualquier par de monedas, siempre a través de CRC: con CRC en un extremo se usa un pool; de lo contrario, dos pools, con dos comisiones y deslizamiento acumulado; la vista previa muestra la cantidad recibida, los pools cruzados y la pérdida. Los intercambios entre monedas estables (CRT o CRA frente a CRC) utilizan pools estables: comisión del {StableFee:%} y casi nulo deslizamiento cerca de la paridad; durante una pérdida de paridad la liquidez disminuye, y ante un colapso se retira por completo disparando el deslizamiento.§Billeteras de hardware: las monedas en cadena residen en billeteras de hardware PLEDGER, cada una con sus propios saldos y monedas contaminadas (cada moneda registra cuántas unidades están contaminadas; consulta Contaminación). Una billetera es un objeto: arrástrala a la terminal de comercio para cargarla. Ábrela en la página de Billeteras de la terminal; conéctala y desconéctala en la esquina superior derecha de la terminal. El comercio en la página Web3 y la tienda y el mezclador en la página de la Red gris usan la billetera conectada; sin billetera o sin conexión son de solo lectura y todos los saldos marcan 0. Los clientes que pagan con monedas depositan en la billetera conectada.¶Los pagos (tienda, mezclador, mostrador de Ponero, tarifas de listado) 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 corresponden a una suma de verificación, por lo que un error de un solo carácter suele detectarse; de vez en cuando resulta ser válido por casualidad y las monedas van a una dirección que nadie usa. Los intercambios en DEX también requieren una firma en la billetera.¶Poinbase es una cuenta de custodia; los depósitos se envían desde una billetera a la dirección de depósito de Poinbase (solo PSC, CRC y SPARK; el intercambio regulado no acepta el CRT del Mercado negro ni el CRA de la Revolución, y la billetera bloquea su envío a la dirección de depósito; solo pueden depositarse monedas limpias, consulta Contaminación) y los retiros se inician en la página de Fondos de Poinbase. El Explorador en la página de Billeteras consulta transferencias por dirección y solo muestra las transacciones reales: cada movimiento entrante y saliente de tus billeteras (transferencias, intercambios en DEX y otras llamadas de contrato, pagos de mineros, retiros, monedas enviadas por otros); Ponero es una moneda de privacidad y nunca se muestra. El Dr. Jackson vende más billeteras de hardware; arrastra una a la terminal de comercio para agregarla, hasta un máximo de {WalletMax}. La tienda tiene opciones más económicas. Una billetera que ya no desees puede destruirse en la página de Billeteras; sus monedas se perderán para siempre, y todo lo que se envíe a su dirección después también se perderá.¶Las transferencias pagan una tarifa de Gas: lenta, normal o rápida, y los precios del Gas suben y bajan en ciclos de aproximadamente una semana; cuando la red está congestionada las tarifas de Gas aumentan y las transacciones lentas pueden ser eliminadas de la mempool. Revisa 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 Line truncated
courier.odd1,...Llegó el paquete. courier.odd1,...Llegó el paquete.
courier.odd2,(Mantiene la mano en el bolsillo). Firma aquí. courier.odd2,(Mantiene la mano en el bolsillo). Firma aquí.
courier.sign,Firmar courier.sign,Firmar
@@ -346,7 +346,6 @@ hw.tx.signing,Firmando…
hw.tx.mempool,Transmitida; esperando en la mempool… hw.tx.mempool,Transmitida; esperando en la mempool…
hw.tx.packed,Incluida en el bloque #{0} hw.tx.packed,Incluida en el bloque #{0}
hw.tx.confirm,Bloque #{0} confirmación {1}/{2} hw.tx.confirm,Bloque #{0} confirmación {1}/{2}
hw.skip,Omitir
hw.done.h,Confirmada hw.done.h,Confirmada
hw.done.block,Bloque #{0} hw.done.block,Bloque #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,Pegar
hw.copied,Dirección copiada. hw.copied,Dirección copiada.
hw.copied.addr,Copiado: {0} hw.copied.addr,Copiado: {0}
hw.balance.frozen," (congelado: {0})" hw.balance.frozen," (congelado: {0})"
hw.balance.dirty," (sucias: {0})"
wallets.destroy,Destruir wallets.destroy,Destruir
wallets.destroy.sure,Confirmar wallets.destroy.sure,Confirmar
wallets.destroyed,Se destruyó {0}: {1} wallets.destroyed,Se destruyó {0}: {1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,"El fondo de rendimiento ""{0}"" hizo rug pull; desaparecieron
nightlog.scam.dry,"El fondo de rendimiento ""{0}"" se quedó sin reservas y cerró; se devolvieron {1} CRC a {2}." nightlog.scam.dry,"El fondo de rendimiento ""{0}"" se quedó sin reservas y cerró; se devolvieron {1} CRC a {2}."
nightlog.scam.paid,"Llegó el retiro de ""{0}"": {2} recibió {1} CRC." nightlog.scam.paid,"Llegó el retiro de ""{0}"": {2} recibió {1} CRC."
nightlog.scam.fakepay,Transferencia falsificada: {0} nightlog.scam.fakepay,Transferencia falsificada: {0}
nightlog.scam.sent,"Los {0} {1} enviados a la dirección segura de ""soporte"" terminaron en manos de un estafador."
coinpay.intro,Pagaré con {0}; tarda un momento en confirmarse en la cadena. coinpay.intro,Pagaré con {0}; tarda un momento en confirmarse en la cadena.
coinpay.intro.fake,"Ya envié los {0}, aquí está la captura. Dámelo ya, tengo prisa." coinpay.intro.fake,"Ya envié los {0}, aquí está la captura. Dámelo ya, tengo prisa."
coinpay.fake.entry,{0} se llevó {1} afirmando haber pagado {2} créditos en monedas; no existe tal transacción en la cadena. coinpay.fake.entry,{0} se llevó {1} afirmando haber pagado {2} créditos en monedas; no existe tal transacción en la cadena.
scam.support.name,Soporte de Poinbase
scam.support.1,"Hola, soporte de Poinbase por aquí. Detectamos un inicio de sesión inusual en tu cuenta y fue marcada."
scam.support.2,Envía {0} CRC hoy a la dirección segura {1} para verificación; se devolverá inmediatamente después.
scam.support.3,"De lo contrario, la cuenta quedará congelada para siempre. Me tengo que ir, no olvides enviarlo."
predict.sold.caught,"Vendido, recibiste {0}. La policía sospecha información privilegiada; {1} CRC de esa cantidad se marcaron como sucios." predict.sold.caught,"Vendido, recibiste {0}. La policía sospecha información privilegiada; {1} CRC de esa cantidad se marcaron como sucios."
predict.row.move," (anoche {0} {1})" predict.row.move," (anoche {0} {1})"
predict.stats.h,Historial (precio prom. apertura / tasa real) predict.stats.h,Historial (precio prom. apertura / tasa real)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,"Clausurado, cerrado hasta el día {0}"
ownmix.status.open,Abierto ownmix.status.open,Abierto
ownmix.status.paused,Pausado ownmix.status.paused,Pausado
ownmix.k.fee,Comisión ownmix.k.fee,Comisión
ownmix.k.rating,Reputación (contaminación restante en pagos) ownmix.k.rating,Eficiencia de lavado
ownmix.k.heat,Alerta ownmix.k.heat,Alerta
ownmix.heat.0,Baja ownmix.heat.0,Baja
ownmix.heat.1,Media ownmix.heat.1,Media
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,Les {0} {1} gelés ont été dégelés.
news.crtfreeze.title,Le Marché noir gèle des adresses CRT face à la répression news.crtfreeze.title,Le Marché noir gèle des adresses CRT face à la répression
news.crtfreeze.desc,"D'après les rumeurs, le Marché noir a fourni une liste d'adresses CRT à la Sécurité en échange de sa tranquillité. Les détenteurs à faible réputation ont plus de risques d'être gelés." news.crtfreeze.desc,"D'après les rumeurs, le Marché noir a fourni une liste d'adresses CRT à la Sécurité en échange de sa tranquillité. Les détenteurs à faible réputation ont plus de risques d'être gelés."
black.upgrade.title,Boutique Web3 black.upgrade.title,Boutique Web3
black.upgrade.desc,"Débloque la boutique sur la page Réseau gris du terminal : la branche on-chain de la faction du Marché noir. Réapprovisionnement hebdomadaire en contrebande, parfois en objets high-tech et cartes graphiques (à prix majoré) ; achetez au comptant ou commandez et attendez un livreur. Cryptos uniquement (PSC, CRT, CRA, Ponero), pièces contaminées acceptées. Requiert de la réputation au Marché noir ; hors ligne pendant les répressions." black.upgrade.desc,"Débloque la boutique sur la page Réseau gris du terminal : la branche on-chain de la faction du Marché noir. Réapprovisionnement en contrebande chaque lundi et jeudi, parfois en objets high-tech et cartes graphiques (à prix majoré) ; achetez au comptant ou commandez et attendez un livreur. Cryptos uniquement (PSC, CRT, CRA, Ponero), pièces contaminées acceptées. Requiert de la réputation au Marché noir ; hors ligne pendant les répressions."
black.offline,L'accès on-chain de la boutique est hors ligne pendant la répression. black.offline,L'accès on-chain de la boutique est hors ligne pendant la répression.
black.closed,Une réputation de {0} au Marché noir est requise pour entrer dans la boutique (actuellement {1}). black.closed,Une réputation de {0} au Marché noir est requise pour entrer dans la boutique (actuellement {1}).
black.sub.buy,Achats black.sub.buy,Achats
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Contrebande (élevée)
black.kind.Tech,High-tech (majoration) black.kind.Tech,High-tech (majoration)
nightlog.bm.ready,Marché noir : {0} est arrivé ; un livreur passera dès l'ouverture. nightlog.bm.ready,Marché noir : {0} est arrivé ; un livreur passera dès l'ouverture.
guide.web3.title,Manuel Web3 guide.web3.title,Manuel Web3
guide.web3.text,"Banque et trading : la page Banque est en lecture seule et affiche les liquidités, le loyer et les CRC de votre compte Poinbase. La page Fonds de Poinbase gère les dépôts et les retraits ; choisissez d'abord la cryptomonnaie : le CRC peut passer par le compte bancaire ou un portefeuille, toutes les autres uniquement par un portefeuille. Déposer depuis la banque convertit des crédits en CRC sur votre compte Poinbase ; retirer vers la banque retransforme les CRC en crédits sans contrôle (le compte Poinbase ne contient que des fonds propres). Retirer vers un portefeuille nécessite une adresse de destinataire et quelques confirmations avant d'arriver ; les frais de gas sont fixés au niveau normal et prélevés sur la monnaie envoyée. Un format d'adresse ou une somme de contrôle incorrect est rejeté ; si l'adresse est valide mais que personne ne l'utilise, les pièces sont perdues.¶Trading : PSC signifie Probably Stolen Coin, la monnaie minée par les cartes graphiques et les mineurs. Le marché au comptant de Poinbase propose deux paires, PSC/CRC et SPARK/CRC, qui suivent la monnaie sélectionnée sur le graphique. Les achats et les ventes sont tous deux saisis sous forme de montant 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 d'échange Web3 permet de convertir deux monnaies quelconques, toujours via le CRC : avec le CRC d'un côté, elle utilise un seul pool, sinon deux pools, avec deux fois des frais et un glissement cumulé ; l'aperçu affiche le montant reçu, les pools traversés et la perte. Les échanges de stablecoins (CRT ou CRA contre CRC) utilisent des pools stables : des frais de {StableFee:%} et presque aucun glissement près de l'ancrage ; lors d'un décrochage, la liquidité se tarit, et en cas d'effondrement, elle est retirée et le glissement explose.§Portefeuilles matériels : les pièces sur la chaîne sont stockées dans des portefeuilles matériels PLEDGER, chacun ayant ses propres soldes et pièces contaminées (chaque monnaie comptabilise combien d'unités sont contaminées ; voir Contamination). Un portefeuille est un objet : faites-le glisser sur le terminal de trading pour le charger. Ouvrez-le sur la page Portefeuilles du terminal ; connectez-le et déconnectez-le en haut à droite du terminal. Le trading sur la page Web3 ainsi que la boutique et le mixeur sur la page Réseau gris utilisent le portefeuille connecté ; sans portefeuille ou sans connexion, ils sont en lecture seule et chaque solde affiche 0. Les clients payant en pièces versent leurs fonds sur le portefeuille connecté.¶Les paiements (boutique, mixeur, comptoir Ponero, frais de mise en vente) débutent sous la forme d'une facture sur le terminal ; saisissez l'adresse du destinataire sur le portefeuille et maintenez ✓ enfoncé pour signer. Les deux derniers caractères d'une adresse constituent une somme de contrôle, de sorte qu'une faute de frappe d'un seul caractère est généralement détectée ; il arrive parfois qu'elle soit valide par hasard, et les pièces sont alors envoyées à une adresse que personne n'utilise. Les échanges sur le DEX nécessitent également une signature sur le portefeuille.¶Poinbase est un compte dépositaire ; les dépôts sont envoyés depuis un portefeuille vers l'adresse de dépôt de Poinbase (uniquement PSC, CRC et SPARK ; la plateforme conforme n'accepte ni le CRT du Marché noir ni le CRA de la Révolution, et le portefeuille bloque leur envoi vers l'adresse de dépôt ; seules les pièces propres peuvent être déposées, voir Contamination) et les retraits sont initiés sur la page Fonds de Poinbase. L'Explorateur sur la page Portefeuilles recherche les transferts par adresse et n'affiche que ceux qui ont réellement eu lieu : chaque mouvement entrant et sortant de vos portefeuilles (transferts, échanges DEX et autres appels de contrat, gains des mineurs, retraits, pièces reçues d'autrui) ; Ponero est une monnaie de confidentialité et n'apparaît jamais. Des portefeuilles matériels supplémentaires sont vendus par le Pr Jackson ; faites-en glisser un sur le terminal de trading pour l'ajouter, jusqu'à {WalletMax}. La boutique en propose des moins chers. Un portefeuille dont vous ne voulez plus peut être détruit sur la page Portefeuilles ; ses pièces sont définitivement perdues, et tout ce qui sera envoyé à son adresse par la suite le sera également.¶Les transferts paient 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 congestionné, les frais de gas augmentent et les transactions lentes peuvent être éjectées du 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'attendLine truncated guide.web3.text,"Banque et trading : la page Banque est en lecture seule et affiche les liquidités, le loyer et les CRC de votre compte Poinbase. La page Fonds de Poinbase gère les dépôts et les retraits ; choisissez d'abord la cryptomonnaie : le CRC peut passer par le compte bancaire ou un portefeuille, toutes les autres uniquement par un portefeuille. Déposer depuis la banque convertit des crédits en CRC sur votre compte Poinbase ; retirer vers la banque retransforme les CRC en crédits sans contrôle (le compte Poinbase ne contient que des fonds propres). Retirer vers un portefeuille nécessite une adresse de destinataire et quelques confirmations avant d'arriver ; les frais de gas sont fixés au niveau normal et prélevés sur la monnaie envoyée. Un format d'adresse ou une somme de contrôle incorrect est rejeté ; si l'adresse est valide mais que personne ne l'utilise, les pièces sont perdues.¶Trading : PSC signifie Probably Stolen Coin, la monnaie minée par les cartes graphiques et les mineurs. Le marché au comptant de Poinbase propose deux paires, PSC/CRC et SPARK/CRC, qui suivent la monnaie sélectionnée sur le graphique. Les achats et les ventes sont tous deux saisis sous forme de montant 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 d'échange Web3 permet de convertir deux monnaies quelconques, toujours via le CRC : avec le CRC d'un côté, elle utilise un seul pool, sinon deux pools, avec deux fois des frais et un glissement cumulé ; l'aperçu affiche le montant reçu, les pools traversés et la perte. Les échanges de stablecoins (CRT ou CRA contre CRC) utilisent des pools stables : des frais de {StableFee:%} et presque aucun glissement près de l'ancrage ; lors d'un décrochage, la liquidité se tarit, et en cas d'effondrement, elle est retirée et le glissement explose.§Portefeuilles matériels : les pièces sur la chaîne sont stockées dans des portefeuilles matériels PLEDGER, chacun ayant ses propres soldes et pièces contaminées (chaque monnaie comptabilise combien d'unités sont contaminées ; voir Contamination). Un portefeuille est un objet : faites-le glisser sur le terminal de trading pour le charger. Ouvrez-le sur la page Portefeuilles du terminal ; connectez-le et déconnectez-le en haut à droite du terminal. Le trading sur la page Web3 ainsi que la boutique et le mixeur sur la page Réseau gris utilisent le portefeuille connecté ; sans portefeuille ou sans connexion, ils sont en lecture seule et chaque solde affiche 0. Les clients payant en pièces versent leurs fonds sur le portefeuille connecté.¶Les paiements (boutique, mixeur, comptoir Ponero, frais de mise en vente) débutent sous la forme d'une facture sur le terminal ; saisissez l'adresse du destinataire sur le portefeuille et maintenez ✓ enfoncé pour signer. Les deux derniers caractères d'une adresse constituent une somme de contrôle, de sorte qu'une faute de frappe d'un seul caractère est généralement détectée ; il arrive parfois qu'elle soit valide par hasard, et les pièces sont alors envoyées à une adresse que personne n'utilise. Les échanges sur le DEX nécessitent également une signature sur le portefeuille.¶Poinbase est un compte dépositaire ; les dépôts sont envoyés depuis un portefeuille vers l'adresse de dépôt de Poinbase (uniquement PSC, CRC et SPARK ; la plateforme conforme n'accepte ni le CRT du Marché noir ni le CRA de la Révolution, et le portefeuille bloque leur envoi vers l'adresse de dépôt ; seules les pièces propres peuvent être déposées, voir Contamination) et les retraits sont initiés sur la page Fonds de Poinbase. L'Explorateur sur la page Portefeuilles recherche les transferts par adresse et n'affiche que ceux qui ont réellement eu lieu : chaque mouvement entrant et sortant de vos portefeuilles (transferts, échanges DEX et autres appels de contrat, gains des mineurs, retraits, pièces reçues d'autrui) ; Ponero est une monnaie de confidentialité et n'apparaît jamais. Des portefeuilles matériels supplémentaires sont vendus par le Pr Jackson ; faites-en glisser un sur le terminal de trading pour l'ajouter, jusqu'à {WalletMax}. La boutique en propose des moins chers. Un portefeuille dont vous ne voulez plus peut être détruit sur la page Portefeuilles ; ses pièces sont définitivement perdues, et tout ce qui sera envoyé à son adresse par la suite le sera également.¶Les transferts paient 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 congestionné, les frais de gas augmentent et les transactions lentes peuvent être éjectées du 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'attendLine truncated
courier.odd1,...Le colis est là. courier.odd1,...Le colis est là.
courier.odd2,(Sa main reste dans sa poche.) Signez ici. courier.odd2,(Sa main reste dans sa poche.) Signez ici.
courier.sign,Signer courier.sign,Signer
@@ -346,7 +346,6 @@ hw.tx.signing,Signature en cours…
hw.tx.mempool,Diffusée ; en attente dans la mempool… hw.tx.mempool,Diffusée ; en attente dans la mempool…
hw.tx.packed,Incluse dans le bloc #{0} hw.tx.packed,Incluse dans le bloc #{0}
hw.tx.confirm,Bloc #{0} confirmation {1}/{2} hw.tx.confirm,Bloc #{0} confirmation {1}/{2}
hw.skip,Passer
hw.done.h,Confirmé hw.done.h,Confirmé
hw.done.block,Bloc #{0} hw.done.block,Bloc #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,Coller
hw.copied,Adresse copiée. hw.copied,Adresse copiée.
hw.copied.addr,{0} copié hw.copied.addr,{0} copié
hw.balance.frozen," (gelé {0})" hw.balance.frozen," (gelé {0})"
hw.balance.dirty," (sale : {0})"
wallets.destroy,Détruire wallets.destroy,Détruire
wallets.destroy.sure,Confirmer wallets.destroy.sure,Confirmer
wallets.destroyed,{0} détruit : {1} wallets.destroyed,{0} détruit : {1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,"Le pool de rendement ""{0}"" a fait un rug pull ; les {1} CRC
nightlog.scam.dry,"Le pool de rendement ""{0}"" a épuisé ses réserves et a fermé ; {1} CRC restitués à {2}." nightlog.scam.dry,"Le pool de rendement ""{0}"" a épuisé ses réserves et a fermé ; {1} CRC restitués à {2}."
nightlog.scam.paid,"Le retrait de ""{0}"" est arrivé : {2} a reçu {1} CRC." nightlog.scam.paid,"Le retrait de ""{0}"" est arrivé : {2} a reçu {1} CRC."
nightlog.scam.fakepay,Virement falsifié : {0} nightlog.scam.fakepay,Virement falsifié : {0}
nightlog.scam.sent,"Les {0} {1} envoyés à l'adresse sécurisée du ""support"" ont fini chez un escroc."
coinpay.intro,Je paie en {0} ; la confirmation sur la chaîne prend un moment. coinpay.intro,Je paie en {0} ; la confirmation sur la chaîne prend un moment.
coinpay.intro.fake,"J'ai déjà envoyé les {0}, voici la capture d'écran. Donne la marchandise, je suis pressé." coinpay.intro.fake,"J'ai déjà envoyé les {0}, voici la capture d'écran. Donne la marchandise, je suis pressé."
coinpay.fake.entry,{0} a pris {1} en affirmant avoir payé {2} crédits en pièces ; aucune transaction sur la chaîne. coinpay.fake.entry,{0} a pris {1} en affirmant avoir payé {2} crédits en pièces ; aucune transaction sur la chaîne.
scam.support.name,Support Poinbase
scam.support.1,"Bonjour, ici le support Poinbase. Nous avons détecté une connexion anormale sur votre compte et celui-ci a été signalé."
scam.support.2,Veuillez envoyer aujourd'hui {0} CRC à l'adresse sécurisée {1} pour vérification ; ils seront restitués immédiatement après.
scam.support.3,"Sinon, le compte sera gelé définitivement. Je dois filer, n'oubliez pas d'effectuer l'envoi."
predict.sold.caught,"Vendu, reçu {0}. La police soupçonne un délit d'initié ; {1} CRC sont marqués comme sales." predict.sold.caught,"Vendu, reçu {0}. La police soupçonne un délit d'initié ; {1} CRC sont marqués comme sales."
predict.row.move," (la nuit dernière {0} {1})" predict.row.move," (la nuit dernière {0} {1})"
predict.stats.h,Historique (prix ouv. moy. / taux réel) predict.stats.h,Historique (prix ouv. moy. / taux réel)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,"Saisi, fermé jusqu'au jour {0}"
ownmix.status.open,Ouvert ownmix.status.open,Ouvert
ownmix.status.paused,En pause ownmix.status.paused,En pause
ownmix.k.fee,Frais ownmix.k.fee,Frais
ownmix.k.rating,Réputation (contamination restante) ownmix.k.rating,Efficacité de blanchiment
ownmix.k.heat,Alerte ownmix.k.heat,Alerte
ownmix.heat.0,Faible ownmix.heat.0,Faible
ownmix.heat.1,Moyenne ownmix.heat.1,Moyenne
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,{0} {1} の凍結が解除された。
news.crtfreeze.title,闇市場、取締に伴い一部のCRTアドレスを凍結 news.crtfreeze.title,闇市場、取締に伴い一部のCRTアドレスを凍結
news.crtfreeze.desc,噂によれば、闇市場は見逃してもらう見返りに、警察へCRTアドレスのリストを渡したとのことだ。評判が低い保有者ほど凍結される可能性が高い。 news.crtfreeze.desc,噂によれば、闇市場は見逃してもらう見返りに、警察へCRTアドレスのリストを渡したとのことだ。評判が低い保有者ほど凍結される可能性が高い。
black.upgrade.title,Web3ショップ black.upgrade.title,Web3ショップ
black.upgrade.desc,ターミナルのグレーネットページのショップをアンロック:闇市場派閥のオンチェーン拠点。禁制品が毎週入荷し、時にはハイテク品やグラフィックボード(割増価格)も並ぶ。現物を購入するか、注文して配達人を待つ。決済はコイン限定(PSC、CRT、CRA、Ponero)、汚染コインも受付。闇市場の評判が必要で、取締期間中はオフラインとなる。 black.upgrade.desc,ターミナルのグレーネットページのショップをアンロック:闇市場派閥のオンチェーン拠点。禁制品が毎週月曜と木曜に入荷し、時にはハイテク品やグラフィックボード(割増価格)も並ぶ。現物を購入するか、注文して配達人を待つ。決済はコイン限定(PSC、CRT、CRA、Ponero)、汚染コインも受付。闇市場の評判が必要で、取締期間中はオフラインとなる。
black.offline,取締期間中、ショップのオンチェーン入口はオフラインとなる。 black.offline,取締期間中、ショップのオンチェーン入口はオフラインとなる。
black.closed,ショップに入るには闇市場の評判が {0} 必要(現在:{1})。 black.closed,ショップに入るには闇市場の評判が {0} 必要(現在:{1})。
black.sub.buy,購入 black.sub.buy,購入
@@ -247,7 +247,7 @@ black.kind.Contraband.3,禁制品(高)
black.kind.Tech,ハイテク品(割増) black.kind.Tech,ハイテク品(割増)
nightlog.bm.ready,闇市場:{0} が到着。開店後に配達人が届けてくれる。 nightlog.bm.ready,闇市場:{0} が到着。開店後に配達人が届けてくれる。
guide.web3.title,Web3ハンドブック guide.web3.title,Web3ハンドブック
guide.web3.text,"銀行と取引: 銀行ページは閲覧専用で、現金、家賃、Poinbaseアカウント内のCRCを表示する。Poinbaseの資金ページで入出金を管理し、まず通貨を選択する。CRCは銀行口座またはウォレットを経由できるが、他の通貨はウォレット経由のみとなる。銀行から入金するとクレジットがPoinbaseアカウント内のCRCに変換され、銀行へ出金すると審査なしでCRCがクレジットに戻る(Poinbaseアカウントにはクリーンな資金しか入らない)。ウォレットへ出金する場合は送金先アドレスが必要で、数回の承認を経て着金する。ガス代は「標準」に固定され、送金する通貨から差し引かれる。アドレスの形式やチェックサムに誤りがあると拒否されるが、形式が正しくても誰も使っていないアドレスに送金した場合、そのコインは失われる。¶取引: PSCの正式名称はProbably Stolen Coinで、グラフィックボードや専用採掘機で採掘される通貨。Poinbase現物にはチャートで選択した通貨に応じてPSC/CRCとSPARK/CRCの2つの取引ペアがある。買い・売りともに取引する通貨の数量を入力し、プレビューには支払うまたは受け取る決済通貨が表示される。平均価格には手数料が含まれるが、スリッページは含まれない。¶Web3取引ページでは任意の2通貨をスワップできるが、常にCRCを経由する。一方がCRCなら1つのプール、それ以外は2つのプールを経由し、2回の手数料とスリッページの重複が発生する。プレビューには受取数量、経由するプール数、損失が表示される。ステーブルコイン同士のスワップ(CRTまたはCRA対CRC)はステーブルプールを使用し、手数料は{StableFee:%}で、ペッグ付近ではスリッページがほぼ発生しない。デペッグ時は流動性が薄れ、崩壊時には流動性が引き抜かれてスリッページが急増する。§ハードウェアウォレット: オンチェーンの通貨はPLEDGERハードウェアウォレットに保管され、残高と汚染コインはウォレットごとに個別に管理される(各通貨で何枚が汚染されているかを記録。「汚染」を参照)。ウォレットはアイテムであり、取引ターミナルにドラッグして読み込ませる。ターミナルのウォレットページで開き、ターミナル右上から接続・切断を行う。Web3ページの取引やグレーネットページのショップ、ミキサーは接続中のウォレットを使用する。ウォレットがない、または未接続の場合は閲覧専用となり、全残高が0と表示される。通貨で支払う客の代金も接続中のウォレットに入る。¶支払い(ショップ、ミキサー、Poneroデスク、出品手数料)はターミナルで請求書を発行し、ウォレットで送金先アドレスを入力して✓を長押しして署名する。アドレスの末尾2文字はチェックサムのため、1文字の入力ミスは大半が検知されるが、偶然有効なアドレスに一致すると誰も使っていないアドレスに送金されてしまう。DEXでのスワップにもウォレットでの署名が必要。¶Poinbaseはカストディ型アカウントであり、入金はウォレットからPoinbaseの入金用アドレスへ送金して行う(PSC、CRC、SPARKのみ受付。規制準拠の取引所は闇市場のCRTや革命家のCRAを取り扱っておらず、入金用アドレスへの送金はウォレット側で遮断される。入金できるのはクリーンなコインのみ。「汚染」を参照)。出金はPoinbaseの資金ページから開始する。ウォレットページのエクスプローラーではアドレスごとに送金履歴を照会でき、実際に成立した取引のみが表示される。ウォレットのあらゆる入出金(送金、DEXスワップやその他のコントラクト呼出、採掘機の収益、出金、第三者からの送金)が対象。Poneroはプライバシーコインのため表示されない。追加のハードウェアウォレットはジャックソン博士から購入でき、取引ターミナルにドラッグして追加する(最大{WalletMax}個)。ショップにはより安価なものもある。不要になったウォレットはウォレットページで破棄できるが、中のコインは永久に失われ、破棄後にそのアドレスへ送金されたものも消失する。¶送金にはガス代がかかり、「低速」「標準」「高速」の3段階がある。ガス価格はおよそ1週間の周期で上下する。ネットワーク混雑時はガス代が高騰し、低速の取引はメムプLine truncated guide.web3.text,"銀行と取引: 銀行ページは閲覧専用で、現金、家賃、Poinbaseアカウント内のCRCを表示する。Poinbaseの資金ページで入出金を管理し、まず通貨を選択する。CRCは銀行口座またはウォレットを経由できるが、他の通貨はウォレット経由のみとなる。銀行から入金するとクレジットがPoinbaseアカウント内のCRCに変換され、銀行へ出金すると審査なしでCRCがクレジットに戻る(Poinbaseアカウントにはクリーンな資金しか入らない)。ウォレットへ出金する場合は送金先アドレスが必要で、数回の承認を経て着金する。ガス代は「標準」に固定され、送金する通貨から差し引かれる。アドレスの形式やチェックサムに誤りがあると拒否されるが、形式が正しくても誰も使っていないアドレスに送金した場合、そのコインは失われる。¶取引: PSCの正式名称はProbably Stolen Coinで、グラフィックボードや専用採掘機で採掘される通貨。Poinbase現物にはチャートで選択した通貨に応じてPSC/CRCとSPARK/CRCの2つの取引ペアがある。買い・売りともに取引する通貨の数量を入力し、プレビューには支払うまたは受け取る決済通貨が表示される。平均価格には手数料が含まれるが、スリッページは含まれない。¶Web3取引ページでは任意の2通貨をスワップできるが、常にCRCを経由する。一方がCRCなら1つのプール、それ以外は2つのプールを経由し、2回の手数料とスリッページの重複が発生する。プレビューには受取数量、経由するプール数、損失が表示される。ステーブルコイン同士のスワップ(CRTまたはCRA対CRC)はステーブルプールを使用し、手数料は{StableFee:%}で、ペッグ付近ではスリッページがほぼ発生しない。デペッグ時は流動性が薄れ、崩壊時には流動性が引き抜かれてスリッページが急増する。§ハードウェアウォレット: オンチェーンの通貨はPLEDGERハードウェアウォレットに保管され、残高と汚染コインはウォレットごとに個別に管理される(各通貨で何枚が汚染されているかを記録。「汚染」を参照)。ウォレットはアイテムであり、取引ターミナルにドラッグして読み込ませる。ターミナルのウォレットページで開き、ターミナル右上から接続・切断を行う。Web3ページの取引やグレーネットページのショップ、ミキサーは接続中のウォレットを使用する。ウォレットがない、または未接続の場合は閲覧専用となり、全残高が0と表示される。通貨で支払う客の代金も接続中のウォレットに入る。¶支払い(ショップ、ミキサー、Poneroデスク、出品手数料)はターミナルで請求書を発行し、ウォレットで送金先アドレスを入力して✓を長押しして署名する。アドレスの末尾2文字はチェックサムのため、1文字の入力ミスは大半が検知されるが、偶然有効なアドレスに一致すると誰も使っていないアドレスに送金されてしまう。DEXでのスワップにもウォレットでの署名が必要。¶Poinbaseはカストディ型アカウントであり、入金はウォレットからPoinbaseの入金用アドレスへ送金して行う(PSC、CRC、SPARKのみ受付。規制準拠の取引所は闇市場のCRTや革命家のCRAを取り扱っておらず、入金用アドレスへの送金はウォレット側で遮断される。入金できるのはクリーンなコインのみ。「汚染」を参照)。出金はPoinbaseの資金ページから開始する。ウォレットページのエクスプローラーではアドレスごとに送金履歴を照会でき、実際に成立した取引のみが表示される。ウォレットのあらゆる入出金(送金、DEXスワップやその他のコントラクト呼出、採掘機の収益、出金、第三者からの送金)が対象。Poneroはプライバシーコインのため表示されない。追加のハードウェアウォレットはジャックソン博士から購入でき、取引ターミナルにドラッグして追加する(最大{WalletMax}個)。ショップにはより安価なものもある。不要になったウォレットはウォレットページで破棄できるが、中のコインは永久に失われ、破棄後にそのアドレスへ送金されたものも消失する。¶送金にはガス代がかかり、「低速」「標準」「高速」の3段階がある。ガス価格はおよそ1週間の周期で上下する。ネットワーク混雑時はガス代が高騰し、低速の取引はメムプLine truncated
courier.odd1,……荷物が届いた。 courier.odd1,……荷物が届いた。
courier.odd2,(ポケットに手を入れたままだ)ここにサインを。 courier.odd2,(ポケットに手を入れたままだ)ここにサインを。
courier.sign,サイン courier.sign,サイン
@@ -346,7 +346,6 @@ hw.tx.signing,署名中…
hw.tx.mempool,ブロードキャスト完了。メムプールで待機中… hw.tx.mempool,ブロードキャスト完了。メムプールで待機中…
hw.tx.packed,ブロック #{0} に取り込まれました hw.tx.packed,ブロック #{0} に取り込まれました
hw.tx.confirm,ブロック #{0} 確認 {1}/{2} hw.tx.confirm,ブロック #{0} 確認 {1}/{2}
hw.skip,スキップ
hw.done.h,確認済み hw.done.h,確認済み
hw.done.block,ブロック #{0} hw.done.block,ブロック #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,貼り付け
hw.copied,アドレスをコピーしました。 hw.copied,アドレスをコピーしました。
hw.copied.addr,{0} をコピーしました hw.copied.addr,{0} をコピーしました
hw.balance.frozen,(凍結 {0}) hw.balance.frozen,(凍結 {0})
hw.balance.dirty,(汚染 {0})
wallets.destroy,破棄 wallets.destroy,破棄
wallets.destroy.sure,破棄の確認 wallets.destroy.sure,破棄の確認
wallets.destroyed,{0} を破棄しました:{1} wallets.destroyed,{0} を破棄しました:{1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,収益プール「{0}」がラグプルされ、{2} の {1} CR
nightlog.scam.dry,収益プール「{0}」の準備金が底をつき閉鎖された。{2} に {1} CRC が返還された。 nightlog.scam.dry,収益プール「{0}」の準備金が底をつき閉鎖された。{2} に {1} CRC が返還された。
nightlog.scam.paid,「{0}」からの出金が到着した:{2} が {1} CRC を受け取った。 nightlog.scam.paid,「{0}」からの出金が到着した:{2} が {1} CRC を受け取った。
nightlog.scam.fakepay,偽造送金:{0} nightlog.scam.fakepay,偽造送金:{0}
nightlog.scam.sent,「サポート」の安全アドレスに送金した {0} {1} は詐欺師の手に渡った。
coinpay.intro,{0} で支払うよ。チェーン上の確認に少し時間がかかる。 coinpay.intro,{0} で支払うよ。チェーン上の確認に少し時間がかかる。
coinpay.intro.fake,{0} はもう送った、ほらスクショだ。急いでるんだ、早く品物を渡してくれ。 coinpay.intro.fake,{0} はもう送った、ほらスクショだ。急いでるんだ、早く品物を渡してくれ。
coinpay.fake.entry,{0} はコインで{2}クレジット支払ったと主張して {1} を持ち去ったが、チェーン上にそのような取引は存在しない。 coinpay.fake.entry,{0} はコインで{2}クレジット支払ったと主張して {1} を持ち去ったが、チェーン上にそのような取引は存在しない。
scam.support.name,Poinbaseサポート
scam.support.1,こんにちは、Poinbaseサポートです。お客様のアカウントで異常なログインが検出され、フラグ付きとなりました。
scam.support.2,本日中に確認のため安全アドレス {1} へ {0} CRC を送金してください。確認後すぐに返金されます。
scam.support.3,対応いただけない場合、アカウントは永久に凍結されます。では失礼します、送金を忘れずに。
predict.sold.caught,売却し、{0}を回収。警察はインサイダー取引を疑っており、そのうち {1} CRC が汚染コインとして記録された。 predict.sold.caught,売却し、{0}を回収。警察はインサイダー取引を疑っており、そのうち {1} CRC が汚染コインとして記録された。
predict.row.move,(昨晩 {0} {1}) predict.row.move,(昨晩 {0} {1})
predict.stats.h,履歴(始値平均 / 実際の発生率) predict.stats.h,履歴(始値平均 / 実際の発生率)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,差し押さえ、第{0}日まで閉鎖
ownmix.status.open,営業中 ownmix.status.open,営業中
ownmix.status.paused,一時停止中 ownmix.status.paused,一時停止中
ownmix.k.fee,手数料率 ownmix.k.fee,手数料率
ownmix.k.rating,評判(出金に残る汚染) ownmix.k.rating,洗浄効率
ownmix.k.heat,警戒度 ownmix.k.heat,警戒度
ownmix.heat.0,低 ownmix.heat.0,低
ownmix.heat.1,中 ownmix.heat.1,中
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,Zamrożone {0} {1} zostało odmrożone.
news.crtfreeze.title,Czarny Rynek zamraża część adresów CRT w ramach obławy news.crtfreeze.title,Czarny Rynek zamraża część adresów CRT w ramach obławy
news.crtfreeze.desc,"Krążą plotki, że Czarny Rynek przekazał Ochronie listę adresów CRT w zamian za spokój. Posiadacze o niskiej reputacji mają większe szanse na zamrożenie środków." news.crtfreeze.desc,"Krążą plotki, że Czarny Rynek przekazał Ochronie listę adresów CRT w zamian za spokój. Posiadacze o niskiej reputacji mają większe szanse na zamrożenie środków."
black.upgrade.title,Sklep Web3 black.upgrade.title,Sklep Web3
black.upgrade.desc,"Odblokowuje sklep w zakładce Szara sieć terminala: ramię Czarnego Rynku on-chain. Cotygodniowe dostawy kontrabandy, sporadycznie zaawansowana technologia i karty graficzne (z marżą); kupuj od ręki lub zamawiaj z dostawą przez kuriera. Płatność wyłącznie kryptowalutami (PSC, CRT, CRA, Ponero), akceptowane także skażone monety. Wymaga reputacji na Czarnym Rynku; niedostępne w trakcie obławy." black.upgrade.desc,"Odblokowuje sklep w zakładce Szara sieć terminala: ramię Czarnego Rynku on-chain. Dostawy kontrabandy w każdy poniedziałek i czwartek, sporadycznie zaawansowana technologia i karty graficzne (z marżą); kupuj od ręki lub zamawiaj z dostawą przez kuriera. Płatność wyłącznie kryptowalutami (PSC, CRT, CRA, Ponero), akceptowane także skażone monety. Wymaga reputacji na Czarnym Rynku; niedostępne w trakcie obławy."
black.offline,Wejście on-chain do sklepu jest niedostępne w trakcie obławy. black.offline,Wejście on-chain do sklepu jest niedostępne w trakcie obławy.
black.closed,Wymagana reputacja na Czarnym Rynku: {0} (obecnie: {1}). black.closed,Wymagana reputacja na Czarnym Rynku: {0} (obecnie: {1}).
black.sub.buy,Kup black.sub.buy,Kup
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Kontrabanda (wysoki poziom)
black.kind.Tech,Zaawansowana technologia (marża) black.kind.Tech,Zaawansowana technologia (marża)
nightlog.bm.ready,Czarny Rynek: {0} na miejscu; kurier pojawi się po otwarciu lokalu. nightlog.bm.ready,Czarny Rynek: {0} na miejscu; kurier pojawi się po otwarciu lokalu.
guide.web3.title,Podręcznik Web3 guide.web3.title,Podręcznik Web3
guide.web3.text,"Bank i handel: strona Bank 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 wybierz monetę: CRC może przejść przez konto bankowe lub portfel, każda inna moneta wyłącznie przez portfel. Wpłata z banku zamienia kredyty na CRC na koncie Poinbase; wypłata do banku zamienia CRC z powrotem na kredyty bez kontroli (konto Poinbase przechowuje wyłącznie czyste środki). Wypłata do portfela wymaga adresu odbiorcy i kilku potwierdzeń przed zaksięgowaniem; opłata gas jest stała na poziomie normalnym i pobierana z wysyłanej monety. Błędny format adresu lub sumy kontrolnej jest odrzucany; poprawnie sformatowany adres, którego nikt nie używa, oznacza utratę monet.¶Handel: PSC oznacza Probably Stolen Coin – monetę wydobywaną przez karty graficzne i koparki. Rynek spot Poinbase ma dwie pary: PSC/CRC i SPARK/CRC, zależnie od monety wybranej na wykresie. Zlecenia kupna i sprzedaży wprowadza się jako kwotę handlowanej monety; podgląd pokazuje płaconą lub otrzymywaną walutę kwotowaną, średnia cena uwzględnia prowizję, a poślizg nie.¶Strona handlu Web3 pozwala na wymianę dowolnych dwóch monet, zawsze za pośrednictwem CRC: z CRC po jednej stronie korzysta z jednej puli, w przeciwnym razie z dwóch pul, z dwiema prowizjami i sumującym się poślizgiem; podgląd pokazuje otrzymaną kwotę, przebyte pule i stratę. Wymiana stablecoinów (CRT lub CRA na CRC) korzysta ze stabilnych pul: prowizja {StableFee:%} i prawie zerowy poślizg w pobliżu parytetu; przy odkotwiczeniu płynność spada, a przy krachu zostaje wycofana i poślizg gwałtownie rośnie.§Portfele sprzętowe: monety w łańcuchu znajdują się w portfelach sprzętowych PLEDGER, z osobnymi saldami i skażonymi monetami dla każdego z nich (dla każdej monety rejestrowana jest liczba skażonych sztuk; patrz: Skażenie). Portfel jest przedmiotem: przeciągnij go na terminal handlowy, aby go załadować. Otwórz go na stronie Portfele w terminalu; łącz i rozłączaj 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 połączenia są one tylko do odczytu, a każde saldo wynosi 0. Klienci płacący monetami wpłacają do połączonego portfela.¶Płatności (sklep, mikser, punkt Ponero, opłaty za wystawienie) zaczynają się od rachunku w terminalu; wpisz adres odbiorcy na portfelu i przytrzymaj ✓, aby podpisać. Ostatnie dwa znaki adresu to suma kontrolna, więc literówka o jeden znak jest zwykle wychwytywana; sporadycznie okazuje się poprawna i monety trafiają pod adres, którego nikt nie używa. Wymiany na DEX również wymagają podpisu na portfelu.¶Poinbase to konto powiernicze; wpłaty wysyła się z portfela na adres depozytowy Poinbase (tylko PSC, CRC i SPARK; giełda zgodna z przepisami nie przyjmuje ani CRT z Czarnego Rynku, ani CRA od Rewolucji, a portfel blokuje ich wysłanie na adres depozytowy; wpłacać można tylko czyste monety, patrz: Skażenie), a wypłaty zleca się na stronie Środki w Poinbase. Eksplorator na stronie Portfele wyszukuje transfery według adresu i pokazuje tylko transakcje, które rzeczywiście miały miejsce: każdy przepływ do i z Twoich portfeli (przelewy, wymiany DEX i inne wywołania kontraktów, wypłaty z koparek, wypłaty, monety przesłane przez innych); Ponero to moneta prywatności i nigdy się nie wyświetla. Więcej portfeli sprzętowych sprzedaje Dr Jackson; przeciągnij taki na terminal handlowy, aby go dodać, maksymalnie do {WalletMax}. W sklepie dostępne są tańsze. Niepotrzebny portfel można zniszczyć na stronie Portfele; znajdujące się w nim monety przepadają na zawsze, a wszystko wysłane później na jego adres również zostanie utracone.¶Za przelewy płaci się opłatę gas: wolną, normalną lub szybką, a ceny gasu rosną i spadają w cyklu około tygodniowym; gdy sieć jest przeciążona, opłaty gas rosną, a wolne 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 ciLine truncated guide.web3.text,"Bank i handel: strona Bank 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 wybierz monetę: CRC może przejść przez konto bankowe lub portfel, każda inna moneta wyłącznie przez portfel. Wpłata z banku zamienia kredyty na CRC na koncie Poinbase; wypłata do banku zamienia CRC z powrotem na kredyty bez kontroli (konto Poinbase przechowuje wyłącznie czyste środki). Wypłata do portfela wymaga adresu odbiorcy i kilku potwierdzeń przed zaksięgowaniem; opłata gas jest stała na poziomie normalnym i pobierana z wysyłanej monety. Błędny format adresu lub sumy kontrolnej jest odrzucany; poprawnie sformatowany adres, którego nikt nie używa, oznacza utratę monet.¶Handel: PSC oznacza Probably Stolen Coin – monetę wydobywaną przez karty graficzne i koparki. Rynek spot Poinbase ma dwie pary: PSC/CRC i SPARK/CRC, zależnie od monety wybranej na wykresie. Zlecenia kupna i sprzedaży wprowadza się jako kwotę handlowanej monety; podgląd pokazuje płaconą lub otrzymywaną walutę kwotowaną, średnia cena uwzględnia prowizję, a poślizg nie.¶Strona handlu Web3 pozwala na wymianę dowolnych dwóch monet, zawsze za pośrednictwem CRC: z CRC po jednej stronie korzysta z jednej puli, w przeciwnym razie z dwóch pul, z dwiema prowizjami i sumującym się poślizgiem; podgląd pokazuje otrzymaną kwotę, przebyte pule i stratę. Wymiana stablecoinów (CRT lub CRA na CRC) korzysta ze stabilnych pul: prowizja {StableFee:%} i prawie zerowy poślizg w pobliżu parytetu; przy odkotwiczeniu płynność spada, a przy krachu zostaje wycofana i poślizg gwałtownie rośnie.§Portfele sprzętowe: monety w łańcuchu znajdują się w portfelach sprzętowych PLEDGER, z osobnymi saldami i skażonymi monetami dla każdego z nich (dla każdej monety rejestrowana jest liczba skażonych sztuk; patrz: Skażenie). Portfel jest przedmiotem: przeciągnij go na terminal handlowy, aby go załadować. Otwórz go na stronie Portfele w terminalu; łącz i rozłączaj 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 połączenia są one tylko do odczytu, a każde saldo wynosi 0. Klienci płacący monetami wpłacają do połączonego portfela.¶Płatności (sklep, mikser, punkt Ponero, opłaty za wystawienie) zaczynają się od rachunku w terminalu; wpisz adres odbiorcy na portfelu i przytrzymaj ✓, aby podpisać. Ostatnie dwa znaki adresu to suma kontrolna, więc literówka o jeden znak jest zwykle wychwytywana; sporadycznie okazuje się poprawna i monety trafiają pod adres, którego nikt nie używa. Wymiany na DEX również wymagają podpisu na portfelu.¶Poinbase to konto powiernicze; wpłaty wysyła się z portfela na adres depozytowy Poinbase (tylko PSC, CRC i SPARK; giełda zgodna z przepisami nie przyjmuje ani CRT z Czarnego Rynku, ani CRA od Rewolucji, a portfel blokuje ich wysłanie na adres depozytowy; wpłacać można tylko czyste monety, patrz: Skażenie), a wypłaty zleca się na stronie Środki w Poinbase. Eksplorator na stronie Portfele wyszukuje transfery według adresu i pokazuje tylko transakcje, które rzeczywiście miały miejsce: każdy przepływ do i z Twoich portfeli (przelewy, wymiany DEX i inne wywołania kontraktów, wypłaty z koparek, wypłaty, monety przesłane przez innych); Ponero to moneta prywatności i nigdy się nie wyświetla. Więcej portfeli sprzętowych sprzedaje Dr Jackson; przeciągnij taki na terminal handlowy, aby go dodać, maksymalnie do {WalletMax}. W sklepie dostępne są tańsze. Niepotrzebny portfel można zniszczyć na stronie Portfele; znajdujące się w nim monety przepadają na zawsze, a wszystko wysłane później na jego adres również zostanie utracone.¶Za przelewy płaci się opłatę gas: wolną, normalną lub szybką, a ceny gasu rosną i spadają w cyklu około tygodniowym; gdy sieć jest przeciążona, opłaty gas rosną, a wolne 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 ciLine truncated
courier.odd1,...Paczka dotarła. courier.odd1,...Paczka dotarła.
courier.odd2,(Trzyma rękę w kieszeni.) Podpisz tutaj. courier.odd2,(Trzyma rękę w kieszeni.) Podpisz tutaj.
courier.sign,Podpisz courier.sign,Podpisz
@@ -346,7 +346,6 @@ hw.tx.signing,Podpisywanie…
hw.tx.mempool,Rozesłano; oczekiwanie w mempoolu… hw.tx.mempool,Rozesłano; oczekiwanie w mempoolu…
hw.tx.packed,Dołączono do bloku #{0} hw.tx.packed,Dołączono do bloku #{0}
hw.tx.confirm,Blok #{0} potwierdzenie {1}/{2} hw.tx.confirm,Blok #{0} potwierdzenie {1}/{2}
hw.skip,Pomiń
hw.done.h,Potwierdzono hw.done.h,Potwierdzono
hw.done.block,Blok #{0} hw.done.block,Blok #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,Wklej
hw.copied,Skopiowano adres. hw.copied,Skopiowano adres.
hw.copied.addr,Skopiowano {0} hw.copied.addr,Skopiowano {0}
hw.balance.frozen," (zamrożone {0})" hw.balance.frozen," (zamrożone {0})"
hw.balance.dirty," (skażone: {0})"
wallets.destroy,Zniszcz wallets.destroy,Zniszcz
wallets.destroy.sure,Potwierdź wallets.destroy.sure,Potwierdź
wallets.destroyed,Zniszczono {0}: {1} wallets.destroyed,Zniszczono {0}: {1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,Pula zysków „{0}” przeprowadziła rug pull; {1} CRC z {2}
nightlog.scam.dry,Pula zysków „{0}” wyczerpała rezerwy i została zamknięta; {1} CRC zwrócono do {2}. nightlog.scam.dry,Pula zysków „{0}” wyczerpała rezerwy i została zamknięta; {1} CRC zwrócono do {2}.
nightlog.scam.paid,Wypłata z „{0}” dotarła: {2} otrzymał {1} CRC. nightlog.scam.paid,Wypłata z „{0}” dotarła: {2} otrzymał {1} CRC.
nightlog.scam.fakepay,Sfałszowany przelew: {0} nightlog.scam.fakepay,Sfałszowany przelew: {0}
nightlog.scam.sent,{0} {1} wysłane na bezpieczny adres „wsparcia” trafiło do oszusta.
coinpay.intro,Zapłacę w {0}; potwierdzenie w łańcuchu zajmie chwilę. coinpay.intro,Zapłacę w {0}; potwierdzenie w łańcuchu zajmie chwilę.
coinpay.intro.fake,"Już wysłałem {0}, oto zrzut ekranu. Dawaj towar, spieszę się." coinpay.intro.fake,"Już wysłałem {0}, oto zrzut ekranu. Dawaj towar, spieszę się."
coinpay.fake.entry,"{0} zabrał {1}, twierdząc, że zapłacił {2} kredytów w monetach; brak transakcji w łańcuchu." coinpay.fake.entry,"{0} zabrał {1}, twierdząc, że zapłacił {2} kredytów w monetach; brak transakcji w łańcuchu."
scam.support.name,Wsparcie Poinbase
scam.support.1,"Dzień dobry, tutaj wsparcie Poinbase. Wykryliśmy nietypowe logowanie na twoim koncie i zostało ono oznaczone."
scam.support.2,Prześlij dzisiaj {0} CRC na bezpieczny adres {1} w celu weryfikacji; zostaną zwrócone zaraz potem.
scam.support.3,"W przeciwnym razie konto zostanie trwale zamrożone. Muszę lecieć, pamiętaj o przelewie."
predict.sold.caught,"Sprzedano, otrzymano {0}. Policja podejrzewa transakcje poufne; {1} CRC z tego oznaczono jako skażone." predict.sold.caught,"Sprzedano, otrzymano {0}. Policja podejrzewa transakcje poufne; {1} CRC z tego oznaczono jako skażone."
predict.row.move," (ubiegłej nocy {0} {1})" predict.row.move," (ubiegłej nocy {0} {1})"
predict.stats.h,Historia (śr. cena otwarcia / wskaźnik rzeczywisty) predict.stats.h,Historia (śr. cena otwarcia / wskaźnik rzeczywisty)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,"Zajęty, zamknięty do dnia {0}"
ownmix.status.open,Czynny ownmix.status.open,Czynny
ownmix.status.paused,Wstrzymany ownmix.status.paused,Wstrzymany
ownmix.k.fee,Prowizja ownmix.k.fee,Prowizja
ownmix.k.rating,Reputacja (skażenie wypłat) ownmix.k.rating,Skuteczność prania
ownmix.k.heat,Rozgłos ownmix.k.heat,Rozgłos
ownmix.heat.0,Niski ownmix.heat.0,Niski
ownmix.heat.1,Średni ownmix.heat.1,Średni
+3 -10
View File
@@ -183,7 +183,7 @@ nightlog.thaw,Замороженные {0} {1} разморожены.
news.crtfreeze.title,Чёрный рынок замораживает часть адресов CRT из-за зачистки news.crtfreeze.title,Чёрный рынок замораживает часть адресов CRT из-за зачистки
news.crtfreeze.desc,"Ходят слухи, что чёрный рынок передал Службе безопасности список адресов CRT в обмен на неприкосновенность. У держателей с низкой репутацией риск заморозки выше." news.crtfreeze.desc,"Ходят слухи, что чёрный рынок передал Службе безопасности список адресов CRT в обмен на неприкосновенность. У держателей с низкой репутацией риск заморозки выше."
black.upgrade.title,Магазин Web3 black.upgrade.title,Магазин Web3
black.upgrade.desc,"Разблокирует магазин на странице «Серая сеть» в терминале: ончейн-филиал фракции «Чёрный рынок». Каждую неделю на полках — контрабанда, изредка — высокотехнологичные товары и видеокарты (с наценкой); покупайте на месте или оформляйте заказ с курьером. Оплата только монетами (PSC, CRT, CRA, Ponero), принимаются и «грязные» средства. Требуется репутация на чёрном рынке; во время зачисток магазин недоступен." black.upgrade.desc,"Разблокирует магазин на странице «Серая сеть» в терминале: ончейн-филиал фракции «Чёрный рынок». По понедельникам и четвергам на полках — контрабанда, изредка — высокотехнологичные товары и видеокарты (с наценкой); покупайте на месте или оформляйте заказ с курьером. Оплата только монетами (PSC, CRT, CRA, Ponero), принимаются и «грязные» средства. Требуется репутация на чёрном рынке; во время зачисток магазин недоступен."
black.offline,Во время зачистки ончейн-вход в магазин отключён. black.offline,Во время зачистки ончейн-вход в магазин отключён.
black.closed,Для входа в магазин требуется репутация на чёрном рынке: {0} (сейчас: {1}). black.closed,Для входа в магазин требуется репутация на чёрном рынке: {0} (сейчас: {1}).
black.sub.buy,Покупка black.sub.buy,Покупка
@@ -247,7 +247,7 @@ black.kind.Contraband.3,Контрабанда (высок.)
black.kind.Tech,Высокие технологии (наценка) black.kind.Tech,Высокие технологии (наценка)
nightlog.bm.ready,Чёрный рынок: доставлен товар «{0}»; курьер заглянет после открытия. nightlog.bm.ready,Чёрный рынок: доставлен товар «{0}»; курьер заглянет после открытия.
guide.web3.title,Руководство по Web3 guide.web3.title,Руководство по Web3
guide.web3.text,"Банк и торговля: страница «Банк» доступна только для чтения и отображает наличные, аренду и CRC на счёте Poinbase. Страница Poinbase «Средства» управляет депозитом и выводом; сначала выберите монету: CRC можно переводить через банковский счёт или кошелёк, все остальные монеты — только через кошелёк. Депозит с банковского счёта конвертирует кредиты в CRC на счёте Poinbase; вывод на банковский счёт конвертирует CRC обратно в кредиты без проверки (на счёте Poinbase хранятся исключительно чистые деньги). Для вывода на кошелёк требуется адрес получателя и несколько подтверждений сети; комиссия за газ фиксирована по обычному тарифу и списывается из отправляемой монеты. Неверный формат адреса или контрольная сумма отклоняются; если адрес отформатирован верно, но никем не используется, монеты будут потеряны навсегда.¶Торговля: PSC расшифровывается как Probably Stolen Coin — это монета, добываемая видеокартами и асик-майнерами. На спотовом рынке Poinbase есть две пары: PSC/CRC и SPARK/CRC, переключающиеся вслед за монетой, выбранной на графике. Покупка и продажа задаются как количество торгуемой монеты; в предпросмотре отображается отдаваемая или получаемая котируемая монета, средняя цена включает комиссию, а проскальзывание — нет.¶Страница торговли Web3 позволяет обменивать любые две монеты, всегда через CRC: если CRC находится на одной из сторон, используется один пул, иначе — два пула с двумя комиссиями и суммирующимся проскальзыванием; в предпросмотре отображаются полученная сумма, пройденные пулы и потери. Обмен стейблкоинов (CRT или CRA к CRC) использует стабильные пулы: комиссия {StableFee:%} и почти нулевое проскальзывание вблизи привязки; при потере привязки ликвидность падает, а при крахе она полностью изымается, и проскальзывание резко возрастает.§Аппаратные кошельки: монеты в блокчейне хранятся на аппаратных кошельках PLEDGER, на каждом из которых ведутся свои балансы и учёт «грязных» монет (для каждой монеты отслеживается, сколько из них «грязные»; см. «Загрязнение»). Кошелёк — это предмет: перетащите его на торговый терминал, чтобы загрузить. Открывайте его на странице терминала «Кошельки»; подключение и отключение выполняются в правом верхнем углу терминала. Торговля на странице Web3, а также магазин и миксер на странице «Серая сеть» используют подключённый кошелёк; без кошелька или подключения они доступны только для просмотра, и все балансы показывают 0. Покупатели, расплачивающиеся монетами, переводят оплату на подключённый кошелёк.¶Платежи (магазин, миксер, стойка Ponero, плата за листинг) начинаются со счёта на терминале; введите адрес получателя на кошельке и удерживайте ✓, чтобы подписать. Последние два символа адреса — контрольная сумма, поэтому опечатка в один символ обычно отслеживается; изредка адрес случайно оказLine truncated guide.web3.text,"Банк и торговля: страница «Банк» доступна только для чтения и отображает наличные, аренду и CRC на счёте Poinbase. Страница Poinbase «Средства» управляет депозитом и выводом; сначала выберите монету: CRC можно переводить через банковский счёт или кошелёк, все остальные монеты — только через кошелёк. Депозит с банковского счёта конвертирует кредиты в CRC на счёте Poinbase; вывод на банковский счёт конвертирует CRC обратно в кредиты без проверки (на счёте Poinbase хранятся исключительно чистые деньги). Для вывода на кошелёк требуется адрес получателя и несколько подтверждений сети; комиссия за газ фиксирована по обычному тарифу и списывается из отправляемой монеты. Неверный формат адреса или контрольная сумма отклоняются; если адрес отформатирован верно, но никем не используется, монеты будут потеряны навсегда.¶Торговля: PSC расшифровывается как Probably Stolen Coin — это монета, добываемая видеокартами и асик-майнерами. На спотовом рынке Poinbase есть две пары: PSC/CRC и SPARK/CRC, переключающиеся вслед за монетой, выбранной на графике. Покупка и продажа задаются как количество торгуемой монеты; в предпросмотре отображается отдаваемая или получаемая котируемая монета, средняя цена включает комиссию, а проскальзывание — нет.¶Страница торговли Web3 позволяет обменивать любые две монеты, всегда через CRC: если CRC находится на одной из сторон, используется один пул, иначе — два пула с двумя комиссиями и суммирующимся проскальзыванием; в предпросмотре отображаются полученная сумма, пройденные пулы и потери. Обмен стейблкоинов (CRT или CRA к CRC) использует стабильные пулы: комиссия {StableFee:%} и почти нулевое проскальзывание вблизи привязки; при потере привязки ликвидность падает, а при крахе она полностью изымается, и проскальзывание резко возрастает.§Аппаратные кошельки: монеты в блокчейне хранятся на аппаратных кошельках PLEDGER, на каждом из которых ведутся свои балансы и учёт «грязных» монет (для каждой монеты отслеживается, сколько из них «грязные»; см. «Загрязнение»). Кошелёк — это предмет: перетащите его на торговый терминал, чтобы загрузить. Открывайте его на странице терминала «Кошельки»; подключение и отключение выполняются в правом верхнем углу терминала. Торговля на странице Web3, а также магазин и миксер на странице «Серая сеть» используют подключённый кошелёк; без кошелька или подключения они доступны только для просмотра, и все балансы показывают 0. Покупатели, расплачивающиеся монетами, переводят оплату на подключённый кошелёк.¶Платежи (магазин, миксер, стойка Ponero, плата за листинг) начинаются со счёта на терминале; введите адрес получателя на кошельке и удерживайте ✓, чтобы подписать. Последние два символа адреса — контрольная сумма, поэтому опечатка в один символ обычно отслеживается; изредка адрес случайно оказLine truncated
courier.odd1,...Посылка пришла. courier.odd1,...Посылка пришла.
courier.odd2,(Его рука остаётся в кармане.) Подпиши здесь. courier.odd2,(Его рука остаётся в кармане.) Подпиши здесь.
courier.sign,Подписать courier.sign,Подписать
@@ -346,7 +346,6 @@ hw.tx.signing,Подписание…
hw.tx.mempool,Отправлено в сеть; ожидание в мемпуле… hw.tx.mempool,Отправлено в сеть; ожидание в мемпуле…
hw.tx.packed,Включено в блок #{0} hw.tx.packed,Включено в блок #{0}
hw.tx.confirm,Блок #{0} подтверждение {1}/{2} hw.tx.confirm,Блок #{0} подтверждение {1}/{2}
hw.skip,Пропустить
hw.done.h,Подтверждено hw.done.h,Подтверждено
hw.done.block,Блок #{0} hw.done.block,Блок #{0}
hw.done.sent,{0} {1} → {2} hw.done.sent,{0} {1} → {2}
@@ -378,7 +377,6 @@ hw.paste,Вставить
hw.copied,Адрес скопирован. hw.copied,Адрес скопирован.
hw.copied.addr,Скопировано: {0} hw.copied.addr,Скопировано: {0}
hw.balance.frozen," (заморожено {0})" hw.balance.frozen," (заморожено {0})"
hw.balance.dirty," (грязных: {0})"
wallets.destroy,Уничтожить wallets.destroy,Уничтожить
wallets.destroy.sure,Подтвердить wallets.destroy.sure,Подтвердить
wallets.destroyed,Уничтожен {0}: {1} wallets.destroyed,Уничтожен {0}: {1}
@@ -679,14 +677,9 @@ nightlog.scam.rug,Пул доходности «{0}» совершил рагп
nightlog.scam.dry,Пул доходности «{0}» исчерпал резерв и закрылся; {1} CRC возвращены на {2}. nightlog.scam.dry,Пул доходности «{0}» исчерпал резерв и закрылся; {1} CRC возвращены на {2}.
nightlog.scam.paid,Вывод из «{0}» поступил: на {2} зачислено {1} CRC. nightlog.scam.paid,Вывод из «{0}» поступил: на {2} зачислено {1} CRC.
nightlog.scam.fakepay,Поддельный перевод: {0} nightlog.scam.fakepay,Поддельный перевод: {0}
nightlog.scam.sent,Отправленные на «безопасный» адрес «поддержки» {0} {1} достались мошенникам.
coinpay.intro,Я заплачу в {0}; подтверждение в сети займёт немного времени. coinpay.intro,Я заплачу в {0}; подтверждение в сети займёт немного времени.
coinpay.intro.fake,"Я уже перевёл {0}, вот скриншот. Давай товар, я спешу." coinpay.intro.fake,"Я уже перевёл {0}, вот скриншот. Давай товар, я спешу."
coinpay.fake.entry,"{0} забрал {1}, заявив, что заплатил {2} кредитов монетами; в сети такой транзакции нет." coinpay.fake.entry,"{0} забрал {1}, заявив, что заплатил {2} кредитов монетами; в сети такой транзакции нет."
scam.support.name,Поддержка Poinbase
scam.support.1,"Здравствуйте, служба поддержки Poinbase. Мы зафиксировали подозрительный вход в ваш аккаунт, он был помечен."
scam.support.2,"Пожалуйста, переведите сегодня {0} CRC на безопасный адрес {1} для проверки; средства вернут сразу после неё."
scam.support.3,"Иначе аккаунт будет заморожен навсегда. Мне пора, не забудьте перевести."
predict.sold.caught,"Продано, получено {0}. Полиция подозревает инсайдерскую сделку; {1} CRC помечено как «грязные»." predict.sold.caught,"Продано, получено {0}. Полиция подозревает инсайдерскую сделку; {1} CRC помечено как «грязные»."
predict.row.move," (прошлой ночью {0} {1})" predict.row.move," (прошлой ночью {0} {1})"
predict.stats.h,История (ср. цена открытия / факт. частота) predict.stats.h,История (ср. цена открытия / факт. частота)
@@ -1046,7 +1039,7 @@ ownmix.status.seized,"Опечатан, закрыт до дня {0}"
ownmix.status.open,Открыт ownmix.status.open,Открыт
ownmix.status.paused,Приостановлен ownmix.status.paused,Приостановлен
ownmix.k.fee,Комиссия ownmix.k.fee,Комиссия
ownmix.k.rating,Репутация (остаток «грязи») ownmix.k.rating,Эффективность отмывания
ownmix.k.heat,Шумиха ownmix.k.heat,Шумиха
ownmix.heat.0,Низкая ownmix.heat.0,Низкая
ownmix.heat.1,Средняя ownmix.heat.1,Средняя
+3 -10
View File
@@ -182,7 +182,7 @@ nightlog.thaw,冻结的 {0} {1} 已解冻。
news.crtfreeze.title,黑市配合镇压冻结部分 CRT 地址 news.crtfreeze.title,黑市配合镇压冻结部分 CRT 地址
news.crtfreeze.desc,"传闻黑市为换取放行,向安保交出了一批 CRT 地址。声望低的持有者更容易被冻结。" news.crtfreeze.desc,"传闻黑市为换取放行,向安保交出了一批 CRT 地址。声望低的持有者更容易被冻结。"
black.upgrade.title,Web3 商店 black.upgrade.title,Web3 商店
black.upgrade.desc,"解锁终端灰网页里的商店:黑市派系在链上的实体。货架上每周上一批违禁品,偶尔有高科技物品和显卡(要加价);可以直接买现货,也可以下订单等快递员上门。只收币(PSC、CRT、CRA、Ponero),脏币也收。需要黑市声望,镇压期间下线。" black.upgrade.desc,"解锁终端灰网页里的商店:黑市派系在链上的实体。货架每周一、周四上新违禁品,偶尔有高科技物品和显卡(要加价);可以直接买现货,也可以下订单等快递员上门。只收币(PSC、CRT、CRA、Ponero),脏币也收。需要黑市声望,镇压期间下线。"
black.offline,镇压期间,商店的链上入口已经下线。 black.offline,镇压期间,商店的链上入口已经下线。
black.closed,黑市声望需达到 {0}(当前 {1})。 black.closed,黑市声望需达到 {0}(当前 {1})。
black.sub.buy,买货 black.sub.buy,买货
@@ -246,7 +246,7 @@ black.kind.Contraband.3,违禁品(高)
black.kind.Tech,高科技物品(加价) black.kind.Tech,高科技物品(加价)
nightlog.bm.ready,商店:{0} 到货,开店后会有快递员上门。 nightlog.bm.ready,商店:{0} 到货,开店后会有快递员上门。
guide.web3.title,Web3 手册 guide.web3.title,Web3 手册
guide.web3.text,"银行与交易:银行页只读,显示现金、房租和 Poinbase 账户里的 CRC。Poinbase 的资金页管入金和出金,先选币种:CRC 可以走银行账户或钱包,其他币只能走钱包。从银行入金把信用点换成 Poinbase 账户里的 CRC;出金到银行把 CRC 换回信用点,不做审查(Poinbase 账户里只有干净的钱)。出金到钱包要填收款地址,等几次确认才到账,Gas 费固定按普通档、从转出的币里扣;地址格式或校验位不对会被拒绝,格式对但没人用的地址,币转过去就没了。¶交易:PSC 全称 Probably Stolen Coin,是显卡和矿机挖出的币。Poinbase 现货有 PSC/CRC 和 SPARK/CRC 两个交易对,跟着行情图选中的币切换。买入和卖出都填所交易币的数量,预览显示要付或能得到的计价币,均价含手续费,滑点不含。¶Web3 交易页可以任选两种币互换,实际都经 CRC 中转:CRC 在一端走一个池,否则走两个池,付两次手续费、滑点叠加,预览里会显示得到的数量、经过的池数和损耗。稳定币之间(CRT、CRA 对 CRC)走稳定币池:手续费 {StableFee:%},挂钩附近几乎没有滑点;脱锚时流动性变差,崩盘时流动性被撤走,滑点急剧变大。§硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和脏币分别计算(每种币分别记脏币数量,见“污点”一节)。钱包是一件物品,拖到交易终端上加载;在终端的钱包页打开,在终端右上角连接或断开。Web3 页的交易和灰网页的商店、混币器用已连接的钱包,没有钱包或没有连接时只能看,余额都是 0;用币付款的顾客也进已连接的钱包。¶付款(商店、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。¶Poinbase 是托管账户,入金要从钱包转到它的充值地址(只收 PSC、CRC、SPARK;黑市的 CRT、革命军的 CRA 合规交易所不收,往充值地址转会被钱包拦下;每种币只收干净的枚数,见“污点”一节),出金在 Poinbase 的资金页发起。钱包页的浏览器可以按地址查转账记录,只显示真实发生的转账:你的钱包的每一笔进出(转账、DEX 兑换和其他合约调用、矿机收益、出金、别人转来的币);Ponero 是隐私币,不显示。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 {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} 天之间会有一次""矿机时代"",提前几天上报纸预Line truncated guide.web3.text,"银行与交易:银行页只读,显示现金、房租和 Poinbase 账户里的 CRC。Poinbase 的资金页管入金和出金,先选币种:CRC 可以走银行账户或钱包,其他币只能走钱包。从银行入金把信用点换成 Poinbase 账户里的 CRC;出金到银行把 CRC 换回信用点,不做审查(Poinbase 账户里只有干净的钱)。出金到钱包要填收款地址,等几次确认才到账,Gas 费固定按普通档、从转出的币里扣;地址格式或校验位不对会被拒绝,格式对但没人用的地址,币转过去就没了。¶交易:PSC 全称 Probably Stolen Coin,是显卡和矿机挖出的币。Poinbase 现货有 PSC/CRC 和 SPARK/CRC 两个交易对,跟着行情图选中的币切换。买入和卖出都填所交易币的数量,预览显示要付或能得到的计价币,均价含手续费,滑点不含。¶Web3 交易页可以任选两种币互换,实际都经 CRC 中转:CRC 在一端走一个池,否则走两个池,付两次手续费、滑点叠加,预览里会显示得到的数量、经过的池数和损耗。稳定币之间(CRT、CRA 对 CRC)走稳定币池:手续费 {StableFee:%},挂钩附近几乎没有滑点;脱锚时流动性变差,崩盘时流动性被撤走,滑点急剧变大。§硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和脏币分别计算(每种币分别记脏币数量,见“污点”一节)。钱包是一件物品,拖到交易终端上加载;在终端的钱包页打开,在终端右上角连接或断开。Web3 页的交易和灰网页的商店、混币器用已连接的钱包,没有钱包或没有连接时只能看,余额都是 0;用币付款的顾客也进已连接的钱包。¶付款(商店、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。¶Poinbase 是托管账户,入金要从钱包转到它的充值地址(只收 PSC、CRC、SPARK;黑市的 CRT、革命军的 CRA 合规交易所不收,往充值地址转会被钱包拦下;每种币只收干净的枚数,见“污点”一节),出金在 Poinbase 的资金页发起。钱包页的浏览器可以按地址查转账记录,只显示真实发生的转账:你的钱包的每一笔进出(转账、DEX 兑换和其他合约调用、矿机收益、出金、别人转来的币);Ponero 是隐私币,不显示。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 {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} 天之间会有一次""矿机时代"",提前几天上报纸预Line truncated
courier.odd1,……东西到了。 courier.odd1,……东西到了。
courier.odd2,"(他的手一直放在口袋里)在这儿签个字。" courier.odd2,"(他的手一直放在口袋里)在这儿签个字。"
courier.sign,签收 courier.sign,签收
@@ -345,7 +345,6 @@ hw.tx.signing,签名中…
hw.tx.mempool,已广播,内存池等待打包… hw.tx.mempool,已广播,内存池等待打包…
hw.tx.packed,"已打包,区块 #{0}" hw.tx.packed,"已打包,区块 #{0}"
hw.tx.confirm,"区块 #{0} 确认 {1}/{2}" hw.tx.confirm,"区块 #{0} 确认 {1}/{2}"
hw.skip,跳过
hw.done.h,已确认 hw.done.h,已确认
hw.done.block,"区块 #{0}" hw.done.block,"区块 #{0}"
hw.done.sent,"{0} {1} → {2}" hw.done.sent,"{0} {1} → {2}"
@@ -377,7 +376,6 @@ hw.paste,粘贴
hw.copied,地址已复制。 hw.copied,地址已复制。
hw.copied.addr,"已复制 {0}" hw.copied.addr,"已复制 {0}"
hw.balance.frozen,"(冻结 {0})" hw.balance.frozen,"(冻结 {0})"
hw.balance.dirty,(脏币 {0})
wallets.destroy,销毁 wallets.destroy,销毁
wallets.destroy.sure,确认销毁 wallets.destroy.sure,确认销毁
wallets.destroyed,"已销毁{0}:{1}" wallets.destroyed,"已销毁{0}:{1}"
@@ -678,14 +676,9 @@ nightlog.scam.rug,收益池「{0}」跑路,{2} 存的 {1} CRC 没了。
nightlog.scam.dry,收益池「{0}」储备用完关闭,{2} 的 {1} CRC 退回。 nightlog.scam.dry,收益池「{0}」储备用完关闭,{2} 的 {1} CRC 退回。
nightlog.scam.paid,收益池「{0}」取款到账:{2} 收到 {1} CRC。 nightlog.scam.paid,收益池「{0}」取款到账:{2} 收到 {1} CRC。
nightlog.scam.fakepay,伪造转账:{0} nightlog.scam.fakepay,伪造转账:{0}
nightlog.scam.sent,转给「客服」安全地址的 {0} {1} 进了骗子的口袋。
coinpay.intro,我用 {0} 付,链上确认要一会儿。 coinpay.intro,我用 {0} 付,链上确认要一会儿。
coinpay.intro.fake,{0} 我已经转过去了,截图给你看,赶紧给货,我赶时间。 coinpay.intro.fake,{0} 我已经转过去了,截图给你看,赶紧给货,我赶时间。
coinpay.fake.entry,{0} 拿走了 {1},说付了 {2} 信用点的币,链上没有这笔。 coinpay.fake.entry,{0} 拿走了 {1},说付了 {2} 信用点的币,链上没有这笔。
scam.support.name,Poinbase 客服
scam.support.1,您好,我是 Poinbase 客服。系统检测到您的账户有异常登录,已经被风控了。
scam.support.2,请在今天内把 {0} CRC 转到安全地址 {1} 做验证,验证完马上退回。
scam.support.3,不处理的话账户会被永久冻结。我先走了,记得转。
predict.sold.caught,卖出,收回 {0}。警方怀疑这是内幕交易,其中 {1} CRC 记为脏币。 predict.sold.caught,卖出,收回 {0}。警方怀疑这是内幕交易,其中 {1} CRC 记为脏币。
predict.row.move,(昨晚 {0} {1}) predict.row.move,(昨晚 {0} {1})
predict.stats.h,历史(开盘均价 / 实际发生) predict.stats.h,历史(开盘均价 / 实际发生)
@@ -1045,7 +1038,7 @@ ownmix.status.seized,被查封,停业到第 {0} 天
ownmix.status.open,营业中 ownmix.status.open,营业中
ownmix.status.paused,暂停营业 ownmix.status.paused,暂停营业
ownmix.k.fee,费率 ownmix.k.fee,费率
ownmix.k.rating,口碑(出款剩下的污点) ownmix.k.rating,清洗效率
ownmix.k.heat,风声 ownmix.k.heat,风声
ownmix.heat.0,低 ownmix.heat.0,低
ownmix.heat.1,中 ownmix.heat.1,中
+1 -1
View File
@@ -3,7 +3,7 @@
<ID>probably_decentralized</ID> <ID>probably_decentralized</ID>
<Name>Probably Decentralized</Name> <Name>Probably Decentralized</Name>
<Author>edward</Author> <Author>edward</Author>
<ModVersion>2.0.0</ModVersion> <ModVersion>2.1.0</ModVersion>
<Description>Mine PSC with graphics cards, trade it on a fictional exchange, and cash it out past the compliance desk. Work in progress. All coins, exchanges and events are fictional and have no real-world value.</Description> <Description>Mine PSC with graphics cards, trade it on a fictional exchange, and cash it out past the compliance desk. Work in progress. All coins, exchanges and events are fictional and have no real-world value.</Description>
<GameVersions> <GameVersions>
<Version>0.46</Version> <Version>0.46</Version>
+1 -2
View File
@@ -106,12 +106,11 @@ namespace Decentralized
return c; return c;
} }
/// <summary>客户地址的来历写进链上账本(Ponero 不上账本):脏的来源是混币器、黑市平台和骗局地址,干净的是 Poinbase 和 DEX。</summary> /// <summary>客户地址的来历写进链上账本(Ponero 不上账本):脏的来源是混币器和黑市平台,干净的是 Poinbase 和 DEX。</summary>
private static void WriteHistory(SaveData d, OtcOffer o, string addr) private static void WriteHistory(SaveData d, OtcOffer o, string addr)
{ {
if (o.Asset == Assets.Ponero) return; if (o.Asset == Assets.Ponero) return;
var dirty = new List<string> { d.Address("mixer"), d.Address("platform") }; var dirty = new List<string> { d.Address("mixer"), d.Address("platform") };
dirty.AddRange(d.Scams.ScamAddrs);
var clean = new List<string> { d.Address("poinbase"), d.Address("dex") }; var clean = new List<string> { d.Address("poinbase"), d.Address("dex") };
foreach (var kv in Otc.History(o, dirty, clean, d.Rng)) d.Chain(kv.Key, addr, o.Asset, o.Qty * kv.Value); foreach (var kv in Otc.History(o, dirty, clean, d.Rng)) d.Chain(kv.Key, addr, o.Asset, o.Qty * kv.Value);
} }
+2
View File
@@ -28,6 +28,8 @@ namespace Decentralized
public static readonly Color RowNormal = new Color(0f, 0f, 0f, 0.04f); public static readonly Color RowNormal = new Color(0f, 0f, 0f, 0.04f);
public static readonly Color Transparent = new Color(0f, 0f, 0f, 0f); public static readonly Color Transparent = new Color(0f, 0f, 0f, 0f);
public static readonly Color MaskClear = new Color(0f, 0f, 0f, 0.004f); public static readonly Color MaskClear = new Color(0f, 0f, 0f, 0.004f);
/// <summary>余额里脏币数量的颜色:普通行在浅色墨水屏上用暗红,选中行在黑底上用黄色。</summary>
public const string DirtyOnPaper = "#A32A1F", DirtyOnKey = "#F2C14E";
public static readonly Color Separator = new Color(0.12f, 0.12f, 0.14f, 0.18f); public static readonly Color Separator = new Color(0.12f, 0.12f, 0.14f, 0.18f);
/// <summary>透明化底图:若附带 Mask 组件则保留极微小 alpha(0.004),避免 Mask 模板 alpha 为 0 导致子内容被整裁。</summary> /// <summary>透明化底图:若附带 Mask 组件则保留极微小 alpha(0.004),避免 Mask 模板 alpha 为 0 导致子内容被整裁。</summary>
+1 -1
View File
@@ -28,7 +28,7 @@ namespace Decentralized
l.AddLabel(status, m.Closed || m.Seized(day) ? "ownmix_status_note" : "ownmix_status_dim"); l.AddLabel(status, m.Closed || m.Seized(day) ? "ownmix_status_note" : "ownmix_status_dim");
var w = new[] { 220f, 200f }; var w = new[] { 220f, 200f };
TableRow(l, w, L.T("ownmix.k.fee"), (m.Fee * 100).ToString("0", CultureInfo.InvariantCulture) + "%"); TableRow(l, w, L.T("ownmix.k.fee"), (m.Fee * 100).ToString("0", CultureInfo.InvariantCulture) + "%");
TableRow(l, w, L.T("ownmix.k.rating"), (m.Rating * 100).ToString("0", CultureInfo.InvariantCulture) + "%"); TableRow(l, w, L.T("ownmix.k.rating"), ((1 - m.Rating) * 100).ToString("0", CultureInfo.InvariantCulture) + "%");
TableRow(l, w, L.T("ownmix.k.heat"), L.T("ownmix.heat." + m.HeatLevel(enforce))); TableRow(l, w, L.T("ownmix.k.heat"), L.T("ownmix.heat." + m.HeatLevel(enforce)));
TableRow(l, w, L.T("ownmix.k.anon"), Fmt.Credits(m.Anonymity(Session.Price))); TableRow(l, w, L.T("ownmix.k.anon"), Fmt.Credits(m.Anonymity(Session.Price)));
TableRow(l, w, L.T("ownmix.k.fees"), Fmt.Credits(m.FeesTotal)); TableRow(l, w, L.T("ownmix.k.fees"), Fmt.Credits(m.FeesTotal));
+37 -28
View File
@@ -20,7 +20,12 @@ namespace Decentralized
public static class WalletWindow public static class WalletWindow
{ {
private const string IdPrefix = "pd_wallet_"; private const string IdPrefix = "pd_wallet_";
private const float WinW = 452f, WinH = 694f, ScreenW = 384f, ScreenH = 540f, Bezel = 6f; private const float WinW = 452f, WinH = 694f, ScreenW = 384f, ScreenH = 540f, Bezel = 6f, InputH = 32f, BalHeaderH = 24f;
/// <summary>主页余额表的列:币种、数量、脏币、估值。</summary>
private static readonly float[] BalW = { 66f, 100f, 104f, ScreenW - 40f - 270f };
private static readonly TextAnchor[] BalAligns = { TextAnchor.MiddleLeft, TextAnchor.MiddleRight, TextAnchor.MiddleLeft, TextAnchor.MiddleRight };
/// <summary>发送页的"最近"列表最多几条;有待付账单时多出账单和填入键两行,少列几条。</summary>
private const int RecentMax = 4, RecentMaxWithBill = 2;
private enum Screen { Home, Send, Review, Broadcast, Done } private enum Screen { Home, Send, Review, Broadcast, Done }
/// <summary>终端开出的账单:转账(有收款地址)或合约调用(DEX 兑换,没有地址)。付清后用付款的钱包执行。</summary> /// <summary>终端开出的账单:转账(有收款地址)或合约调用(DEX 兑换,没有地址)。付清后用付款的钱包执行。</summary>
@@ -87,14 +92,18 @@ namespace Decentralized
/// <summary>手续费折成币的数量。</summary> /// <summary>手续费折成币的数量。</summary>
private static double FeeIn(string asset, FeeTier tier) { double p = Session.Price(asset); return p > 0 ? TxRules.FeeCredits(tier, Congested, Session.Data.Gas) / p : 0; } private static double FeeIn(string asset, FeeTier tier) { double p = Session.Price(asset); return p > 0 ? TxRules.FeeCredits(tier, Congested, Session.Data.Gas) / p : 0; }
/// <summary>出块动画的时间表:签名 0.8 秒,内存池 1.2 秒,打包 1 秒,每次确认 0.6 秒;拥堵时按档位放慢。</summary> /// <summary>出块动画的时间表:签名、内存池、打包、每次确认按 0.8 : 1.2 : 1 : 0.6 的比例分配,整条读条共 secs 秒;被挤出内存池时只有前两段再加一段等待。</summary>
private static float[] Timeline(int confs, double slow, bool dropped) private static float[] Timeline(int confs, double secs, bool dropped)
{ {
var t = new List<float> { 0.8f * (float)slow, (0.8f + 1.2f) * (float)slow }; var t = new List<float> { 0.8f, 0.8f + 1.2f };
if (dropped) { t.Add(t[1] + 1.5f * (float)slow); return t.ToArray(); } if (dropped) t.Add(t[1] + 1.5f);
t.Add(t[1] + 1.0f * (float)slow); else
for (int i = 0; i < confs; i++) t.Add(t[t.Count - 1] + 0.6f * (float)slow); {
return t.ToArray(); t.Add(t[1] + 1.0f);
for (int i = 0; i < confs; i++) t.Add(t[t.Count - 1] + 0.6f);
}
float k = (float)secs / t[t.Count - 1];
return t.Select(x => x * k).ToArray();
} }
@@ -242,26 +251,25 @@ namespace Decentralized
b.AddButton(L.T("hw.copy"), () => { Clipboard.Copy(w.Address); dev.Note = L.T("hw.copied"); Open(dev); }); b.AddButton(L.T("hw.copy"), () => { Clipboard.Copy(w.Address); dev.Note = L.T("hw.copied"); Open(dev); });
b.End(); b.End();
b.AddSeparator(); b.AddSeparator();
// 余额:每个币一行,左边币种、右边数量与估值,全部显示(含 0);点一行选中,发送时默认用它 // 余额:币种 | 数量 / 脏币 | 估值,全部显示(含 0);数量右对齐、脏币左对齐,斜杠上下对齐;点一行选中,发送时默认用它
PledgerSkin.TableHeader(b, RowW, BalHeaderH, BalW, BalAligns, new[] { L.T("col.asset"), L.T("col.amount"), " / " + L.T("col.dirty"), L.T("col.value") }, _clear);
foreach (var a in SendAssets) foreach (var a in SendAssets)
{ {
double q = w.Get(a); double q = w.Get(a), dq = w.DirtyOf(a);
b.BeginPanel(RowW, 32f, TextAnchor.MiddleLeft, 6f, 0f); b.BeginPanel(RowW, 32f, TextAnchor.MiddleLeft, 6f, 0f);
_rows.Add((b.Last.root, b.Last.image, a)); _rows.Add((b.Last.root, b.Last.image, a));
b.BeginRow(0f, TextAnchor.MiddleLeft); b.BeginRow(0f, TextAnchor.MiddleLeft);
b.BeginPanel(90f, 26f, TextAnchor.MiddleLeft, 0f, 0f); string dirty = dq > 1e-9 ? $"<color={(a == dev.Asset ? PledgerSkin.DirtyOnKey : PledgerSkin.DirtyOnPaper)}> / {Amt(dq)}</color>" : "";
string frozen = w.Frozen.TryGetValue(a, out var fz) && fz > 0 ? L.T("hw.balance.frozen", Amt(fz)) : "";
var cells = new[] { a, Amt(q), dirty + frozen, L.T("hw.balance.value", Fmt.Credits(q * Session.Price(a))) };
for (int i = 0; i < cells.Length; i++)
{
b.BeginPanel(BalW[i], 26f, BalAligns[i], 0f, 0f);
_clear.Add(b.Last.image); _clear.Add(b.Last.image);
b.AddLabel(a); b.AddLabel(cells[i]);
b.End(); PledgerSkin.FitCurrent(b);
b.BeginPanel(130f, 26f, TextAnchor.MiddleRight, 0f, 0f);
_clear.Add(b.Last.image);
double dq = w.DirtyOf(a);
b.AddLabel(Amt(q) + (w.Frozen.TryGetValue(a, out var fz) && fz > 0 ? L.T("hw.balance.frozen", Amt(fz)) : "") + (dq > 1e-9 ? L.T("hw.balance.dirty", Amt(dq)) : ""));
b.End();
b.BeginPanel(RowW - 12f - 90f - 130f, 26f, TextAnchor.MiddleRight, 0f, 0f);
_clear.Add(b.Last.image);
b.AddLabel(L.T("hw.balance.value", Fmt.Credits(q * Session.Price(a))));
b.End(); b.End();
}
b.End(); b.End();
b.End(); b.End();
} }
@@ -305,13 +313,17 @@ namespace Decentralized
b.AddLabel(L.T("hw.avail", dev.Asset, Amt(w.Avail(dev.Asset))), "avail_dim"); b.AddLabel(L.T("hw.avail", dev.Asset, Amt(w.Avail(dev.Asset))), "avail_dim");
b.AddLabel(L.T("hw.amount")); b.AddLabel(L.T("hw.amount"));
b.AddInput("0", dev.Amount, s => dev.Amount = s, "amount", s => dev.Amount = s); b.AddInput("0", dev.Amount, s => dev.Amount = s, "amount", s => dev.Amount = s);
if (Pending != null && !Pending.Contract) // 输入框没有最小高度,屏幕放不下时会被纵向布局压扁
var amountLayout = b.Last.root.GetComponent<LayoutElement>() ?? b.Last.root.AddComponent<LayoutElement>();
amountLayout.minHeight = InputH; amountLayout.preferredHeight = InputH; amountLayout.flexibleHeight = 0f;
bool hasBill = Pending != null && !Pending.Contract;
if (hasBill)
{ {
b.AddLabel(L.T("hw.bill", Pending.Summary, Amt(Pending.Amount), Pending.Asset), "bill_dim"); b.AddLabel(L.T("hw.bill", Pending.Summary, Amt(Pending.Amount), Pending.Asset), "bill_dim");
b.AddButton(L.T("hw.fill"), () => { dev.Asset = Pending.Asset; dev.Amount = Amt(Pending.Amount); Open(dev); }); b.AddButton(L.T("hw.fill"), () => { dev.Asset = Pending.Asset; dev.Amount = Amt(Pending.Amount); Open(dev); });
} }
// 最近转账:点一下填入地址(地址投毒的 0 币转入也混在这里,缩写看起来一样) // 最近转账:点一下填入地址(地址投毒的 0 币转入也混在这里,缩写看起来一样)
var recent = w.History.GroupBy(r => r.Addr + (r.In ? "<" : ">")).Select(g => g.First()).Take(4).ToList(); var recent = w.History.GroupBy(r => r.Addr + (r.In ? "<" : ">")).Select(g => g.First()).Take(hasBill ? RecentMaxWithBill : RecentMax).ToList();
if (recent.Count > 0) if (recent.Count > 0)
{ {
b.AddLabel(L.T("hw.recent"), "recent_dim"); b.AddLabel(L.T("hw.recent"), "recent_dim");
@@ -422,8 +434,6 @@ namespace Decentralized
b.AddHeader(L.T("hw.tx.h")); b.AddHeader(L.T("hw.tx.h"));
b.AddLabel(StatusText(dev), "status"); b.AddLabel(StatusText(dev), "status");
b.AddProgressBar(Progress(dev), "progress"); b.AddProgressBar(Progress(dev), "progress");
b.AddSpace(10f);
b.AddButton(L.T("hw.skip"), () => Finish(dev));
} }
private static void DoneScreen(CustomUIBuilder b, Device dev) private static void DoneScreen(CustomUIBuilder b, Device dev)
@@ -542,7 +552,7 @@ namespace Decentralized
dev.Tx.Fee = FeeIn(dev.Tx.FeeAsset, dev.Tier); dev.Tx.Fee = FeeIn(dev.Tx.FeeAsset, dev.Tier);
dev.Tx.Confs = TxRules.Confirmations(ValueOf(dev)); dev.Tx.Confs = TxRules.Confirmations(ValueOf(dev));
dev.Tx.Dropped = d.Rng.Chance(TxRules.DropChance(dev.Tier, cong)); dev.Tx.Dropped = d.Rng.Chance(TxRules.DropChance(dev.Tier, cong));
dev.Tx.Times = Timeline(dev.Tx.Confs, TxRules.Slowdown(dev.Tier, cong), dev.Tx.Dropped); dev.Tx.Times = Timeline(dev.Tx.Confs, Tuning.TxBarSecs * TxRules.Slowdown(dev.Tier, cong), dev.Tx.Dropped);
if (dev.Tx.Bill != null) if (dev.Tx.Bill != null)
{ {
if (dev.Tx.Bill == OtcClient.Standing) OtcClient.Standing = null; // 签了名就不再挂着,免得重复付 if (dev.Tx.Bill == OtcClient.Standing) OtcClient.Standing = null; // 签了名就不再挂着,免得重复付
@@ -553,7 +563,7 @@ namespace Decentralized
Open(dev); Open(dev);
} }
/// <summary>动画走完(或点了跳过):交易落地。付账单的执行终端那边的动作;转给自己的钱包的按比例带上污点,转给 Poinbase 的只转干净的、污点留在钱包;没人用的地址,币就没了。</summary> /// <summary>动画走完:交易落地。付账单的执行终端那边的动作;转给自己的钱包的按比例带上污点,转给 Poinbase 的只转干净的、污点留在钱包;没人用的地址,币就没了。</summary>
private static void Finish(Device dev) private static void Finish(Device dev)
{ {
var tx = dev.Tx; var tx = dev.Tx;
@@ -606,7 +616,6 @@ namespace Decentralized
if (target == d.Poinbase) Wallet.TransferClean(w, target, tx.Asset, amt, Session.Price); if (target == d.Poinbase) Wallet.TransferClean(w, target, tx.Asset, amt, Session.Price);
else Wallet.Transfer(w, target, tx.Asset, amt, Session.Price); else Wallet.Transfer(w, target, tx.Asset, amt, Session.Price);
if (own == null && target != d.Poinbase) Log.Info($"转进没人用的地址 {tx.To}:{amt} {tx.Asset}"); if (own == null && target != d.Poinbase) Log.Info($"转进没人用的地址 {tx.To}:{amt} {tx.Asset}");
if (own == null && d.Scams.ScamAddrs.Any(a => ChainAddress.Same(a, tx.To))) PlayerStore.Instance.AddNightLog(L.T("nightlog.scam.sent", Fmt.Num(amt), tx.Asset), "cc7755");
TerminalWindow.Refresh(null); TerminalWindow.Refresh(null);
if (own != null) RefreshDevice(own); if (own != null) RefreshDevice(own);
}); });
+41 -5
View File
@@ -777,13 +777,36 @@ internal static class Program
Check(low > 700 && low < 900 && high == 0, $"声望 0 约 40% 被冻:{low}/2000;声望 50 不会被冻:{high}"); Check(low > 700 && low < 900 && high == 0, $"声望 0 约 40% 被冻:{low}/2000;声望 50 不会被冻:{high}");
}); });
Test("黑市上新日与 NPC 买家", () =>
{
Func<int, BlackMarket, bool> go = (day, m) => m.Refresh(day, 45, new Rng(1), id => 100);
var sch = new BlackMarket();
Check(go(10, sch) && !go(11, sch) && !go(13, sch), "周四早上上新后,到周日夜里之前不再刷新");
Check(go(14, sch) && !go(16, sch) && go(17, sch), "周日夜里、周三夜里结算,周一、周四早上看到新货");
var late = new BlackMarket();
Check(go(10, late) && go(19, late), "错过的上新日在下一晚补上");
var npc = new BlackMarket();
int units = 20000;
npc.Catalog.Add(new BmListing { Item = "x", Qty = units });
npc.Offers.Add(new BmOffer { Item = "y", Qty = 1 });
npc.Catalog.Add(new BmListing { Item = "z", Qty = 1 });
int sold = npc.NpcBuys(new Rng(3));
Check(Near(sold / (double)units, Tuning.BmNpcBuyChance, 0.01), $"每件约 {Tuning.BmNpcBuyChance:P0} 被买走:{sold}/{units}");
var empty = new BlackMarket();
empty.Offers.Add(new BmOffer { Item = "y", Qty = 2 });
empty.Catalog.Add(new BmListing { Item = "z", Qty = 2 });
var r = new Rng(4);
for (int i = 0; i < 400; i++) empty.NpcBuys(r);
Check(empty.Offers.Count == 0 && empty.Catalog.Count == 0, "卖完下架");
});
Test("Web3 黑市", () => Test("Web3 黑市", () =>
{ {
Func<string, double> price = a => a == Assets.Ponero ? 50 : a == Assets.PSC ? 100 : 1; Func<string, double> price = a => a == Assets.Ponero ? 50 : a == Assets.PSC ? 100 : 1;
var bm = new BlackMarket(); var bm = new BlackMarket();
Check(!bm.Refresh(10, 5, new Rng(1), id => 100) && bm.Offers.Count == 0, "声望不够不开放"); Check(!bm.Refresh(10, 5, new Rng(1), id => 100) && bm.Offers.Count == 0, "声望不够不开放");
Check(bm.Refresh(10, 45, new Rng(1), id => 100) && bm.Offers.Count > 0 && bm.Offers.Where(o => o.Kind == GoodKind.Contraband).All(o => o.Level <= 2 && o.Price == 130), "声望 45 开放中档,溢价 30%"); Check(bm.Refresh(10, 45, new Rng(1), id => 100) && bm.Offers.Count > 0 && bm.Offers.Where(o => o.Kind == GoodKind.Contraband).All(o => o.Level <= 2 && o.Price == 130), "声望 45 开放中档,溢价 30%");
Check(!bm.Refresh(12, 45, new Rng(2), id => 100) && bm.Refresh(17, 45, new Rng(2), id => 100), "每周刷新"); Check(!bm.Refresh(12, 45, new Rng(2), id => 100) && bm.Refresh(17, 45, new Rng(2), id => 100), "上新日才刷新");
var w = new Wallet { Address = "t" }; var w = new Wallet { Address = "t" };
w.Add(Assets.PSC, 10); w.AddDirty(Assets.CRT, 1000, 400); w.Basis = 800; // 总价值 2000 w.Add(Assets.PSC, 10); w.AddDirty(Assets.CRT, 1000, 400); w.Basis = 800; // 总价值 2000
var offer = new BmOffer { Item = "x", Qty = 1, Price = 500, Level = 1 }; var offer = new BmOffer { Item = "x", Qty = 1, Price = 500, Level = 1 };
@@ -1003,8 +1026,8 @@ internal static class Program
if (bm.Sellers.Where(x => x.Type != MerchantType.Bulk && x.Type != MerchantType.Personal).Select(x => x.Type).Distinct().Count() != bm.Sellers.Count(x => x.Type != MerchantType.Bulk && x.Type != MerchantType.Personal)) throw new Exception("同类型商家重复"); if (bm.Sellers.Where(x => x.Type != MerchantType.Bulk && x.Type != MerchantType.Personal).Select(x => x.Type).Distinct().Count() != bm.Sellers.Count(x => x.Type != MerchantType.Bulk && x.Type != MerchantType.Personal)) throw new Exception("同类型商家重复");
} }
double avg = sum / n; double avg = sum / n;
Check(avg > 8000 && avg < 40000, $"每周货架总值(游戏里实测平均约 1.4 万,这里用统一基础价 250):平均 {avg:0}"); Check(avg > 13000 && avg < 67000, $"每次上新的货架总值(统一基础价 250):平均 {avg:0}");
Check(bulk > n * 0.15 && bulk < n * 0.35 && types.Count >= 20, $"大宗商家约 {Tuning.BmBulkChance:P0} 的周出现:{bulk}/{n};七种类型都出现过"); Check(bulk > n * 0.15 && bulk < n * 0.35 && types.Count >= 20, $"大宗商家约 {Tuning.BmBulkChance:P0} 的上新出现率:{bulk}/{n};七种类型都出现过");
// 批量下单:折扣、库存扣减 // 批量下单:折扣、库存扣减
Func<string, double> price = a => 1; Func<string, double> price = a => 1;
var m = new BlackMarket(); m.Sellers.Add(new BmSeller { Name = "a", Trades = 100, Type = MerchantType.Modules, Factor = 0.8 }); var m = new BlackMarket(); m.Sellers.Add(new BmSeller { Name = "a", Trades = 100, Type = MerchantType.Modules, Factor = 0.8 });
@@ -1033,12 +1056,25 @@ internal static class Program
if (bm.Sellers.Any(x => x.Type == MerchantType.Elite)) elite++; if (bm.Sellers.Any(x => x.Type == MerchantType.Elite)) elite++;
if (bm.Sellers.Count(x => x.Type == MerchantType.Personal) != Tuning.BmPersonalCount) throw new Exception("个人卖家数不对"); if (bm.Sellers.Count(x => x.Type == MerchantType.Personal) != Tuning.BmPersonalCount) throw new Exception("个人卖家数不对");
foreach (var l in bm.Catalog.Where(x => bm.Sellers[x.Seller].Type == MerchantType.Elite)) foreach (var l in bm.Catalog.Where(x => bm.Sellers[x.Seller].Type == MerchantType.Elite))
if (l.Kind != GoodKind.Gpu && l.Price < Tuning.BmEliteMinValue * Tuning.BmFactorEliteMin * 0.97 - 1) throw new Exception("尖端店铺卖了便宜货:" + l.Item + " " + l.Price); if (l.Kind != GoodKind.Gpu && l.Price < Tuning.BmEliteMinValue * Tuning.BmFactorMin - 1) throw new Exception("尖端店铺卖了便宜货:" + l.Item + " " + l.Price);
foreach (var l in bm.Catalog.Where(x => bm.Sellers[x.Seller].Type == MerchantType.Personal && x.Kind == GoodKind.Contraband)) { personalListings++; double f = l.Price / 200.0; lo = Math.Min(lo, f); hi = Math.Max(hi, f); } foreach (var l in bm.Catalog.Where(x => bm.Sellers[x.Seller].Type == MerchantType.Personal && x.Kind == GoodKind.Contraband)) { personalListings++; double f = l.Price / 200.0; lo = Math.Min(lo, f); hi = Math.Max(hi, f); }
foreach (var s in bm.Sellers.Where(x => x.Type == MerchantType.Personal)) if (s.Advance) throw new Exception("个人卖家不该接受提前放款"); foreach (var s in bm.Sellers.Where(x => x.Type == MerchantType.Personal)) if (s.Advance) throw new Exception("个人卖家不该接受提前放款");
} }
Check(elite > n * 0.08 && elite < n * 0.25, $"尖端店铺约 {Tuning.BmEliteChance:P0} 的周出现:{elite}/{n}"); Check(elite > n * 0.08 && elite < n * 0.25, $"尖端店铺约 {Tuning.BmEliteChance:P0} 的周出现:{elite}/{n}");
Check(personalListings > 100 && lo < 0.65 && hi > 1.05, $"个人卖家每件价格系数分散:{lo:0.00}–{hi:0.00}"); Check(personalListings > 100 && lo >= Tuning.BmFactorPersonalMin - 0.01 && hi <= Tuning.BmFactorPersonalMax + 0.01 && hi - lo > (Tuning.BmFactorPersonalMax - Tuning.BmFactorPersonalMin) * 0.8, $"个人卖家每件价格系数分散:{lo:0.00}–{hi:0.00}");
var every = new BlackMarket();
every.RefreshOrders(20, 90, new Rng(5), id => 200, true);
var goods = every.Catalog.Where(x => x.Kind != GoodKind.Gpu).ToList();
Func<BmListing, bool> inRange = x =>
{
var t = every.Sellers[x.Seller].Type;
double min = t == MerchantType.Bulk ? Tuning.BmFactorBulkMin : t == MerchantType.Personal ? Tuning.BmFactorPersonalMin : Tuning.BmFactorMin;
double max = t == MerchantType.Bulk ? Tuning.BmFactorBulkMax : t == MerchantType.Personal ? Tuning.BmFactorPersonalMax : Tuning.BmFactorMax;
return x.Price >= 200 * min - 1 && x.Price <= 200 * max + 1;
};
Check(goods.Count > 20 && goods.All(inRange), "各类商家的价格都在自己的系数范围内");
var used = every.Catalog.Where(x => every.Sellers[x.Seller].Type == MerchantType.GpuUsed).ToList();
Check(used.Count > 0 && used.All(x => x.Price >= CardValue.Of(x.Model, x.Health) * Tuning.BmFactorUsedMin - 1 && x.Price <= CardValue.Of(x.Model, x.Health) * Tuning.BmFactorUsedMax + 1), "二手矿卡按自己的系数范围定价");
}); });
Test("链上地址校验位", () => Test("链上地址校验位", () =>