第十阶段 stage 2(二):CRA 部分抵押(储备、抵押率、挪用与崩盘线、劫掠补储备)、官方铸造与销毁排队、官方跑路、质押多币种入口
This commit is contained in:
1 parent
3758049dcb
commit
d0dfa93226
17 files changed
+493
-117
No files matched your search
@@ -89,8 +89,8 @@ namespace Decentralized
|
||||
var d = Session.Data; int day = StoreStation.GetDayCounter(); var bk = d.Predict;
|
||||
bk.Markets.Add(PredictMarket.Create(++bk.Seq, PredictKind.Era, "era", L.T("predict.era"), 0, day, day + 1, day + 3, PredictMath.EraProb(day, day + 1, day + 3, -1) + 0.05));
|
||||
double h = 1 - System.Math.Pow(1 - Tuning.CraSpiralWeekly, 1.0 / 7);
|
||||
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}");
|
||||
bk.Markets.Add(PredictMarket.Create(++bk.Seq, PredictKind.Cra, "cra", "CRA", 0, day, day + 1, day + 3, PredictMath.CraWarnProb(d.Stable.Cushion, Stablecoins.CushionDrain(Tuning.CraNpcStake + d.Staking.Earning, d.Stable.CraRate), day, day + 1, day + 3, h)));
|
||||
Log.Info($"测试:矿机时代 {d.Network.EraDay},CRA 储备 {d.Stable.Reserve:0}(R/S {d.Stable.Ratio:0.00})");
|
||||
});
|
||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Informant: queue power shortage in 3 days (test)", () => Log.Guard("线人测试", () =>
|
||||
{
|
||||
@@ -186,8 +186,8 @@ namespace Decentralized
|
||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "CRA spiral warning (test)", () =>
|
||||
{
|
||||
var st = Session.Data.Stable; int day = StoreStation.GetDayCounter();
|
||||
st.CraWarnDay = day; st.CraSpiralDay = day + 3;
|
||||
Log.Info($"测试:CRA 预兆今天,螺旋第 {st.CraSpiralDay} 天");
|
||||
st.CraWarnDay = day; st.CraEventDay = day + 3;
|
||||
Log.Info($"测试:CRA 预兆今天,挪用日第 {st.CraEventDay} 天");
|
||||
});
|
||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Give terminal (test)", () => { Items.Give(ModHelper.SpawnItem(Items.Terminal)); });
|
||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Hardware wallets (test)", () => { Items.Give(Items.NewHwWallet(false)); Items.Give(Items.NewHwWallet(true)); Log.Info("测试:给了一个正品、一个被投毒的硬件钱包"); });
|
||||
|
||||
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} Gestakt {1}
|
||||
stake.do,Staken
|
||||
stake.undo,Auszahlung beantragen
|
||||
spark.h,Ausgleichstoken
|
||||
spark.mint,SPARK prägen
|
||||
spark.burn,SPARK verbrennen
|
||||
stake.sum.in,{0} CRA staken
|
||||
stake.sum.out,Auszahlung von {0} CRA beantragen (Gutschrift in {1} Tagen)
|
||||
stake.done.in,{0} CRA gestakt.
|
||||
@@ -470,9 +467,7 @@ stake.done.out,Auszahlung von {0} CRA beantragt; Rückkehr in die Wallet an Tag
|
||||
nightlog.stakeint,Staking-Zinsen +{0} CRA.
|
||||
nightlog.unstaked,{0} CRA aus dem Staking wurden an {1} zurückgebucht.
|
||||
news.crawarn.title,Unruhe im Revolution-Staking-Pool
|
||||
news.crawarn.desc,"Großanleger ziehen Kapital ab und der Staking-Subventionspool leert sich. Die Entsperrung dauert vier Tage; manche meinen, es sei Zeit zu handeln."
|
||||
news.cralow.title,Revolution senkt Staking-Zinssatz
|
||||
news.cralow.desc,Der Subventionspool ist fast leer und die Revolution hat den CRA-Staking-Zins auf einen Bruchteil gekürzt.
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,Spot
|
||||
poin.sub.perp,Perps
|
||||
@@ -906,3 +901,21 @@ swap.get,Erhalten
|
||||
swap.preview,"Ca. {0} {1} {2} Pool(s), Verlust {3} %"
|
||||
swap.go,Tauschen
|
||||
swap.same,Zahlungs- und Empfangswährung müssen verschieden sein.
|
||||
cra.mint,Prägen
|
||||
cra.burn,Einlösen
|
||||
mint.h,Offizielle Prägung (CRC + SPARK)
|
||||
mint.need,Benötigt {0} CRC und {1} SPARK
|
||||
mint.reserve,Reservedeckung {0} % Besicherung {1} %
|
||||
mint.queue,Offene Aufträge
|
||||
mint.order,"{0} {1} CRA, Tag {2}"
|
||||
mint.sum.in,{0} CRA mit {1} CRC und {2} SPARK prägen ({3}–{4} Tage)
|
||||
mint.sum.out,{0} CRA gegen CRC und SPARK einlösen ({1} Tage)
|
||||
mint.done.in,Prägeauftrag erteilt; fällig an Tag {0}.
|
||||
mint.done.out,Einlöseauftrag erteilt; fällig an Tag {0}.
|
||||
stake.coin,Einzahlungswährung
|
||||
stake.sum.via,{0} {1} tauschen → ca. {2} CRA und staken
|
||||
nightlog.cra.minted,{0} CRA geprägt und gestakt ({1}).
|
||||
nightlog.cra.burned,"{0} CRA eingelöst: +{1} CRC, +{2} SPARK ({3})."
|
||||
nightlog.cra.lost,Der Herausgeber hat nicht reagiert: Der Auftrag ({1}) über {0} CRA ist verloren.
|
||||
news.crawarn.desc,"Jemand zählt die Reserve der Revolution nach; gestaktes CRA lässt sich womöglich nicht vollständig einlösen. Das Entsperren dauert vier Tage; manche sagen, es sei Zeit zu handeln."
|
||||
news.cralow.desc,Die Reservedeckung wird knapp; die Revolution hat den CRA-Staking-Zins auf einen Bruchteil gesenkt.
|
||||
|
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} Staked {1}
|
||||
stake.do,Stake
|
||||
stake.undo,Request withdrawal
|
||||
spark.h,Balance token
|
||||
spark.mint,Mint SPARK
|
||||
spark.burn,Burn SPARK
|
||||
stake.sum.in,Stake {0} CRA
|
||||
stake.sum.out,Request withdrawal of {0} CRA (arrives in {1} days)
|
||||
stake.done.in,Staked {0} CRA.
|
||||
@@ -470,9 +467,7 @@ stake.done.out,Requested withdrawal of {0} CRA; back in the wallet on day {1}.
|
||||
nightlog.stakeint,Staking interest +{0} CRA.
|
||||
nightlog.unstaked,{0} CRA withdrawn from staking returned to {1}.
|
||||
news.crawarn.title,Unrest at the Revolution staking pool
|
||||
news.crawarn.desc,Big holders are pulling out and the staking subsidy pool is running dry. Unlocking takes four days; some say it is time to move.
|
||||
news.cralow.title,Revolution cuts staking rate
|
||||
news.cralow.desc,"The subsidy pool is nearly empty, and the Revolution has cut the CRA staking rate to a fraction."
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,Spot
|
||||
poin.sub.perp,Perps
|
||||
@@ -906,3 +901,21 @@ swap.get,Receive
|
||||
swap.preview,"Receive about {0} {1} {2} pool(s), loss {3}%"
|
||||
swap.go,Swap
|
||||
swap.same,Pay and receive must be different coins.
|
||||
cra.mint,Mint
|
||||
cra.burn,Redeem
|
||||
mint.h,Official mint (CRC + SPARK)
|
||||
mint.need,Needs {0} CRC and {1} SPARK
|
||||
mint.reserve,Reserve ratio {0}% Collateral ratio {1}%
|
||||
mint.queue,Pending orders
|
||||
mint.order,"{0} {1} CRA, day {2}"
|
||||
mint.sum.in,Mint {0} CRA with {1} CRC and {2} SPARK ({3}–{4} days)
|
||||
mint.sum.out,Redeem {0} CRA for CRC and SPARK ({1} days)
|
||||
mint.done.in,Mint order placed; due on day {0}.
|
||||
mint.done.out,Redeem order placed; due on day {0}.
|
||||
stake.coin,Deposit coin
|
||||
stake.sum.via,"Swap {0} {1} → about {2} CRA, then stake"
|
||||
nightlog.cra.minted,"Minted {0} CRA, now staked ({1})."
|
||||
nightlog.cra.burned,"Redeemed {0} CRA: +{1} CRC, +{2} SPARK ({3})."
|
||||
nightlog.cra.lost,The issuer did not respond: the {1} order of {0} CRA is lost.
|
||||
news.crawarn.desc,"Someone is counting the Revolution's reserve, and staked CRA may not be redeemable in full. Unlocking takes four days; some say it is time to move."
|
||||
news.cralow.desc,"The reserve ratio is running low, and the Revolution has cut the CRA staking rate to a fraction."
|
||||
|
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} En staking {1}
|
||||
stake.do,Hacer staking
|
||||
stake.undo,Solicitar retiro
|
||||
spark.h,Token de balance
|
||||
spark.mint,Acuñar SPARK
|
||||
spark.burn,Quemar SPARK
|
||||
stake.sum.in,Poner {0} CRA en staking
|
||||
stake.sum.out,Solicitar retiro de {0} CRA (llega en {1} día(s))
|
||||
stake.done.in,{0} CRA puestos en staking.
|
||||
@@ -470,9 +467,7 @@ stake.done.out,Retiro de {0} CRA solicitado; vuelve a la billetera el día {1}.
|
||||
nightlog.stakeint,Interés de staking +{0} CRA.
|
||||
nightlog.unstaked,Los {0} CRA retirados de staking volvieron a {1}.
|
||||
news.crawarn.title,Agitación en el fondo de staking de la Revolución
|
||||
news.crawarn.desc,Los grandes inversores están retirándose y el fondo de subsidio de staking se agota. El desbloqueo tarda cuatro días; algunos dicen que es hora de actuar.
|
||||
news.cralow.title,La Revolución reduce la tasa de staking
|
||||
news.cralow.desc,"El fondo de subsidio está casi vacío, y la Revolución redujo la tasa de staking de CRA a una fracción."
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,Spot
|
||||
poin.sub.perp,Perpetuos
|
||||
@@ -906,3 +901,21 @@ swap.get,Recibir
|
||||
swap.preview,"Aprox. {0} {1} {2} pool(s), pérdida {3} %"
|
||||
swap.go,Canjear
|
||||
swap.same,Las monedas a pagar y recibir deben ser distintas.
|
||||
cra.mint,Acuñar
|
||||
cra.burn,Redimir
|
||||
mint.h,Acuñación oficial (CRC + SPARK)
|
||||
mint.need,Requiere {0} CRC y {1} SPARK
|
||||
mint.reserve,Cobertura {0} % Colateral {1} %
|
||||
mint.queue,Órdenes pendientes
|
||||
mint.order,"{0} {1} CRA, día {2}"
|
||||
mint.sum.in,Acuñar {0} CRA con {1} CRC y {2} SPARK ({3}–{4} días)
|
||||
mint.sum.out,Redimir {0} CRA por CRC y SPARK ({1} días)
|
||||
mint.done.in,Orden de acuñación enviada; vence el día {0}.
|
||||
mint.done.out,Orden de redención enviada; vence el día {0}.
|
||||
stake.coin,Moneda a depositar
|
||||
stake.sum.via,Canjear {0} {1} → aprox. {2} CRA y apostar
|
||||
nightlog.cra.minted,{0} CRA acuñados y apostados ({1}).
|
||||
nightlog.cra.burned,"{0} CRA redimidos: +{1} CRC, +{2} SPARK ({3})."
|
||||
nightlog.cra.lost,El emisor no respondió: la orden ({1}) de {0} CRA se perdió.
|
||||
news.crawarn.desc,Alguien está contando la reserva de la Revolución y quizá los CRA apostados no se puedan redimir por completo. Desbloquear tarda cuatro días; algunos dicen que es hora de actuar.
|
||||
news.cralow.desc,La cobertura de la reserva se agota y la Revolución ha recortado el tipo de apuesta de CRA a una fracción.
|
||||
|
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} Staké {1}
|
||||
stake.do,Staker
|
||||
stake.undo,Demander un retrait
|
||||
spark.h,Jeton d'équilibre
|
||||
spark.mint,Frapper SPARK
|
||||
spark.burn,Brûler SPARK
|
||||
stake.sum.in,Staker {0} CRA
|
||||
stake.sum.out,Demander le retrait de {0} CRA (disponible dans {1} jours)
|
||||
stake.done.in,{0} CRA stakés.
|
||||
@@ -470,9 +467,7 @@ stake.done.out,Retrait de {0} CRA demandé ; retour au portefeuille le jour {1}.
|
||||
nightlog.stakeint,Intérêts de staking +{0} CRA.
|
||||
nightlog.unstaked,Les {0} CRA retirés du staking sont revenus sur {1}.
|
||||
news.crawarn.title,Troubles au pool de staking de la Révolution
|
||||
news.crawarn.desc,Les gros détenteurs se retirent et le pool de subvention de staking s'épuise. Le déverrouillage prend quatre jours ; certains disent qu'il est temps d'agir.
|
||||
news.cralow.title,La Révolution réduit le taux de staking
|
||||
news.cralow.desc,"Le pool de subvention est presque vide, et la Révolution a réduit le taux de staking du CRA à une fraction de sa valeur."
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,Spot
|
||||
poin.sub.perp,Perps
|
||||
@@ -906,3 +901,21 @@ swap.get,Recevoir
|
||||
swap.preview,"Environ {0} {1} {2} pool(s), perte {3} %"
|
||||
swap.go,Échanger
|
||||
swap.same,Les monnaies payée et reçue doivent différer.
|
||||
cra.mint,Frapper
|
||||
cra.burn,Racheter
|
||||
mint.h,Frappe officielle (CRC + SPARK)
|
||||
mint.need,Nécessite {0} CRC et {1} SPARK
|
||||
mint.reserve,Couverture {0} % Collatéral {1} %
|
||||
mint.queue,Ordres en attente
|
||||
mint.order,"{0} {1} CRA, jour {2}"
|
||||
mint.sum.in,Frapper {0} CRA avec {1} CRC et {2} SPARK ({3}–{4} jours)
|
||||
mint.sum.out,Racheter {0} CRA contre CRC et SPARK ({1} jours)
|
||||
mint.done.in,Ordre de frappe passé ; échéance au jour {0}.
|
||||
mint.done.out,Ordre de rachat passé ; échéance au jour {0}.
|
||||
stake.coin,Monnaie déposée
|
||||
stake.sum.via,Échanger {0} {1} → environ {2} CRA puis staker
|
||||
nightlog.cra.minted,{0} CRA frappés et stakés ({1}).
|
||||
nightlog.cra.burned,"{0} CRA rachetés : +{1} CRC, +{2} SPARK ({3})."
|
||||
nightlog.cra.lost,L'émetteur n'a pas répondu : l'ordre ({1}) de {0} CRA est perdu.
|
||||
news.crawarn.desc,Quelqu'un fait l'inventaire de la réserve de la Révolution ; les CRA stakés pourraient ne pas être remboursés en totalité. Le déblocage prend quatre jours ; certains disent qu'il est temps d'agir.
|
||||
news.cralow.desc,La couverture de la réserve s'amenuise ; la Révolution a réduit le taux de staking du CRA à une fraction.
|
||||
|
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} ステーキング中 {1}
|
||||
stake.do,ステーキング
|
||||
stake.undo,出金申請
|
||||
spark.h,バランストークン
|
||||
spark.mint,SPARKをミント
|
||||
spark.burn,SPARKをバーン
|
||||
stake.sum.in,{0} CRA をステーキング
|
||||
stake.sum.out,{0} CRA の出金申請({1}日後に着金)
|
||||
stake.done.in,{0} CRA をステーキングしました。
|
||||
@@ -470,9 +467,7 @@ stake.done.out,{0} CRA の出金を申請しました。{1}日目にウォレッ
|
||||
nightlog.stakeint,ステーキング利息 +{0} CRA。
|
||||
nightlog.unstaked,ステーキングから出金された {0} CRA が {1} に戻った。
|
||||
news.crawarn.title,革命家のステーキングプールに不穏な動き
|
||||
news.crawarn.desc,大口保有者が相次いで資金を引き揚げており、補助金プールが枯渇寸前だ。ロック解除には4日かかるため、今すぐ動くべきだとの声も上がっている。
|
||||
news.cralow.title,革命家がステーキングの日利を引き下げ
|
||||
news.cralow.desc,補助金プールがほぼ底をつき、革命家はCRAステーキングの日利を従来のごくわずかな水準まで引き下げた。
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,現物
|
||||
poin.sub.perp,無期限先物
|
||||
@@ -906,3 +901,21 @@ swap.get,受取
|
||||
swap.preview,約 {0} {1} プール {2} 個、損失 {3}%
|
||||
swap.go,スワップ
|
||||
swap.same,支払いと受取は別の通貨にしてください。
|
||||
cra.mint,発行
|
||||
cra.burn,償還
|
||||
mint.h,公式発行(CRC+SPARK)
|
||||
mint.need,必要:{0} CRC と {1} SPARK
|
||||
mint.reserve,準備率 {0}% 担保率 {1}%
|
||||
mint.queue,処理待ち
|
||||
mint.order,{0} {1} CRA、{2} 日目
|
||||
mint.sum.in,{1} CRC と {2} SPARK で {0} CRA を発行({3}~{4} 日)
|
||||
mint.sum.out,{0} CRA を償還して CRC と SPARK に({1} 日)
|
||||
mint.done.in,発行を申請しました。{0} 日目に決済されます。
|
||||
mint.done.out,償還を申請しました。{0} 日目に決済されます。
|
||||
stake.coin,預入通貨
|
||||
stake.sum.via,{0} {1} をスワップ → 約 {2} CRA をステーク
|
||||
nightlog.cra.minted,発行した {0} CRA をステークしました({1})。
|
||||
nightlog.cra.burned,{0} CRA を償還:+{1} CRC、+{2} SPARK({3})。
|
||||
nightlog.cra.lost,発行元から応答がありません:{0} CRA の{1}注文は失われました。
|
||||
news.crawarn.desc,革命軍の準備金を数え直す者がいる。ステークした CRA は全額償還できないかもしれない。解除には四日かかる。動くなら今だという声もある。
|
||||
news.cralow.desc,準備率が危うくなり、革命軍は CRA のステーキング日利を元の数分の一に引き下げた。
|
||||
|
Can't render this file because it contains an unexpected character in line 511 and column 24.
|
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} W stakingu {1}
|
||||
stake.do,Stakuj
|
||||
stake.undo,Zgłoś wypłatę
|
||||
spark.h,Token równoważący
|
||||
spark.mint,Wybij SPARK
|
||||
spark.burn,Spal SPARK
|
||||
stake.sum.in,Zastakuj {0} CRA
|
||||
stake.sum.out,Zgłoś wypłatę {0} CRA (dostępne za: {1} d.)
|
||||
stake.done.in,Zastakowano {0} CRA.
|
||||
@@ -470,9 +467,7 @@ stake.done.out,Zgłoszono wypłatę {0} CRA; powrót do portfela w dniu {1}.
|
||||
nightlog.stakeint,Odsetki ze stakingu +{0} CRA.
|
||||
nightlog.unstaked,{0} CRA wycofane ze stakingu zwrócono do {1}.
|
||||
news.crawarn.title,Niepokoje wokół puli stakingowej Rewolucji
|
||||
news.crawarn.desc,"Duzi posiadacze wycofują środki, a pula dotacji stakingowych wysycha. Odblokowanie trwa cztery dni; niektórzy mówią, że czas działać."
|
||||
news.cralow.title,Rewolucja obniża stawkę stakingu
|
||||
news.cralow.desc,"Pula dotacji jest niemal pusta, a Rewolucja obniżyła stawkę stakingu CRA do ułamka pierwotnej wartości."
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,Spot
|
||||
poin.sub.perp,Wieczyste
|
||||
@@ -906,3 +901,21 @@ swap.get,Otrzymuję
|
||||
swap.preview,"Około {0} {1} pule: {2}, strata {3}%"
|
||||
swap.go,Wymień
|
||||
swap.same,Waluty płatności i odbioru muszą się różnić.
|
||||
cra.mint,Wybij
|
||||
cra.burn,Umorz
|
||||
mint.h,Oficjalna emisja (CRC + SPARK)
|
||||
mint.need,Wymaga {0} CRC i {1} SPARK
|
||||
mint.reserve,Pokrycie rezerwy {0}% Zabezpieczenie {1}%
|
||||
mint.queue,Oczekujące zlecenia
|
||||
mint.order,"{0} {1} CRA, dzień {2}"
|
||||
mint.sum.in,Wybij {0} CRA za {1} CRC i {2} SPARK ({3}–{4} dni)
|
||||
mint.sum.out,Umorz {0} CRA na CRC i SPARK ({1} dni)
|
||||
mint.done.in,Zlecenie emisji złożone; termin: dzień {0}.
|
||||
mint.done.out,Zlecenie umorzenia złożone; termin: dzień {0}.
|
||||
stake.coin,Waluta wpłaty
|
||||
stake.sum.via,Wymień {0} {1} → około {2} CRA i stakuj
|
||||
nightlog.cra.minted,Wybito {0} CRA i zastakowano ({1}).
|
||||
nightlog.cra.burned,"Umorzono {0} CRA: +{1} CRC, +{2} SPARK ({3})."
|
||||
nightlog.cra.lost,Emitent nie odpowiedział: zlecenie ({1}) na {0} CRA przepadło.
|
||||
news.crawarn.desc,"Ktoś liczy rezerwę Rewolucji i zastakowane CRA mogą nie zostać w pełni wypłacone. Odblokowanie trwa cztery dni; niektórzy mówią, że czas działać."
|
||||
news.cralow.desc,"Pokrycie rezerwy maleje, a Rewolucja obniżyła stopę stakingu CRA do ułamka."
|
||||
|
@@ -460,9 +460,6 @@ stake.ops,{0}
|
||||
stake.avail,CRA {0} В стейкинге {1}
|
||||
stake.do,В стейкинг
|
||||
stake.undo,Запросить вывод
|
||||
spark.h,Балансовый токен
|
||||
spark.mint,Минт SPARK
|
||||
spark.burn,Сжигание SPARK
|
||||
stake.sum.in,Внести {0} CRA в стейкинг
|
||||
stake.sum.out,Запросить вывод {0} CRA (дней до зачисления: {1})
|
||||
stake.done.in,{0} CRA внесено в стейкинг.
|
||||
@@ -470,9 +467,7 @@ stake.done.out,Запрошен вывод {0} CRA; возврат в кошел
|
||||
nightlog.stakeint,Доход от стейкинга: +{0} CRA.
|
||||
nightlog.unstaked,Выведенные из стейкинга {0} CRA вернулись в {1}.
|
||||
news.crawarn.title,Волнения вокруг пула стейкинга Революционеров
|
||||
news.crawarn.desc,"Крупные держатели выводят средства, и пул субсидий для стейкинга истощается. Разблокировка занимает четыре дня; ходят слухи, что пора действовать."
|
||||
news.cralow.title,Революционеры снижают ставку стейкинга
|
||||
news.cralow.desc,"Пул субсидий почти опустел, и Революционеры снизили ставку стейкинга CRA до малой доли прежней."
|
||||
stake.avail2,SPARK {0}
|
||||
poin.sub.spot,Спот
|
||||
poin.sub.perp,Бессрочные
|
||||
@@ -906,3 +901,21 @@ swap.get,Получаю
|
||||
swap.preview,"Около {0} {1} пулов: {2}, потери {3}%"
|
||||
swap.go,Обменять
|
||||
swap.same,Монеты оплаты и получения должны различаться.
|
||||
cra.mint,Выпустить
|
||||
cra.burn,Погасить
|
||||
mint.h,Официальный выпуск (CRC + SPARK)
|
||||
mint.need,Нужно {0} CRC и {1} SPARK
|
||||
mint.reserve,Покрытие резерва {0}% Залог {1}%
|
||||
mint.queue,Очередь
|
||||
mint.order,"{0} {1} CRA, день {2}"
|
||||
mint.sum.in,Выпустить {0} CRA за {1} CRC и {2} SPARK ({3}–{4} дн.)
|
||||
mint.sum.out,Погасить {0} CRA в CRC и SPARK ({1} дн.)
|
||||
mint.done.in,Заявка на выпуск подана; срок — день {0}.
|
||||
mint.done.out,Заявка на погашение подана; срок — день {0}.
|
||||
stake.coin,Монета для вклада
|
||||
stake.sum.via,Обменять {0} {1} → около {2} CRA и внести в стейкинг
|
||||
nightlog.cra.minted,"Выпущено {0} CRA, внесены в стейкинг ({1})."
|
||||
nightlog.cra.burned,"Погашено {0} CRA: +{1} CRC, +{2} SPARK ({3})."
|
||||
nightlog.cra.lost,Эмитент не ответил: заявка ({1}) на {0} CRA потеряна.
|
||||
news.crawarn.desc,"Кто-то пересчитывает резерв Революции, и CRA в стейкинге могут не выкупить полностью. Разблокировка занимает четыре дня; кое-кто говорит, что пора действовать."
|
||||
news.cralow.desc,"Покрытие резерва тает, и Революция снизила ставку по стейкингу CRA до малой доли."
|
||||
|
@@ -459,9 +459,6 @@ stake.ops,"{0}"
|
||||
stake.avail,"CRA {0} 已质押 {1}"
|
||||
stake.do,质押
|
||||
stake.undo,申请取出
|
||||
spark.h,平衡代币
|
||||
spark.mint,铸造 SPARK
|
||||
spark.burn,销毁 SPARK
|
||||
stake.sum.in,"质押 {0} CRA"
|
||||
stake.sum.out,"申请取出 {0} CRA({1} 天后到账)"
|
||||
stake.done.in,"已质押 {0} CRA。"
|
||||
@@ -469,9 +466,7 @@ stake.done.out,"已申请取出 {0} CRA,第 {1} 天回到钱包。"
|
||||
nightlog.stakeint,"质押利息 +{0} CRA。"
|
||||
nightlog.unstaked,"质押取出的 {0} CRA 回到了{1}。"
|
||||
news.crawarn.title,革命军质押池传出异动
|
||||
news.crawarn.desc,有大户在大量撤出,质押补贴池告急。解锁需要四天,有人说该动手了。
|
||||
news.cralow.title,革命军下调质押日息
|
||||
news.cralow.desc,补贴池余额见底,革命军把 CRA 质押日息降到了原来的零头。
|
||||
stake.avail2,"SPARK {0}"
|
||||
poin.sub.spot,现货
|
||||
poin.sub.perp,永续
|
||||
@@ -905,3 +900,21 @@ swap.get,获得
|
||||
swap.preview,约得 {0} {1} 经 {2} 个池,损耗 {3}%
|
||||
swap.go,兑换
|
||||
swap.same,支付和获得的币种不能相同。
|
||||
cra.mint,铸造
|
||||
cra.burn,销毁
|
||||
mint.h,官方铸造(CRC 加 SPARK)
|
||||
mint.need,需要 {0} CRC 和 {1} SPARK
|
||||
mint.reserve,储备覆盖率 {0}% 抵押率 {1}%
|
||||
mint.queue,待处理
|
||||
mint.order,{0} {1} CRA,第 {2} 天
|
||||
mint.sum.in,用 {1} CRC 和 {2} SPARK 铸造 {0} CRA({3}~{4} 天)
|
||||
mint.sum.out,销毁 {0} CRA 换回 CRC 和 SPARK({1} 天)
|
||||
mint.done.in,已提交铸造,第 {0} 天结算。
|
||||
mint.done.out,已提交销毁,第 {0} 天结算。
|
||||
stake.coin,存入币种
|
||||
stake.sum.via,兑换 {0} {1} → 约 {2} CRA 并质押
|
||||
nightlog.cra.minted,铸造的 {0} CRA 已进入质押({1})。
|
||||
nightlog.cra.burned,销毁 {0} CRA:收回 {1} CRC、{2} SPARK({3})。
|
||||
nightlog.cra.lost,官方没有回应:{0} CRA 的{1}单丢失。
|
||||
news.crawarn.desc,有人在清点革命军的储备,质押的 CRA 恐怕兑付不了。解锁需要四天,有人说该动手了。
|
||||
news.cralow.desc,储备覆盖率告急,革命军把 CRA 质押日息降到了原来的零头。
|
||||
|
@@ -228,6 +228,13 @@ namespace Decentralized
|
||||
if (perpEvents.Any(e => e.Kind == "seize")) SeizeForDebt(d, day);
|
||||
var stakeEvents = d.Staking.Night(day, d.Stable.CraRate, d.WalletAt);
|
||||
double crcFactor = d.Stable.Night(day, d.Rng, d.Staking.Earning);
|
||||
var orderEvents = d.Stable.NightOrders(day, d.Rng);
|
||||
foreach (var oe in orderEvents)
|
||||
{
|
||||
var ow = d.WalletAt(oe.Order.Wallet);
|
||||
if (oe.Kind == CraOrderKind.Minted) { ow.Add(Assets.CRA, oe.Cra); d.Staking.Stake(ow, oe.Cra, Session.Price); }
|
||||
else if (oe.Kind == CraOrderKind.Burned) { ow.Add(Assets.CRC, oe.Crc); ow.Add(Assets.SPARK, oe.Spark); }
|
||||
}
|
||||
if (d.Stable.CraWarnDay == day) News.Show("pd_news_crawarn_" + day, L.T("news.crawarn.title"), L.T("news.crawarn.desc"), 4);
|
||||
if (d.Stable.CraSubsidyLow && !d.CraLowNews) { d.CraLowNews = true; News.Show("pd_news_cralow_" + day, L.T("news.cralow.title"), L.T("news.cralow.desc"), 3); }
|
||||
if (crcFactor < 1)
|
||||
@@ -326,6 +333,14 @@ namespace Decentralized
|
||||
var sw = d.Own(e.Wallet);
|
||||
if (e.Released > 0) ps.AddNightLog(L.T("nightlog.unstaked", Fmt.Num(e.Released), sw != null ? WalletWindow.NameOf(sw) : e.Wallet));
|
||||
}
|
||||
foreach (var oe in orderEvents)
|
||||
{
|
||||
var ow = d.Own(oe.Order.Wallet);
|
||||
string wn = ow != null ? WalletWindow.NameOf(ow) : oe.Order.Wallet;
|
||||
if (oe.Kind == CraOrderKind.Minted) ps.AddNightLog(L.T("nightlog.cra.minted", Fmt.Num(oe.Cra), wn));
|
||||
else if (oe.Kind == CraOrderKind.Burned) ps.AddNightLog(L.T("nightlog.cra.burned", Fmt.Num(oe.Order.Cra), Fmt.Num(oe.Crc), Fmt.Num(oe.Spark), wn));
|
||||
else ps.AddNightLog(L.T("nightlog.cra.lost", Fmt.Num(oe.Order.Cra), oe.Order.Mint ? L.T("cra.mint") : L.T("cra.burn")), "cc7755");
|
||||
}
|
||||
double interest = stakeEvents.Sum(e => e.Interest);
|
||||
if (interest > 0) ps.AddNightLog(L.T("nightlog.stakeint", Fmt.Num(interest)));
|
||||
foreach (var name in report.Burnt) ps.AddNightLog(L.T("nightlog.burnt", name), "cc7755");
|
||||
|
||||
@@ -120,8 +120,8 @@ namespace Decentralized
|
||||
double thr = t;
|
||||
list.Add(new PredictCandidate { Kind = PredictKind.Gas, Key = "gas", Title = "Gas", Param = thr, Tomorrow = true, Prob = (a, b) => GasPublic(d, day + 1, thr) });
|
||||
}
|
||||
if (d.Stable.CraWarnDay < 0 && d.Stable.CraSpiralDay < 0)
|
||||
list.Add(new PredictCandidate { Kind = PredictKind.Cra, Key = "cra", Title = "CRA", Prob = (from, to) => PredictMath.CraWarnProb(d.Stable.CraSubsidy, CraDrain(d), day, from, to, CraHazard) });
|
||||
if (d.Stable.CraWarnDay < 0 && d.Stable.CraCrashDay < 0)
|
||||
list.Add(new PredictCandidate { Kind = PredictKind.Cra, Key = "cra", Title = "CRA", Prob = (from, to) => PredictMath.CraWarnProb(d.Stable.Cushion, CraDrain(d), day, from, to, CraHazard) });
|
||||
if (!d.Network.EraDone && d.Network.EraDay > 0 && day + 4 >= (d.Network.EraWarned ? d.Network.EraWarnDay : Tuning.EraMin))
|
||||
list.Add(new PredictCandidate { Kind = PredictKind.Era, Key = "era", Title = L.T("predict.era"), Prob = (from, to) => PredictMath.EraProb(day, from, to, d.Network.EraWarned ? d.Network.EraWarnDay : -1) });
|
||||
return list;
|
||||
@@ -132,7 +132,7 @@ namespace Decentralized
|
||||
d.GasPhase < 0 ? PredictMath.GasFlat(day, thr) : (1 - Tuning.PredictGasBlind) * PredictMath.GasAtLeast(day, d.GasPhase, thr) + Tuning.PredictGasBlind * PredictMath.GasFlat(day, thr);
|
||||
|
||||
private static double CraHazard => 1 - Math.Pow(1 - Tuning.CraSpiralWeekly, 1.0 / 7);
|
||||
private static double CraDrain(SaveData d) => (Tuning.CraNpcStake + d.Staking.Earning) * d.Stable.CraRate;
|
||||
private static double CraDrain(SaveData d) => Stablecoins.CushionDrain(Tuning.CraNpcStake + d.Staking.Earning, d.Stable.CraRate);
|
||||
|
||||
/// <summary>开门后补盘。价格盘一次只留一个(阈值不同的盘口会互相对冲)。</summary>
|
||||
public static void Morning(SaveData d, int day)
|
||||
@@ -199,8 +199,8 @@ namespace Decentralized
|
||||
case PredictKind.Gas:
|
||||
return d.GasPhase < 0 ? (double?)null : GasPublic(d, m.ToDay, m.Param);
|
||||
case PredictKind.Cra:
|
||||
if (d.Stable.CraWarnDay >= 0 || d.Stable.CraSpiralDay >= 0) return 0.02;
|
||||
return PredictMath.CraWarnProb(d.Stable.CraSubsidy, CraDrain(d), day + 1, m.FromDay, m.ToDay, CraHazard);
|
||||
if (d.Stable.CraWarnDay >= 0 || d.Stable.CraCrashDay >= 0) return 0.02;
|
||||
return PredictMath.CraWarnProb(d.Stable.Cushion, CraDrain(d), day + 1, m.FromDay, m.ToDay, CraHazard);
|
||||
case PredictKind.Era:
|
||||
return PredictMath.EraProb(day, m.FromDay, m.ToDay, d.Network.EraWarned ? d.Network.EraWarnDay : -1);
|
||||
}
|
||||
@@ -309,7 +309,7 @@ namespace Decentralized
|
||||
if (d.GasHist.Count > 0) list.Add(L.T("predict.clue.gas", string.Join(" ", d.GasHist.Skip(Math.Max(0, d.GasHist.Count - 7)).Select(x => x.ToString("0.0", System.Globalization.CultureInfo.InvariantCulture)))));
|
||||
break;
|
||||
case PredictKind.Cra:
|
||||
list.Add(L.T("predict.clue.subsidy", (d.Stable.CraSubsidy / Tuning.CraSubsidy0 * 100).ToString("0")));
|
||||
list.Add(L.T("predict.clue.subsidy", (d.Stable.Cushion / Stablecoins.Cushion0 * 100).ToString("0")));
|
||||
list.Add(L.T("predict.clue.drain", Fmt.Num(CraDrain(d))));
|
||||
break;
|
||||
case PredictKind.Era:
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace Decentralized
|
||||
private static void Apply(SaveData d, int day, string key)
|
||||
{
|
||||
if (!d.Story.Apply(key, day)) return;
|
||||
if (key == "serpico_rev") d.Stable.CraSubsidy += Tuning.StoryRevSubsidy;
|
||||
if (key == "serpico_rev") d.Stable.Reserve += Tuning.StoryRevSubsidy;
|
||||
News.Show("pd_news_story_" + key, L.T("news.story." + key + ".title"), L.T("news.story." + key + ".desc"), 4, 9);
|
||||
Log.Info($"剧情联动生效:{key}(第 {day} 天)");
|
||||
}
|
||||
|
||||
@@ -2234,7 +2234,15 @@ namespace Decentralized
|
||||
}
|
||||
}
|
||||
l.AddSeparator();
|
||||
l.AddLabel(L.T("mint.reserve", (st.Ratio * 100).ToString("0", CultureInfo.InvariantCulture), (st.C * 100).ToString("0", CultureInfo.InvariantCulture)), "mint_reserve_dim");
|
||||
l.AddLabel(L.T("spark.price", Fmt.Num(st.Spark)));
|
||||
var mine = st.Orders.Where(o => d.Own(o.Wallet) != null).ToList();
|
||||
if (mine.Count > 0)
|
||||
{
|
||||
l.AddSeparator();
|
||||
l.AddLabel(L.T("mint.queue"));
|
||||
foreach (var o in mine) l.AddLabel(L.T("mint.order", L.T(o.Mint ? "cra.mint" : "cra.burn"), Fmt.Num(o.Cra), o.Due), "mint_order_dim");
|
||||
}
|
||||
}, r =>
|
||||
{
|
||||
r.AddHeader(L.T("stake.ops", WalletWindow.NameOf(w)));
|
||||
@@ -2242,19 +2250,35 @@ namespace Decentralized
|
||||
r.AddLabel(L.T("stake.avail2", Fmt.Num(w.Avail(Assets.SPARK))), "stake_avail2_dim");
|
||||
AmountRow(r);
|
||||
r.AddSpace(4f);
|
||||
r.AddLabel(L.T("stake.coin"));
|
||||
r.BeginRow(4f);
|
||||
foreach (var c in StakeCoins)
|
||||
{
|
||||
var coin = c;
|
||||
PledgerSkin.Pick(r, coin, coin == _stakeCoin, () => { _stakeCoin = coin; Open(); }, _picked);
|
||||
}
|
||||
r.End();
|
||||
r.BeginRow(6f);
|
||||
r.AddButton(L.T("stake.do"), () => StakeCall(true));
|
||||
r.AddButton(L.T("stake.undo"), () => StakeCall(false));
|
||||
r.End();
|
||||
r.AddSeparator();
|
||||
r.AddHeader(L.T("spark.h"));
|
||||
r.AddHeader(L.T("mint.h"));
|
||||
if (double.TryParse((_amount ?? "").Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out double mv) && mv > 0)
|
||||
{
|
||||
st.Collateral(mv, out double needCrc, out double needSpark);
|
||||
r.AddLabel(L.T("mint.need", Fmt.Num(needCrc), Fmt.Num(needSpark)), "mint_need_dim");
|
||||
}
|
||||
r.BeginRow(6f);
|
||||
r.AddButton(L.T("spark.mint"), () => SparkCall(true));
|
||||
r.AddButton(L.T("spark.burn"), () => SparkCall(false));
|
||||
r.AddButton(L.T("cra.mint"), () => MintCall(true));
|
||||
r.AddButton(L.T("cra.burn"), () => MintCall(false));
|
||||
r.End();
|
||||
});
|
||||
}
|
||||
|
||||
private static readonly string[] StakeCoins = { Assets.CRA, Assets.CRC, Assets.CRT, Assets.SPARK };
|
||||
private static string _stakeCoin = Assets.CRA;
|
||||
|
||||
/// <summary>手续费用钱包里价值最高的那种币付。</summary>
|
||||
private static string BestFeeAsset(Wallet w) =>
|
||||
w.Balances.Where(k => k.Value > 1e-9 && Session.Price(k.Key) > 0).OrderByDescending(k => k.Value * Session.Price(k.Key)).Select(k => k.Key).FirstOrDefault() ?? Assets.PSC;
|
||||
@@ -2264,42 +2288,57 @@ namespace Decentralized
|
||||
if (!ReadAmount(out double v)) return;
|
||||
var d = Session.Data;
|
||||
var w = d.Hot;
|
||||
if (into ? w.Avail(Assets.CRA) + 1e-9 < v : (d.Staking.Of(w.Address)?.Amount ?? 0) + 1e-9 < v) { _message = L.T("msg.balance"); Open(); return; }
|
||||
string coin = into ? _stakeCoin : Assets.CRA;
|
||||
if (into ? w.Avail(coin) + 1e-9 < v : (d.Staking.Of(w.Address)?.Amount ?? 0) + 1e-9 < v) { _message = L.T("msg.balance"); Open(); return; }
|
||||
var q = into && coin != Assets.CRA ? d.Market.Quote(coin, Assets.CRA, v) : null;
|
||||
_message = L.T("hw.wait");
|
||||
Open();
|
||||
WalletWindow.OpenForBill(new WalletWindow.Bill
|
||||
{
|
||||
Contract = true, Asset = Assets.CRA, Amount = v, Spend = into ? v : 0, FeeAsset = into ? null : BestFeeAsset(w),
|
||||
Summary = L.T(into ? "stake.sum.in" : "stake.sum.out", Fmt.Num(v), Tuning.CraUnlockDays),
|
||||
Contract = true, Asset = coin, Amount = v, Spend = into ? v : 0, FeeAsset = into ? null : BestFeeAsset(w),
|
||||
Summary = into && q != null ? L.T("stake.sum.via", Fmt.Num(v), coin, Fmt.Num(q.Out)) : L.T(into ? "stake.sum.in" : "stake.sum.out", Fmt.Num(v), Tuning.CraUnlockDays),
|
||||
Execute = pw =>
|
||||
{
|
||||
int day = StoreStation.GetDayCounter();
|
||||
bool ok = into ? d.Staking.Stake(pw, v, Session.Price) : d.Staking.RequestUnstake(pw.Address, v, day);
|
||||
_message = ok ? L.T(into ? "stake.done.in" : "stake.done.out", Fmt.Num(v), day + Tuning.CraUnlockDays) : L.T("msg.balance");
|
||||
double cra = v;
|
||||
if (into && coin != Assets.CRA)
|
||||
{
|
||||
if (pw.Avail(coin) + 1e-9 < v) { _message = L.T("msg.balance"); Open(); return; }
|
||||
double spent = v * Session.Price(coin);
|
||||
cra = d.Market.Swap(coin, Assets.CRA, v);
|
||||
pw.Add(coin, -v); pw.Add(Assets.CRA, cra); pw.RecordBuy(Assets.CRA, cra, spent);
|
||||
CandleChart.Trade(coin, spent); CandleChart.Trade(Assets.CRA, spent);
|
||||
}
|
||||
bool ok = into ? d.Staking.Stake(pw, cra, Session.Price) : d.Staking.RequestUnstake(pw.Address, v, day);
|
||||
_message = ok ? L.T(into ? "stake.done.in" : "stake.done.out", Fmt.Num(cra), day + Tuning.CraUnlockDays) : L.T("msg.balance");
|
||||
Session.Save();
|
||||
Open();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
private static void SparkCall(bool mint)
|
||||
/// <summary>官方一级市场:存入 CRC 和 SPARK 铸造 CRA(铸出后直接进质押),或销毁 CRA 换回两者。排队等待,官方可能不兑现。</summary>
|
||||
private static void MintCall(bool mint)
|
||||
{
|
||||
if (!ReadAmount(out double v)) return;
|
||||
var d = Session.Data;
|
||||
var w = d.Hot;
|
||||
string pay = mint ? Assets.CRA : Assets.SPARK, get = mint ? Assets.SPARK : Assets.CRA;
|
||||
if (w.Avail(pay) + 1e-9 < v) { _message = L.T("msg.balance"); Open(); return; }
|
||||
double quote = mint ? v * d.Stable.Cra / d.Stable.Spark * (1 - Tuning.SparkFee) : v * d.Stable.Spark / d.Stable.Cra * (1 - Tuning.SparkFee);
|
||||
var st = d.Stable;
|
||||
st.Collateral(v, out double needCrc, out double needSpark);
|
||||
bool enough = mint ? w.Avail(Assets.CRC) + 1e-9 >= needCrc && w.Avail(Assets.SPARK) + 1e-9 >= needSpark : w.Avail(Assets.CRA) + 1e-9 >= v;
|
||||
if (!enough) { _message = L.T("msg.balance"); Open(); return; }
|
||||
int minD = Tuning.CraMintDaysMin, maxD = Tuning.CraMintDaysMax;
|
||||
_message = L.T("hw.wait");
|
||||
Open();
|
||||
WalletWindow.OpenForBill(new WalletWindow.Bill
|
||||
{
|
||||
Contract = true, Asset = pay, Amount = v, Summary = L.T("hw.swap", Fmt.Num(v), pay, Fmt.Num(quote), get),
|
||||
Contract = true, Asset = mint ? Assets.CRC : Assets.CRA, Amount = mint ? needCrc : v, Spend = mint ? needCrc : v,
|
||||
Summary = mint ? L.T("mint.sum.in", Fmt.Num(v), Fmt.Num(needCrc), Fmt.Num(needSpark), minD, maxD) : L.T("mint.sum.out", Fmt.Num(v), Tuning.CraUnlockDays),
|
||||
Execute = pw =>
|
||||
{
|
||||
double got = mint ? d.Stable.Mint(pw, v) : d.Stable.Burn(pw, v);
|
||||
if (got >= 0) { double cr = v * Session.Price(pay); CandleChart.Trade(Assets.SPARK, cr); CandleChart.Trade(Assets.CRA, cr); }
|
||||
_message = got < 0 ? L.T("msg.balance") : L.T("msg.trade", Fmt.Num(v), pay, Fmt.Num(got), get);
|
||||
int day = StoreStation.GetDayCounter();
|
||||
var o = mint ? st.RequestMint(pw, v, day, d.Rng) : st.RequestBurn(pw, v, day);
|
||||
_message = o == null ? L.T("msg.balance") : L.T(mint ? "mint.done.in" : "mint.done.out", o.Due);
|
||||
Session.Save();
|
||||
Open();
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user