Ponzi via signed wallet calls; counter informants guarantee prediction markets
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9484de2f1f
commit
4279d48374
8 files changed
+102
-29
No files matched your search
@@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
### 第七阶段:预测市场与操纵(7.1 预测市场、7.2 操纵检出与高息理财)
|
### 第七阶段:预测市场与操纵(7.1 预测市场、7.2 操纵检出与高息理财)
|
||||||
|
|
||||||
|
- 高息理财改用链上钱包:开张(宣传费 800 CRC)和卷走都是合约调用,用当前钱包签名;产品记下发行钱包,每晚垫付的利息从它出,卷走的池子进它(污点全额),卷走要用发行钱包签名。游戏内验证:主钱包签名开张 6%,三夜后签名卷走 1634,钱包 CRC 1000 → 200 → 1833,污点 1634,卷走手续费 1.13 CRT。
|
||||||
|
- 柜台线人接进预测市场:游戏里卖消息的顾客(乞丐、线人,提前 1–4 天说出新闻事件)、传闻纸条、派系特权都会把事件以"已知"排进日程;每天开门补盘时,对每个这样的、开始日在后天及以后的事件保证有一个盘口(窗口就是开始那天),开盘价按公开信息下的基础概率(不看冷却,每天有事件的概率取 35%),不因为已经排期而抬高——当晚价格才向 92% 靠拢,知道的人能赚到中间的差;押「是」算内幕单。游戏内验证:调试排一个 3 天后的已知停电,开盘出现"第 19 天:出现「停电」",是 0.03,线索"排期:第 19 天开始"。
|
||||||
|
|
||||||
- 高息理财(庞氏,Web3 "理财"页签,一个存档一次):选日息 2 / 4 / 6 / 8 / 10%,付 800 CRC 宣传费(Poinbase 账户)开张。每晚下层新存入 (300 + 15 × 天数) × (日息 / 4%)^1.5 × 声望系数 × 0.6–1.4 的 CRC,池子上限 6000 + 200 × 天数,每晚被取走 3%;利息先用新存入的付,不够从 Poinbase 账户补,补不上挤兑崩盘;每晚被举报概率 = 2% + 0.5 × 日息 + 4% × 池子占上限的比例(封顶 90%),被举报同样崩盘。崩盘或被举报:池子没收,记 FRAUD 1200(单件上限之外,按游戏罪证口径记一条),下层声望清零,报纸报道。随时可"卷走"(点两次确认):池子进 Poinbase 账户、污点全额,同样记罪证、清零声望。页面显示池子、昨晚存入、今晚利息、自己垫付的利息和"风声"(举报风险的三档提示)。
|
- 高息理财(庞氏,Web3 "理财"页签,一个存档一次):选日息 2 / 4 / 6 / 8 / 10%,付 800 CRC 宣传费(Poinbase 账户)开张。每晚下层新存入 (300 + 15 × 天数) × (日息 / 4%)^1.5 × 声望系数 × 0.6–1.4 的 CRC,池子上限 6000 + 200 × 天数,每晚被取走 3%;利息先用新存入的付,不够从 Poinbase 账户补,补不上挤兑崩盘;每晚被举报概率 = 2% + 0.5 × 日息 + 4% × 池子占上限的比例(封顶 90%),被举报同样崩盘。崩盘或被举报:池子没收,记 FRAUD 1200(单件上限之外,按游戏罪证口径记一条),下层声望清零,报纸报道。随时可"卷走"(点两次确认):池子进 Poinbase 账户、污点全额,同样记罪证、清零声望。页面显示池子、昨晚存入、今晚利息、自己垫付的利息和"风声"(举报风险的三档提示)。
|
||||||
- 复核(ops `research/ponzisim`,下层声望 50,每格 2000 局):日息越高越赚得快也越容易爆;开张第 40 天、日息 6%,熬 5 夜卷走平均净赚约 4000(崩盘概率 30%),熬 10 夜约 4800(53%),熬 20 夜约 2400(80%);日息 10% 熬 5 夜约 6800(41%),熬 20 夜约 900(89%)。每个选择的标准差和均值相当,"什么时候卷走"才是决策。
|
- 复核(ops `research/ponzisim`,下层声望 50,每格 2000 局):日息越高越赚得快也越容易爆;开张第 40 天、日息 6%,熬 5 夜卷走平均净赚约 4000(崩盘概率 30%),熬 10 夜约 4800(53%),熬 20 夜约 2400(80%);日息 10% 熬 5 夜约 6800(41%),熬 20 夜约 900(89%)。每个选择的标准差和均值相当,"什么时候卷走"才是决策。
|
||||||
- 游戏内验证:理财页签按日显示;4% 开张后一晚池子 372(昨晚存入 201、今晚利息 14.88);点两次卷走后 Poinbase CRC 4200 → 4572,污点 372;另一次 6% 开张过 4 夜被举报,池子 456 被没收,产品关闭,页面显示"每个存档只能开一次",晨间日志与新闻有记录。没有在游戏里验证:下层声望清零的实际数值(用游戏的 `SetReputation(0)`,没读回来看)、罪证数额的实际入账、付不出利息的挤兑路径(单元测试覆盖)、英文界面。
|
- 游戏内验证:理财页签按日显示;4% 开张后一晚池子 372(昨晚存入 201、今晚利息 14.88);点两次卷走后 Poinbase CRC 4200 → 4572,污点 372;另一次 6% 开张过 4 夜被举报,池子 456 被没收,产品关闭,页面显示"每个存档只能开一次",晨间日志与新闻有记录。没有在游戏里验证:下层声望清零的实际数值(用游戏的 `SetReputation(0)`,没读回来看)、罪证数额的实际入账、付不出利息的挤兑路径(单元测试覆盖)、英文界面。
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace Decentralized.Domain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 高息理财(庞氏):玩家定一个日息,下层的人按日息和下层声望往池子里存 CRC。每晚先拿新存入的钱付利息,不够的从 Poinbase 账户的 CRC 补,
|
/// 高息理财(庞氏):玩家定一个日息,下层的人按日息和下层声望往池子里存 CRC。每晚先拿新存入的钱付利息,不够的从发行人钱包的 CRC 补,
|
||||||
/// 补不上就挤兑崩盘;池子越大、日息越高越容易被举报,被举报同样崩盘。崩盘时池子被没收;玩家也可以随时卷走池子(污点全额)。
|
/// 补不上就挤兑崩盘;池子越大、日息越高越容易被举报,被举报同样崩盘。崩盘时池子被没收;玩家也可以随时卷走池子(污点全额)。
|
||||||
/// 每个存档只能开一次。
|
/// 每个存档只能开一次。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -18,6 +18,8 @@ namespace Decentralized.Domain
|
|||||||
{
|
{
|
||||||
public bool Open, Done;
|
public bool Open, Done;
|
||||||
public double Rate, Pool, OwnPaid, AdCost, Inflow;
|
public double Rate, Pool, OwnPaid, AdCost, Inflow;
|
||||||
|
/// <summary>发行人的钱包地址:宣传费、垫付的利息从它出,卷走的池子进它。</summary>
|
||||||
|
public string Wallet;
|
||||||
public int OpenDay = -1;
|
public int OpenDay = -1;
|
||||||
|
|
||||||
public static double Cap(int day) => Tuning.PonziCap0 + Tuning.PonziCapPerDay * day;
|
public static double Cap(int day) => Tuning.PonziCap0 + Tuning.PonziCapPerDay * day;
|
||||||
@@ -31,12 +33,12 @@ namespace Decentralized.Domain
|
|||||||
|
|
||||||
public bool CanOpen(int day) => !Open && !Done && day >= Tuning.PonziMinDay;
|
public bool CanOpen(int day) => !Open && !Done && day >= Tuning.PonziMinDay;
|
||||||
|
|
||||||
/// <summary>开张:宣传费从账户的 CRC 里扣。</summary>
|
/// <summary>开张:宣传费从发行人钱包的 CRC 里扣。</summary>
|
||||||
public bool Start(Wallet acct, double rate, int day)
|
public bool Start(Wallet acct, double rate, int day)
|
||||||
{
|
{
|
||||||
if (!CanOpen(day) || acct.Avail(Assets.CRC) + 1e-9 < Tuning.PonziAdCost) return false;
|
if (!CanOpen(day) || acct.Avail(Assets.CRC) + 1e-9 < Tuning.PonziAdCost) return false;
|
||||||
acct.Add(Assets.CRC, -Tuning.PonziAdCost);
|
acct.Add(Assets.CRC, -Tuning.PonziAdCost);
|
||||||
Open = true; Rate = rate; Pool = 0; OwnPaid = 0; AdCost = Tuning.PonziAdCost; OpenDay = day;
|
Open = true; Rate = rate; Pool = 0; OwnPaid = 0; AdCost = Tuning.PonziAdCost; OpenDay = day; Wallet = acct.Address;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +70,7 @@ namespace Decentralized.Domain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>卷走:池子全部进账户,污点全额(骗局所得)。返回卷走的数额。</summary>
|
/// <summary>卷走:池子全部进账户,污点全额(骗局所得)。返回卷走的数额。</summary>
|
||||||
|
/// <summary>卷走:池子全部进发行人钱包,污点全额(骗局所得)。</summary>
|
||||||
public double Rug(Wallet acct)
|
public double Rug(Wallet acct)
|
||||||
{
|
{
|
||||||
if (!Open) return 0;
|
if (!Open) return 0;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace Decentralized
|
|||||||
{
|
{
|
||||||
var d = Session.Data; int day = StoreStation.GetDayCounter();
|
var d = Session.Data; int day = StoreStation.GetDayCounter();
|
||||||
d.Predict.Markets.Clear();
|
d.Predict.Markets.Clear();
|
||||||
var made = new List<PredictMarket>(); for (int i = 0; i < 4; i++) made.AddRange(d.Predict.Refill(day, d.Rng, PredictGame.Candidates(day)));
|
PredictGame.Morning(d, day); var made = new List<PredictMarket>(); for (int i = 0; i < 4; i++) made.AddRange(d.Predict.Refill(day, d.Rng, PredictGame.Candidates(day)));
|
||||||
Log.Info($"测试:新开 {made.Count} 个预测盘口(不看解锁日)");
|
Log.Info($"测试:新开 {made.Count} 个预测盘口(不看解锁日)");
|
||||||
}));
|
}));
|
||||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Predict: add era and CRA (test)", () =>
|
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Predict: add era and CRA (test)", () =>
|
||||||
@@ -92,6 +92,11 @@ namespace Decentralized
|
|||||||
bk.Markets.Add(PredictMarket.Create(++bk.Seq, PredictKind.Cra, "cra", "CRA", 0, day, day + 1, day + 3, PredictMath.CraWarnProb(d.Stable.CraSubsidy, (Tuning.CraNpcStake + d.Staking.Earning) * d.Stable.CraRate, day, day + 1, day + 3, h)));
|
bk.Markets.Add(PredictMarket.Create(++bk.Seq, PredictKind.Cra, "cra", "CRA", 0, day, day + 1, day + 3, PredictMath.CraWarnProb(d.Stable.CraSubsidy, (Tuning.CraNpcStake + d.Staking.Earning) * d.Stable.CraRate, day, day + 1, day + 3, h)));
|
||||||
Log.Info($"测试:矿机时代 {d.Network.EraDay},CRA 补贴池 {d.Stable.CraSubsidy:0}");
|
Log.Info($"测试:矿机时代 {d.Network.EraDay},CRA 补贴池 {d.Stable.CraSubsidy:0}");
|
||||||
});
|
});
|
||||||
|
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Informant: queue power shortage in 3 days (test)", () => Log.Guard("线人测试", () =>
|
||||||
|
{
|
||||||
|
StoreStation.Instance.storeEventManager.QueueFuturEvent(EventListNormal.CreatePowerShortage(), 3, true);
|
||||||
|
Log.Info("测试:停电 3 天后(已知)");
|
||||||
|
}));
|
||||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Predict: window = tomorrow (test)", () => { foreach (var m in Session.Data.Predict.Markets) { m.FromDay = m.ToDay = StoreStation.GetDayCounter() + 1; } Log.Info("测试:所有盘口窗口改成明天"); });
|
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Predict: window = tomorrow (test)", () => { foreach (var m in Session.Data.Predict.Markets) { m.FromDay = m.ToDay = StoreStation.GetDayCounter() + 1; } Log.Info("测试:所有盘口窗口改成明天"); });
|
||||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Perp fund 0 (test)", () => { Session.Data.Perps.InsuranceFund = 0; Log.Info("测试:保险基金清零"); });
|
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Perp fund 0 (test)", () => { Session.Data.Perps.InsuranceFund = 0; Log.Info("测试:保险基金清零"); });
|
||||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "SPARK x0.3 (test)", () => { var st = Session.Data.Stable; st.Spark *= 0.3; Log.Info($"测试:SPARK 价格 {st.Spark:0.00}"); });
|
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "SPARK x0.3 (test)", () => { var st = Session.Data.Stable; st.Spark *= 0.3; Log.Info($"测试:SPARK 价格 {st.Spark:0.00}"); });
|
||||||
|
|||||||
@@ -268,7 +268,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."
|
||||||
item.web3guide.name,Web3 Handbook
|
item.web3guide.name,Web3 Handbook
|
||||||
item.web3guide.desc,"Bank: depositing turns credits into CRC in your Poinbase account; withdrawing turns CRC back into credits and goes through compliance screening, which looks at the Poinbase account's taint. Trading: buys are paid in the quote coin, sells in the traded coin. Mixer: pick a coin, amount and rounds; each round takes a fee and lowers taint, rounds equal days of waiting, and the coins come back to the same address; the more you deposit, the worse the cleaning. Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and taint; open and connect them on the terminal's Wallets page. The Web3 page's trading, black market and mixer use the connected wallet, and coin-paying customers and mining rewards go into it too. Payments (black market, 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. RatDigg miners (M1 / M2 / M3) are standalone machines with far more hash than a card and a lower power draw per hash; they need a battery, take modules and use no rig slots. Only the black market's miner dealers sell them, gated by black-market standing (M1 40, M2 60, M3 80), sometimes second-hand. When one burns out, repair it by putting electronic components in its repair slot in order; it comes back 20 health lower. Somewhere between day 50 and day 90 a "miner era" arrives, announced in the paper a few days earlier: the big farms halve their power costs, network hash climbs, GPU miners are diluted and low-end cards barely earn, while miners still do fine. Perps: the Perps tab on Poinbase uses your account CRC as margin, up to 5× on PSC and 3× on SPARK, one position per product, never long and short at once. Fills are worse than the quote (more so for bigger orders, like the spot pool) and opening and closing both cost a fee. Liquidation is checked only overnight against the day's average price: equity under 10% of notional wipes the margin. There is also a nightly funding payment; when the price is above its 7-day average, longs pay shorts. If a liquidation loses more than the margin, the insurance fund covers the gap; when it runs dry (a SPARK collapse can do that) winning positions are auto-deleveraged and give up half their profit; anything beyond that becomes your debt. Debt grows 2% a day, is repaid first from CRC in the account every night, blocks new positions and cash-outs, and after seven days items in your shop are seized to cover it; whatever is still short is written off and the perp account is banned for 30 days. Poinbase is a custodial account and can withdraw straight to the connected wallet; depositing from a wallet means sending to Poinbase's deposit address, which takes only CRC and PSC. More hardware wallets are sold by Dr. Jackson; drag one onto the trading terminal to add it, up to 5. The black market has cheaper ones. A wallet you no longer want can be destroyed on the Wallets page once its coins are moved out. Transfers pay a fee: slow, normal or fast, and gas prices rise and fall over roughly a week; when the network is congested 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. The pool pays from a subsidy fund; when it runs low the rate is cut and word of big holders pulling out may spread. Treat that as a warning: once it collapses CRA is worthless within three days and four days of unlocking is too slow. The balance token SPARK can be minted and burned against CRA at the going price (with a fee); its price swings hard and crashes with the collapse. Staking, minting and burning are contract calls and need a signature on the wallet. Black market: coin only, no CRC, 30% above normal channels, with extra markup on high-tech goods and GPUs; the coin you pay leaves its share of taint with the seller and the goods carry no stolen tag; GPUs may be fake, inspect them yourself. Orders are cheaper than spot but take days and may be intercepted; merchants sell by type at their own price factor, 5+ items get 5% off and 10+ get 10% off, and a bulk merchant appears at random with the lowest prices but six days of waiting; escrow costs 5%, is released on delivery and refunded if the seller runs; advance release takes another 10% off, but a scammer keeps the money and only sellers with 30+ trades accept; the platform itself can rug, be taken over by enforcement, or a seller can be arrested, after which your orders get traced and crime logged; forum rumors can be warnings. An intercepted parcel sometLine truncated
|
item.web3guide.desc,"Bank: depositing turns credits into CRC in your Poinbase account; withdrawing turns CRC back into credits and goes through compliance screening, which looks at the Poinbase account's taint. Trading: buys are paid in the quote coin, sells in the traded coin. Mixer: pick a coin, amount and rounds; each round takes a fee and lowers taint, rounds equal days of waiting, and the coins come back to the same address; the more you deposit, the worse the cleaning. Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and taint; open and connect them on the terminal's Wallets page. The Web3 page's trading, black market and mixer use the connected wallet, and coin-paying customers and mining rewards go into it too. Payments (black market, 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. RatDigg miners (M1 / M2 / M3) are standalone machines with far more hash than a card and a lower power draw per hash; they need a battery, take modules and use no rig slots. Only the black market's miner dealers sell them, gated by black-market standing (M1 40, M2 60, M3 80), sometimes second-hand. When one burns out, repair it by putting electronic components in its repair slot in order; it comes back 20 health lower. Somewhere between day 50 and day 90 a "miner era" arrives, announced in the paper a few days earlier: the big farms halve their power costs, network hash climbs, GPU miners are diluted and low-end cards barely earn, while miners still do fine. Perps: the Perps tab on Poinbase uses your account CRC as margin, up to 5× on PSC and 3× on SPARK, one position per product, never long and short at once. Fills are worse than the quote (more so for bigger orders, like the spot pool) and opening and closing both cost a fee. Liquidation is checked only overnight against the day's average price: equity under 10% of notional wipes the margin. There is also a nightly funding payment; when the price is above its 7-day average, longs pay shorts. If a liquidation loses more than the margin, the insurance fund covers the gap; when it runs dry (a SPARK collapse can do that) winning positions are auto-deleveraged and give up half their profit; anything beyond that becomes your debt. Debt grows 2% a day, is repaid first from CRC in the account every night, blocks new positions and cash-outs, and after seven days items in your shop are seized to cover it; whatever is still short is written off and the perp account is banned for 30 days. Poinbase is a custodial account and can withdraw straight to the connected wallet; depositing from a wallet means sending to Poinbase's deposit address, which takes only CRC and PSC. More hardware wallets are sold by Dr. Jackson; drag one onto the trading terminal to add it, up to 5. The black market has cheaper ones. A wallet you no longer want can be destroyed on the Wallets page once its coins are moved out. Transfers pay a fee: slow, normal or fast, and gas prices rise and fall over roughly a week; when the network is congested 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. The pool pays from a subsidy fund; when it runs low the rate is cut and word of big holders pulling out may spread. Treat that as a warning: once it collapses CRA is worthless within three days and four days of unlocking is too slow. The balance token SPARK can be minted and burned against CRA at the going price (with a fee); its price swings hard and crashes with the collapse. Staking, minting and burning are contract calls and need a signature on the wallet. Black market: coin only, no CRC, 30% above normal channels, with extra markup on high-tech goods and GPUs; the coin you pay leaves its share of taint with the seller and the goods carry no stolen tag; GPUs may be fake, inspect them yourself. Orders are cheaper than spot but take days and may be intercepted; merchants sell by type at their own price factor, 5+ items get 5% off and 10+ get 10% off, and a bulk merchant appears at random with the lowest prices but six days of waiting; escrow costs 5%, is released on delivery and refunded if the seller runs; advance release takes another 10% off, but a scammer keeps the money and only sellers with 30+ trades accept; the platform itself can rug, be taken over by enforcement, or a seller can be arrested, after which your orders get traced and crime logged; forum rumors can be warnings. An intercepted parcel sometLine 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
|
||||||
@@ -631,7 +631,7 @@ news.manip.desc,Regulators report that someone moved the price with large spot o
|
|||||||
perp.manip,Profit {0} on close ruled price manipulation and seized; perp account frozen for {1} days.
|
perp.manip,Profit {0} on close ruled price manipulation and seized; perp account frozen for {1} days.
|
||||||
web3.sub.ponzi,Yield
|
web3.sub.ponzi,Yield
|
||||||
ponzi.h,High-yield scheme
|
ponzi.h,High-yield scheme
|
||||||
ponzi.acct,Poinbase CRC: {0}
|
ponzi.acct,Issuer wallet {0}: CRC {1}
|
||||||
ponzi.rate,Daily rate {0}%
|
ponzi.rate,Daily rate {0}%
|
||||||
ponzi.pool,Pool {0} / cap {1}
|
ponzi.pool,Pool {0} / cap {1}
|
||||||
ponzi.inflow,New deposits last night {0}
|
ponzi.inflow,New deposits last night {0}
|
||||||
@@ -641,20 +641,24 @@ ponzi.wind,Word on the street: {0}
|
|||||||
ponzi.wind.low,calm
|
ponzi.wind.low,calm
|
||||||
ponzi.wind.mid,people are talking
|
ponzi.wind.mid,people are talking
|
||||||
ponzi.wind.high,regulators are watching
|
ponzi.wind.high,regulators are watching
|
||||||
ponzi.idle,No scheme yet. Pick a daily rate and pay the marketing cost to launch.
|
ponzi.idle,No scheme yet. Pick a daily rate and pay the marketing cost to launch (launching and rugging are contract calls signed on the wallet).
|
||||||
ponzi.done,The scheme is closed; only one per save.
|
ponzi.done,The scheme is closed; only one per save.
|
||||||
ponzi.ops,Actions
|
ponzi.ops,Actions
|
||||||
ponzi.rug,Rug the pool ({0})
|
ponzi.rug,Rug the pool ({0})
|
||||||
ponzi.rug.confirm,Click again to confirm rugging {0}
|
ponzi.rug.confirm,Click again to confirm rugging {0}
|
||||||
ponzi.rugged,"Took {0}, fully tainted."
|
ponzi.rugged,"Took {0}, fully tainted."
|
||||||
ponzi.open,Open a scheme
|
ponzi.open,Open a scheme
|
||||||
ponzi.ad,Marketing cost {0} CRC from your Poinbase account.
|
ponzi.ad,Marketing cost {0} CRC from the current wallet; signature required.
|
||||||
ponzi.start,Launch
|
ponzi.start,Launch
|
||||||
ponzi.started,Launched.
|
ponzi.started,Launched.
|
||||||
ponzi.err,Not enough CRC in Poinbase for the marketing cost.
|
ponzi.err,Not enough CRC in the wallet for the marketing cost.
|
||||||
nightlog.ponzi.collapse,"The scheme could not pay interest; run on the pool, {0} confiscated, fraud on record, lower-level standing wiped."
|
nightlog.ponzi.collapse,"The scheme could not pay interest; run on the pool, {0} confiscated, fraud on record, lower-level standing wiped."
|
||||||
nightlog.ponzi.reported,"The scheme was reported; pool {0} confiscated, fraud on record, lower-level standing wiped."
|
nightlog.ponzi.reported,"The scheme was reported; pool {0} confiscated, fraud on record, lower-level standing wiped."
|
||||||
news.ponzi.title,High-yield scheme collapses
|
news.ponzi.title,High-yield scheme collapses
|
||||||
news.ponzi.desc,A high-yield scheme run in the lower levels was reported; investors mobbed it and regulators froze the funds.
|
news.ponzi.desc,A high-yield scheme run in the lower levels was reported; investors mobbed it and regulators froze the funds.
|
||||||
news.ponzi.rug.title,Investment scam
|
news.ponzi.rug.title,Investment scam
|
||||||
news.ponzi.rug.desc,The operator of a high-yield scheme has run off with all the funds; lower-level investors lost everything.
|
news.ponzi.rug.desc,The operator of a high-yield scheme has run off with all the funds; lower-level investors lost everything.
|
||||||
|
ponzi.start.sum,"Open high-yield scheme, daily rate {0}%, marketing {1} CRC"
|
||||||
|
ponzi.rug.sum,Rug the pool {0}
|
||||||
|
ponzi.err.wallet,Sign with the issuer wallet.
|
||||||
|
predict.clue.counter,"Intel: scheduled (counter informant, rumor slip)"
|
||||||
@@ -267,7 +267,7 @@ black.kind.Contraband.3,违禁品(高)
|
|||||||
black.kind.Tech,高科技物品(加价)
|
black.kind.Tech,高科技物品(加价)
|
||||||
nightlog.bm.ready,"黑市:{0} 到货,开店后会有快递员上门。"
|
nightlog.bm.ready,"黑市:{0} 到货,开店后会有快递员上门。"
|
||||||
item.web3guide.name,Web3 手册
|
item.web3guide.name,Web3 手册
|
||||||
item.web3guide.desc,"银行:存入把信用点换成 Poinbase 账户里的 CRC;提取把 CRC 换回信用点,要过合规审查,审查看 Poinbase 账户的污点。交易:买入按计价币的数量支付,卖出按所交易币的数量卖出。混币器:选币种、填数量和轮数,每轮扣手续费并降低污点,轮数即等待天数,到期提回同一个地址;存入越多,清洗越差。硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和污点各算各的;在终端的钱包页打开、连接。Web3 页的交易、黑市、混币器用已连接的钱包,用币付款的顾客和挖矿收益也进它。付款(黑市、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。Poinbase 是托管账户,可以直接提到已连接的钱包;从钱包充值要转到 Poinbase 的充值地址,只收 CRC 和 PSC。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 5 个;黑市上也有更便宜的。不要的钱包可以在钱包页销毁,要先把币转走。转账要付手续费,分慢、普通、快三档,gas 价格大约一周一个起落;网络拥堵时手续费变贵,慢档可能被挤出内存池。转账前核对完整地址。质押:把 CRA 质押进革命军质押池每天有日息,利息并入本金;取出要先申请,等四天才到账,等待期间没有利息,也不能提前拿。质押池靠补贴池付息,补贴池见底会降息,有时还会传出大户撤出的消息,那是预兆:一旦崩盘,三天内 CRA 就一文不值,四天的解锁期来不及。平衡代币 SPARK 可以和 CRA 按价格互相铸销(收手续费),价格波动很大,崩盘时会跟着暴跌。质押、铸销都是合约调用,要在钱包上签名。RatDigg 矿机(M1 / M2 / M3)是独立的机器,算力比显卡大得多、耗电更省,要放电池才挖,可以放模块,不占矿架槽位;只在黑市的矿机商那里有,要黑市声望(M1 40、M2 60、M3 80),偶尔有二手的。暴毙后要往修理槽里放电子元件按顺序修好,修好健康少 20。第 50 到 90 天之间会有一次"矿机时代",提前几天上报纸预告,之后大矿场的耗电成本砍半,全网算力涨上去,显卡矿工的收益被摊薄,低档显卡几乎不赚钱,矿机还行。永续合约:Poinbase 的"永续"页,用账户里的 CRC 当保证金,PSC 最高 5 倍、SPARK 最高 3 倍,一个品种只有一个仓位,不能同时多空。成交价比现价差一截(单越大差得越多,和现货池一样),开平仓还收手续费。强平只在夜里按当天均价检查,权益不到名义价值的 10% 就被强平,保证金没了;每晚还有资金费,价格比近 7 天均价高时多头付给空头。强平后亏光保证金还不够的缺口,先由保险基金垫,基金见底(SPARK 崩盘这类大行情会抽干它)后盈利的仓位会被自动减仓、少拿一半盈利,再不够就记成你的欠款:欠款每天涨 2%,账户里的 CRC 每晚先拿去还,没还清不能开仓、不能出金,七天不还就没收店里的物品抵债,抵不够的核销并拉黑永续账户 30 天。黑市:只收币,不收 CRC,价格比正常渠道贵 30%,高科技物品和显卡另有加价;付出去的币带着按比例的污点留在卖家那边,货不带赃物标签;显卡不保证真假,自己鉴定。订单比现货便宜,要等几天,路上可能被截获;商家按类型卖货,价格系数各不相同,一次订 5 件以上 95 折、10 件以上 9 折,大宗商家随机出现,价格最低但要等六天;托管多付 5% 托管费,收货后放款,卖家跑路时退款;提前放款再打九折,卖家若是骗子钱就没了,只有成交 30 单以上的卖家接受;平台自己也可能跑路,也可能被执法接管,或者卖家落网,之后你的订单会被追查、记罪证;论坛上的传闻可以当预兆。被截获的包裹有时会变成执法人员上门:签收当场记罪证并查封,拒签只损失货款。出售:在黑市的卖货页把储藏区里的违禁品、高科技物品和显卡上架,标价是参考价的 0.6 到 1.8 倍。倍率越高成交越慢(0.9 以下约一天,1.0 约两天,1.8 约十四天),货款带污点的可能性和比例也越高,近 7 天出售的量越大,污点越重;同时最多上架 10 件,上架收 5% 上架费,上架后可以改价(收 2% 改价费,标价按参考价重算,成交的快慢跟着新倍率走),成交扣 8% 抽成,货款托管 3 天后进钱包;卖假卡可能被买家看穿而退货,拉低好评;平台跑路时上架的货和未放款的货款都没了Line truncated
|
item.web3guide.desc,"银行:存入把信用点换成 Poinbase 账户里的 CRC;提取把 CRC 换回信用点,要过合规审查,审查看 Poinbase 账户的污点。交易:买入按计价币的数量支付,卖出按所交易币的数量卖出。混币器:选币种、填数量和轮数,每轮扣手续费并降低污点,轮数即等待天数,到期提回同一个地址;存入越多,清洗越差。硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和污点各算各的;在终端的钱包页打开、连接。Web3 页的交易、黑市、混币器用已连接的钱包,用币付款的顾客和挖矿收益也进它。付款(黑市、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。Poinbase 是托管账户,可以直接提到已连接的钱包;从钱包充值要转到 Poinbase 的充值地址,只收 CRC 和 PSC。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 5 个;黑市上也有更便宜的。不要的钱包可以在钱包页销毁,要先把币转走。转账要付手续费,分慢、普通、快三档,gas 价格大约一周一个起落;网络拥堵时手续费变贵,慢档可能被挤出内存池。转账前核对完整地址。质押:把 CRA 质押进革命军质押池每天有日息,利息并入本金;取出要先申请,等四天才到账,等待期间没有利息,也不能提前拿。质押池靠补贴池付息,补贴池见底会降息,有时还会传出大户撤出的消息,那是预兆:一旦崩盘,三天内 CRA 就一文不值,四天的解锁期来不及。平衡代币 SPARK 可以和 CRA 按价格互相铸销(收手续费),价格波动很大,崩盘时会跟着暴跌。质押、铸销都是合约调用,要在钱包上签名。RatDigg 矿机(M1 / M2 / M3)是独立的机器,算力比显卡大得多、耗电更省,要放电池才挖,可以放模块,不占矿架槽位;只在黑市的矿机商那里有,要黑市声望(M1 40、M2 60、M3 80),偶尔有二手的。暴毙后要往修理槽里放电子元件按顺序修好,修好健康少 20。第 50 到 90 天之间会有一次"矿机时代",提前几天上报纸预告,之后大矿场的耗电成本砍半,全网算力涨上去,显卡矿工的收益被摊薄,低档显卡几乎不赚钱,矿机还行。永续合约:Poinbase 的"永续"页,用账户里的 CRC 当保证金,PSC 最高 5 倍、SPARK 最高 3 倍,一个品种只有一个仓位,不能同时多空。成交价比现价差一截(单越大差得越多,和现货池一样),开平仓还收手续费。强平只在夜里按当天均价检查,权益不到名义价值的 10% 就被强平,保证金没了;每晚还有资金费,价格比近 7 天均价高时多头付给空头。强平后亏光保证金还不够的缺口,先由保险基金垫,基金见底(SPARK 崩盘这类大行情会抽干它)后盈利的仓位会被自动减仓、少拿一半盈利,再不够就记成你的欠款:欠款每天涨 2%,账户里的 CRC 每晚先拿去还,没还清不能开仓、不能出金,七天不还就没收店里的物品抵债,抵不够的核销并拉黑永续账户 30 天。黑市:只收币,不收 CRC,价格比正常渠道贵 30%,高科技物品和显卡另有加价;付出去的币带着按比例的污点留在卖家那边,货不带赃物标签;显卡不保证真假,自己鉴定。订单比现货便宜,要等几天,路上可能被截获;商家按类型卖货,价格系数各不相同,一次订 5 件以上 95 折、10 件以上 9 折,大宗商家随机出现,价格最低但要等六天;托管多付 5% 托管费,收货后放款,卖家跑路时退款;提前放款再打九折,卖家若是骗子钱就没了,只有成交 30 单以上的卖家接受;平台自己也可能跑路,也可能被执法接管,或者卖家落网,之后你的订单会被追查、记罪证;论坛上的传闻可以当预兆。被截获的包裹有时会变成执法人员上门:签收当场记罪证并查封,拒签只损失货款。出售:在黑市的卖货页把储藏区里的违禁品、高科技物品和显卡上架,标价是参考价的 0.6 到 1.8 倍。倍率越高成交越慢(0.9 以下约一天,1.0 约两天,1.8 约十四天),货款带污点的可能性和比例也越高,近 7 天出售的量越大,污点越重;同时最多上架 10 件,上架收 5% 上架费,上架后可以改价(收 2% 改价费,标价按参考价重算,成交的快慢跟着新倍率走),成交扣 8% 抽成,货款托管 3 天后进钱包;卖假卡可能被买家看穿而退货,拉低好评;平台跑路时上架的货和未放款的货款都没了Line truncated
|
||||||
courier.odd1,……东西到了。
|
courier.odd1,……东西到了。
|
||||||
courier.odd2,"(他的手一直放在口袋里)在这儿签个字。"
|
courier.odd2,"(他的手一直放在口袋里)在这儿签个字。"
|
||||||
courier.sign,签收
|
courier.sign,签收
|
||||||
@@ -630,7 +630,7 @@ news.manip.desc,监管部门通报,有人用大额现货单推动价格,从
|
|||||||
perp.manip,平仓盈利 {0} 被判操纵价格,已没收,永续账户冻结 {1} 天。
|
perp.manip,平仓盈利 {0} 被判操纵价格,已没收,永续账户冻结 {1} 天。
|
||||||
web3.sub.ponzi,理财
|
web3.sub.ponzi,理财
|
||||||
ponzi.h,高息理财
|
ponzi.h,高息理财
|
||||||
ponzi.acct,Poinbase CRC:{0}
|
ponzi.acct,发行钱包 {0}:CRC {1}
|
||||||
ponzi.rate,日息 {0}%
|
ponzi.rate,日息 {0}%
|
||||||
ponzi.pool,池子 {0} / 上限 {1}
|
ponzi.pool,池子 {0} / 上限 {1}
|
||||||
ponzi.inflow,昨晚新存入 {0}
|
ponzi.inflow,昨晚新存入 {0}
|
||||||
@@ -640,20 +640,24 @@ ponzi.wind,风声:{0}
|
|||||||
ponzi.wind.low,平静
|
ponzi.wind.low,平静
|
||||||
ponzi.wind.mid,有人在议论
|
ponzi.wind.mid,有人在议论
|
||||||
ponzi.wind.high,监管盯上了
|
ponzi.wind.high,监管盯上了
|
||||||
ponzi.idle,还没有理财产品。选一个日息,付宣传费开张。
|
ponzi.idle,还没有理财产品。选一个日息,付宣传费开张(开张、卷走都是合约调用,要在钱包上签名)。
|
||||||
ponzi.done,理财产品已关闭,每个存档只能开一次。
|
ponzi.done,理财产品已关闭,每个存档只能开一次。
|
||||||
ponzi.ops,操作
|
ponzi.ops,操作
|
||||||
ponzi.rug,卷走池子({0})
|
ponzi.rug,卷走池子({0})
|
||||||
ponzi.rug.confirm,再点一次确认卷走 {0}
|
ponzi.rug.confirm,再点一次确认卷走 {0}
|
||||||
ponzi.rugged,卷走 {0},污点全额。
|
ponzi.rugged,卷走 {0},污点全额。
|
||||||
ponzi.open,开一个理财产品
|
ponzi.open,开一个理财产品
|
||||||
ponzi.ad,宣传费 {0} CRC,用 Poinbase 账户的钱。
|
ponzi.ad,宣传费 {0} CRC,从当前钱包出,要签名。
|
||||||
ponzi.start,开张
|
ponzi.start,开张
|
||||||
ponzi.started,开张了。
|
ponzi.started,开张了。
|
||||||
ponzi.err,Poinbase 里的 CRC 不够宣传费。
|
ponzi.err,钱包里的 CRC 不够宣传费。
|
||||||
nightlog.ponzi.collapse,理财付不出利息,挤兑,池子 {0} 被没收,记诈骗罪证,下层声望清零。
|
nightlog.ponzi.collapse,理财付不出利息,挤兑,池子 {0} 被没收,记诈骗罪证,下层声望清零。
|
||||||
nightlog.ponzi.reported,理财被举报,池子 {0} 被没收,记诈骗罪证,下层声望清零。
|
nightlog.ponzi.reported,理财被举报,池子 {0} 被没收,记诈骗罪证,下层声望清零。
|
||||||
news.ponzi.title,高息理财爆雷
|
news.ponzi.title,高息理财爆雷
|
||||||
news.ponzi.desc,下层有人发行的高息理财被举报,投资人围堵,资金已被监管冻结。
|
news.ponzi.desc,下层有人发行的高息理财被举报,投资人围堵,资金已被监管冻结。
|
||||||
news.ponzi.rug.title,理财骗局
|
news.ponzi.rug.title,理财骗局
|
||||||
news.ponzi.rug.desc,一款高息理财的发行人卷走了全部资金,下层的投资人血本无归。
|
news.ponzi.rug.desc,一款高息理财的发行人卷走了全部资金,下层的投资人血本无归。
|
||||||
|
ponzi.start.sum,开高息理财,日息 {0}%,宣传费 {1} CRC
|
||||||
|
ponzi.rug.sum,卷走理财池 {0}
|
||||||
|
ponzi.err.wallet,要用发行钱包签名。
|
||||||
|
predict.clue.counter,情报:已排期(柜台线人、传闻纸条)
|
||||||
@@ -232,7 +232,7 @@ namespace Decentralized
|
|||||||
var predictEvents = PredictGame.Available(day) || d.Predict.Markets.Count > 0
|
var predictEvents = PredictGame.Available(day) || d.Predict.Markets.Count > 0
|
||||||
? d.Predict.Night(day, PredictGame.ActiveIds(), m => PredictGame.Outcome(m, d), d.WalletAt, d.Rng, PredictGame.ClosePush) : new List<PredictEvent>();
|
? d.Predict.Night(day, PredictGame.ActiveIds(), m => PredictGame.Outcome(m, d), d.WalletAt, d.Rng, PredictGame.ClosePush) : new List<PredictEvent>();
|
||||||
d.Predict.Drift(day, m => PredictGame.PublicProb(m, d, day), d.Rng);
|
d.Predict.Drift(day, m => PredictGame.PublicProb(m, d, day), d.Rng);
|
||||||
var ponzi = d.Ponzi.Night(day, StoreReputation.GetStoreReputation(StoreReputation.FACTION_LOWER_LEVEL)?.GetReputation() ?? 0, d.Poinbase, d.Rng);
|
var ponzi = d.Ponzi.Night(day, StoreReputation.GetStoreReputation(StoreReputation.FACTION_LOWER_LEVEL)?.GetReputation() ?? 0, d.Own(d.Ponzi.Wallet ?? "") ?? d.Hot, d.Rng);
|
||||||
if (ponzi != null)
|
if (ponzi != null)
|
||||||
{
|
{
|
||||||
ps.secData.CommitCrime("FRAUD", (int)Tuning.PonziCrime);
|
ps.secData.CommitCrime("FRAUD", (int)Tuning.PonziCrime);
|
||||||
|
|||||||
@@ -46,12 +46,12 @@ namespace Decentralized
|
|||||||
return c == 0 ? 0.50 : c == 1 ? 0.35 : c == 2 ? 0.25 : 0;
|
return c == 0 ? 0.50 : c == 1 ? 0.35 : c == 2 ? 0.25 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static double EventProb(StoreEventManager mgr, string id, int days)
|
private static double EventProb(StoreEventManager mgr, string id, int days, bool ignoreCooldown = false)
|
||||||
{
|
{
|
||||||
var pool = StoreEventManager.normalEventBlueprints.Where(e => !mgr.IsEventOnCooldown(e.identifier)).ToList();
|
var pool = StoreEventManager.normalEventBlueprints.Where(e => ignoreCooldown || !mgr.IsEventOnCooldown(e.identifier)).ToList();
|
||||||
var bp = pool.Find(e => e.identifier == id);
|
var bp = pool.Find(e => e.identifier == id);
|
||||||
if (bp == null) return 0;
|
if (bp == null) return 0;
|
||||||
return PredictMath.EventProb(DayChance(mgr), bp.odd, pool.Sum(e => (double)e.odd), days);
|
return PredictMath.EventProb(ignoreCooldown ? 0.35 : DayChance(mgr), bp.odd, pool.Sum(e => (double)e.odd), days);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>已经排进日程的事件 / 派系行动在窗口里的开始日(known = 只看玩家已知的)。</summary>
|
/// <summary>已经排进日程的事件 / 派系行动在窗口里的开始日(known = 只看玩家已知的)。</summary>
|
||||||
@@ -133,10 +133,39 @@ namespace Decentralized
|
|||||||
public static void Morning(SaveData d, int day)
|
public static void Morning(SaveData d, int day)
|
||||||
{
|
{
|
||||||
if (!Available(day)) return;
|
if (!Available(day)) return;
|
||||||
|
ForceKnown(d, day);
|
||||||
var made = d.Predict.Refill(day, d.Rng, Candidates(day));
|
var made = d.Predict.Refill(day, d.Rng, Candidates(day));
|
||||||
foreach (var m in made) Log.Info($"预测盘口 #{m.Id}:{m.Kind} {m.Key} {m.Title} 阈值 {m.Param} 窗口 {m.FromDay}-{m.ToDay} 先验 {m.P0:0.000}");
|
foreach (var m in made) Log.Info($"预测盘口 #{m.Id}:{m.Kind} {m.Key} {m.Title} 阈值 {m.Param} 窗口 {m.FromDay}-{m.ToDay} 先验 {m.P0:0.000}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 柜台线人(游戏里卖消息的顾客)、传闻纸条和派系特权会把事件排进日程且标为已知:每个这样的事件保证有一个盘口(窗口 = 开始那天),
|
||||||
|
/// 开盘价按公开信息下的基础概率,不因为已经排期而抬高——知道的人能赚到价格追上来之前的差。开始日是明天的来不及,不开。
|
||||||
|
/// </summary>
|
||||||
|
private static void ForceKnown(SaveData d, int day)
|
||||||
|
{
|
||||||
|
var mgr = StoreStation.Instance?.storeEventManager;
|
||||||
|
if (mgr == null) return;
|
||||||
|
var bk = d.Predict;
|
||||||
|
for (int i = 0; i < mgr.futurEvents.Count; i++)
|
||||||
|
{
|
||||||
|
var e = mgr.futurEvents[i];
|
||||||
|
int start = day + mgr.futurEventsDay[i];
|
||||||
|
if (!e.IsKnown || start < day + 2 || e.eventType == StoreEvent.EventType.COSMETIC) continue;
|
||||||
|
bool op = e.isFactionOperation;
|
||||||
|
var kind = op ? PredictKind.Faction : PredictKind.Event;
|
||||||
|
string key = op ? e.sourceFaction : e.identifier;
|
||||||
|
if (!op && !StoreEventManager.normalEventBlueprints.Any(b => b.identifier == key)) continue;
|
||||||
|
if (bk.Markets.Any(m => m.Outcome < 0 && m.Kind == kind && m.Key == key && m.FromDay <= start && m.ToDay >= start)) continue;
|
||||||
|
if (bk.Markets.Count(m => m.Outcome < 0) >= Tuning.PredictOpenMax + 2) break;
|
||||||
|
double p = op ? PredictMath.FactionProb(1) : EventProb(mgr, key, 1, true);
|
||||||
|
string title = op ? L.T("predict.faction." + key) : e.GetDisplayName();
|
||||||
|
var m2 = PredictMarket.Create(++bk.Seq, kind, key, title, 0, day, start, start, p);
|
||||||
|
bk.Markets.Add(m2);
|
||||||
|
Log.Info($"线人情报开盘 #{m2.Id}:{kind} {key} 第 {start} 天,先验 {p:0.000}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ——— 公开信息下的合理概率(盘口夜里向它靠拢) ———
|
// ——— 公开信息下的合理概率(盘口夜里向它靠拢) ———
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ namespace Decentralized
|
|||||||
|
|
||||||
private static int LowerRep() => StoreReputation.GetStoreReputation(StoreReputation.FACTION_LOWER_LEVEL)?.GetReputation() ?? 0;
|
private static int LowerRep() => StoreReputation.GetStoreReputation(StoreReputation.FACTION_LOWER_LEVEL)?.GetReputation() ?? 0;
|
||||||
|
|
||||||
/// <summary>理财页:开一个高息理财产品,下层的人往里存钱;池子随时可以卷走,但每晚都有被举报的风险。用 Poinbase 账户的 CRC,不用签名。</summary>
|
/// <summary>理财页:开一个高息理财产品,下层的人往里存钱;池子随时可以卷走,但每晚都有被举报的风险。开张和卷走是链上合约调用,用当前钱包,要签名;之后每晚垫付的利息从发行人钱包出。</summary>
|
||||||
private static void PonziPage(CustomUIBuilder b)
|
private static void PonziPage(CustomUIBuilder b)
|
||||||
{
|
{
|
||||||
var d = Session.Data;
|
var d = Session.Data;
|
||||||
@@ -364,7 +364,8 @@ namespace Decentralized
|
|||||||
Columns(b, l =>
|
Columns(b, l =>
|
||||||
{
|
{
|
||||||
l.AddHeader(L.T("ponzi.h"));
|
l.AddHeader(L.T("ponzi.h"));
|
||||||
l.AddLabel(L.T("ponzi.acct", Fmt.Num(d.Poinbase.Avail(Assets.CRC))));
|
var issuer = pz.Open ? d.Own(pz.Wallet) ?? d.Hot : d.Hot;
|
||||||
|
l.AddLabel(L.T("ponzi.acct", WalletWindow.NameOf(issuer), Fmt.Num(issuer.Avail(Assets.CRC))));
|
||||||
l.AddSeparator();
|
l.AddSeparator();
|
||||||
if (pz.Open)
|
if (pz.Open)
|
||||||
{
|
{
|
||||||
@@ -386,14 +387,26 @@ namespace Decentralized
|
|||||||
{
|
{
|
||||||
if (!_ponziConfirm) { _ponziConfirm = true; Open(); return; }
|
if (!_ponziConfirm) { _ponziConfirm = true; Open(); return; }
|
||||||
_ponziConfirm = false;
|
_ponziConfirm = false;
|
||||||
double take = pz.Rug(d.Poinbase);
|
var iw = d.Own(pz.Wallet) ?? d.Hot;
|
||||||
PlayerStore.Instance.secData.CommitCrime("FRAUD", (int)Tuning.PonziCrime);
|
_message = L.T("hw.wait");
|
||||||
StoreReputation.GetStoreReputation(StoreReputation.FACTION_LOWER_LEVEL)?.SetReputation(0);
|
|
||||||
News.Show("pd_news_ponzi_rug_" + day, L.T("news.ponzi.rug.title"), L.T("news.ponzi.rug.desc"), 4);
|
|
||||||
Log.Info($"卷走理财池 {take:0},自己垫的利息 {pz.OwnPaid:0}");
|
|
||||||
_message = L.T("ponzi.rugged", Fmt.Num(take));
|
|
||||||
Session.Save();
|
|
||||||
Open();
|
Open();
|
||||||
|
WalletWindow.OpenForBill(new WalletWindow.Bill
|
||||||
|
{
|
||||||
|
Contract = true, Asset = Assets.CRC, Amount = 0, Spend = 0, FeeAsset = BestFeeAsset(iw),
|
||||||
|
Summary = L.T("ponzi.rug.sum", Fmt.Num(pz.Pool)),
|
||||||
|
Execute = pw =>
|
||||||
|
{
|
||||||
|
if (!pz.Open || !ChainAddress.Same(pw.Address, pz.Wallet)) { _message = L.T("ponzi.err.wallet"); Open(); return; }
|
||||||
|
double take = pz.Rug(pw);
|
||||||
|
PlayerStore.Instance.secData.CommitCrime("FRAUD", (int)Tuning.PonziCrime);
|
||||||
|
StoreReputation.GetStoreReputation(StoreReputation.FACTION_LOWER_LEVEL)?.SetReputation(0);
|
||||||
|
News.Show("pd_news_ponzi_rug_" + day, L.T("news.ponzi.rug.title"), L.T("news.ponzi.rug.desc"), 4);
|
||||||
|
Log.Info($"卷走理财池 {take:0},自己垫的利息 {pz.OwnPaid:0},钱包 {pw.Address}");
|
||||||
|
_message = L.T("ponzi.rugged", Fmt.Num(take));
|
||||||
|
Session.Save();
|
||||||
|
Open();
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -410,9 +423,21 @@ namespace Decentralized
|
|||||||
r.AddLabel(L.T("ponzi.ad", Fmt.Num(Tuning.PonziAdCost)));
|
r.AddLabel(L.T("ponzi.ad", Fmt.Num(Tuning.PonziAdCost)));
|
||||||
r.AddButton(L.T("ponzi.start"), () =>
|
r.AddButton(L.T("ponzi.start"), () =>
|
||||||
{
|
{
|
||||||
_message = pz.Start(d.Poinbase, _ponziRate, day) ? L.T("ponzi.started") : L.T("ponzi.err");
|
if (d.Hot.Avail(Assets.CRC) + 1e-9 < Tuning.PonziAdCost) { _message = L.T("ponzi.err"); Open(); return; }
|
||||||
Session.Save();
|
double rate = _ponziRate;
|
||||||
|
_message = L.T("hw.wait");
|
||||||
Open();
|
Open();
|
||||||
|
WalletWindow.OpenForBill(new WalletWindow.Bill
|
||||||
|
{
|
||||||
|
Contract = true, Asset = Assets.CRC, Amount = Tuning.PonziAdCost,
|
||||||
|
Summary = L.T("ponzi.start.sum", (rate * 100).ToString("0", CultureInfo.InvariantCulture), Fmt.Num(Tuning.PonziAdCost)),
|
||||||
|
Execute = pw =>
|
||||||
|
{
|
||||||
|
_message = pz.Start(pw, rate, StoreStation.GetDayCounter()) ? L.T("ponzi.started") : L.T("ponzi.err");
|
||||||
|
Session.Save();
|
||||||
|
Open();
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user