兑换、黑市自动换币、铸 CRA、CRA 排队订单按脏币比例带过去;持仓表列宽;中文统一叫“脏币”
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
34b70023c9
commit
67df561a5f
5 files changed
+29
-24
No files matched your search
+5
-5
@@ -49,13 +49,13 @@
|
||||
|
||||
### 第十一阶段 stage 5:污点按币种记脏枚数,删除出金审查
|
||||
|
||||
- 污点只在 Web3 钱包里,每种币分别记“其中有几枚是脏的”,钱包页、PLEDGER 的余额里能看到;钱包总表的“脏币”列按现价显示。原来整个钱包记一笔信用点的污点不再使用。
|
||||
- 花掉、转出、付手续费时按这种币的脏比例带走脏的;兑换成别的币时脏比例跟过去(60% 脏的 CRT 换成 PSC,PSC 也是 60% 脏);兑入 Ponero 时脏币消失,Ponero 是干净的。
|
||||
- Poinbase 只收干净的币:钱包往充值地址每种币最多转干净的枚数,超出时 PLEDGER 拦下并写明能充多少;资金页“从钱包入金”也列出每种币能充多少。Poinbase 账户和银行没有污点。
|
||||
- 污点只在 Web3 钱包里,每种币分别记脏币数量,钱包页、PLEDGER 的余额里能看到;钱包总表的“脏币”列按现价显示。原来整个钱包记一笔信用点的污点不再使用。
|
||||
- 花掉、转出、付手续费时按这种币的脏币比例带走脏币;兑换成别的币时脏币比例跟过去(60% 是脏币的 CRT 换成 PSC,PSC 也是 60% 脏币);兑入 Ponero 时脏币消失,Ponero 是干净的。
|
||||
- Poinbase 只收干净的币:钱包往充值地址每种币最多转干净的部分,超出时 PLEDGER 拦下并写明能充多少;资金页“从钱包入金”也列出每种币能充多少。Poinbase 账户和银行没有污点。
|
||||
- 出金审查整套删除:出金到银行不再有被查概率、没收和销赃罪证,只收手续费 0.1%、对超出成本的部分征税 8%。从 Ponero 兑出、刚从混币器提出的币也不再“出金加重”。
|
||||
- 带污点的收入都改成“收到的这批币里有几枚是脏的”:换币客户卖来的币、用币付款的顾客(按赃物热度)、灰网卖赃物的货款、预测盘内幕单和操纵的兑付、理财卷款、自营混币器的收入和卷款、卖密钥盘换来的 CRT。“加污点不能超过钱包价值、超出部分记诈骗罪证”的规则随之删除。
|
||||
- 带污点的收入都改成“收到的这批币里有多少脏币”:换币客户卖来的币、用币付款的顾客(按赃物热度)、灰网卖赃物的货款、预测盘内幕单和操纵的兑付、理财卷款、自营混币器的收入和卷款、卖密钥盘换来的 CRT。“加污点不能超过钱包价值、超出部分记诈骗罪证”的规则随之删除。
|
||||
- 永续被判操纵:盈利照常留在账户,只记诈骗罪证(盈利 × 50%,单次最多 400),不再加污点。
|
||||
- 混币器:存入时带走这种币的脏枚数,每轮减少;制裁期间到期的出款、从钓鱼混币器提出的币不洗,整笔都是脏的。
|
||||
- 混币器:存入时带走这种币的脏币,每轮减少;制裁期间到期的出款、从钓鱼混币器提出的币不洗,整笔算脏币。
|
||||
- Tumbler 的密钥泄露:不再往钱包里加回污点,改为按最近 30 天混币器出款洗掉的污点记诈骗罪证(× 50%,单次最多 400)。
|
||||
- 剧情联动:塞尔皮科的证据交给治安部,原来的“出金审查更严”换成 30 天内混币器每轮清洗率 ×0.7;伦警官被捕,原来的“出金审查更严”换成 14 天内换币客户里的便衣 ×1.3。
|
||||
- 存档数据版本 5:读旧档时,每个钱包原来的污点按当前价格摊成各币的脏枚数;Poinbase 账户和永续仓位的污点挪到 1 号钱包一起摊(超出的作废);混币器、黑市订单、质押、空投池、预测持仓、自营混币器本金里托管的污点换成对应币的脏枚数。
|
||||
|
||||
@@ -18,6 +18,8 @@ namespace Decentralized.Domain
|
||||
public string Wallet;
|
||||
public bool Mint;
|
||||
public double Cra, Crc, Spark, C;
|
||||
/// <summary>付出去的币的脏比例(按价值加权):到期换回的币按这个比例是脏的。</summary>
|
||||
public double DirtyRatio;
|
||||
}
|
||||
|
||||
public sealed class CraOrderEvent
|
||||
@@ -114,8 +116,10 @@ namespace Decentralized.Domain
|
||||
if (cra <= 0) return null;
|
||||
Collateral(cra, out double crc, out double spark);
|
||||
if (w.Avail(Assets.CRC) + 1e-9 < crc || w.Avail(Assets.SPARK) + 1e-9 < spark) return null;
|
||||
double sv = spark * Spark, total = crc + sv;
|
||||
double ratio = total > 0 ? (crc * w.DirtyRatio(Assets.CRC) + sv * w.DirtyRatio(Assets.SPARK)) / total : 0;
|
||||
w.Add(Assets.CRC, -crc); w.Add(Assets.SPARK, -spark);
|
||||
var o = new CraOrder { Id = ++OrderSeq, Wallet = w.Address, Mint = true, Cra = cra, Crc = crc, Spark = spark, C = C, Due = day + rng.Range(Tuning.CraMintDaysMin, Tuning.CraMintDaysMax) };
|
||||
var o = new CraOrder { Id = ++OrderSeq, Wallet = w.Address, Mint = true, Cra = cra, Crc = crc, Spark = spark, C = C, DirtyRatio = ratio, Due = day + rng.Range(Tuning.CraMintDaysMin, Tuning.CraMintDaysMax) };
|
||||
Orders.Add(o);
|
||||
return o;
|
||||
}
|
||||
@@ -124,8 +128,9 @@ namespace Decentralized.Domain
|
||||
public CraOrder RequestBurn(Wallet w, double cra, int day)
|
||||
{
|
||||
if (cra <= 0 || w.Avail(Assets.CRA) + 1e-9 < cra) return null;
|
||||
double ratio = w.DirtyRatio(Assets.CRA);
|
||||
w.Add(Assets.CRA, -cra);
|
||||
var o = new CraOrder { Id = ++OrderSeq, Wallet = w.Address, Mint = false, Cra = cra, C = C, Due = day + Tuning.CraUnlockDays };
|
||||
var o = new CraOrder { Id = ++OrderSeq, Wallet = w.Address, Mint = false, Cra = cra, C = C, DirtyRatio = ratio, Due = day + Tuning.CraUnlockDays };
|
||||
Orders.Add(o);
|
||||
return o;
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ col.asset,"币种"
|
||||
col.amount,"数量"
|
||||
col.value,"估值"
|
||||
col.avg,"买入均价"
|
||||
col.dirty,其中脏的
|
||||
col.dirty,脏币
|
||||
bank.cash.k,"信用点"
|
||||
bank.rent.k,"房租"
|
||||
bank.rent.v,"{0},{1} 天后支付"
|
||||
@@ -152,10 +152,10 @@ stable.warn,"预兆:储备覆盖率告急"
|
||||
stable.spiral,"崩盘中"
|
||||
mixer.h,混币器
|
||||
mixer.ok,状态:运行正常
|
||||
mixer.sanctioned,状态:已被制裁(还有 {0} 天),此期间到期的出款不洗,整笔记为脏币。
|
||||
mixer.sanctioned,状态:已被制裁(还有 {0} 天),此期间到期的出款不洗,整笔算脏币。
|
||||
mixer.pending,在途存入
|
||||
mixer.none,暂无在途存入。
|
||||
mixer.col.taint,其中脏的
|
||||
mixer.col.taint,脏币
|
||||
mixer.col.ready,到期
|
||||
mixer.day,第 {0} 天
|
||||
mixer.deposit,存入
|
||||
@@ -166,12 +166,12 @@ mixer.go,存入混币器
|
||||
mixer.min,存入价值不得低于 {0} 信用点。
|
||||
mixer.done,已存入 {0} {1},第 {2} 天提回。
|
||||
mixer.upgrade.title,混币器
|
||||
mixer.upgrade.desc,解锁终端灰网页里的混币器:把脏币存进去,几天后提回,其中脏的变少。镇压期间混币器可能被制裁,制裁期间到期的出款整笔记为脏币。
|
||||
mixer.upgrade.desc,解锁终端灰网页里的混币器:把脏币存进去,几天后提回,脏币变少。镇压期间混币器可能被制裁,制裁期间到期的出款整笔算脏币。
|
||||
news.sanction.title,混币器被列入制裁名单
|
||||
news.sanction.desc,安保部门宣布制裁一批混币服务。此后几天从混币器提出的资金将被视为赃款。
|
||||
nightlog.mixer,混币器提回 {0} {1},污点 {2} → {3}。
|
||||
nightlog.mixer_flag,(制裁期间提出,整笔记为脏币)
|
||||
nightlog.mixer_flag.trap,(提出的币被治安部整笔记为脏币)
|
||||
nightlog.mixer_flag,(制裁期间提出,整笔算脏币)
|
||||
nightlog.mixer_flag.trap,(提出的币被治安部整笔算作脏币)
|
||||
nightlog.mixer_rug,混币器的运营者卷款跑路了:{0} {1} 没有提回。
|
||||
web3.sub.trade,交易
|
||||
gray.sub.mixer,混币器
|
||||
@@ -246,7 +246,7 @@ black.kind.Contraband.3,违禁品(高)
|
||||
black.kind.Tech,高科技物品(加价)
|
||||
nightlog.bm.ready,商店:{0} 到货,开店后会有快递员上门。
|
||||
guide.web3.title,Web3 手册
|
||||
guide.web3.text,"银行与交易:银行页只读,显示现金、房租和 Poinbase 账户里的 CRC。Poinbase 的资金页管入金和出金,先选币种:CRC 可以走银行账户或钱包,其他币只能走钱包。从银行入金把信用点换成 Poinbase 账户里的 CRC;出金到银行把 CRC 换回信用点,不做审查(Poinbase 账户里只有干净的钱)。出金到钱包要填收款地址,等几次确认才到账,Gas 费固定按普通档、从转出的币里扣;地址格式或校验位不对会被拒绝,格式对但没人用的地址,币转过去就没了。¶交易:PSC 全称 Probably Stolen Coin,是显卡和矿机挖出的币。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.odd2,"(他的手一直放在口袋里)在这儿签个字。"
|
||||
courier.sign,签收
|
||||
@@ -377,7 +377,7 @@ hw.paste,粘贴
|
||||
hw.copied,地址已复制。
|
||||
hw.copied.addr,"已复制 {0}"
|
||||
hw.balance.frozen,"(冻结 {0})"
|
||||
hw.balance.dirty,(脏 {0})
|
||||
hw.balance.dirty,(脏币 {0})
|
||||
wallets.destroy,销毁
|
||||
wallets.destroy.sure,确认销毁
|
||||
wallets.destroyed,"已销毁{0}:{1}"
|
||||
@@ -1036,7 +1036,7 @@ otc.cancel,放弃
|
||||
otc.msg.gone,客户已经走了。
|
||||
otc.msg.cash,现金不够。
|
||||
otc.msg.sting,对方是便衣:现金 {0} 被没收,记销赃罪证。
|
||||
otc.msg.bought,收到 {0} {1}(其中脏的 {3}),付现金 {2}。
|
||||
otc.msg.bought,收到 {0} {1}(脏币 {3}),付现金 {2}。
|
||||
otc.msg.sold,转出 {0} {1},收现金 {2}。
|
||||
gray.sub.own,自营混币器
|
||||
ownmix.h,自营混币器
|
||||
@@ -1086,4 +1086,4 @@ otc.nocash,现金都拿不出来?那算了。
|
||||
otc.nowallet,钱包都没连上,币往哪儿转?算了。
|
||||
otc.sting,别动,治安部。收购赃款,现金没收,这笔会记进你的档案。
|
||||
hw.err.poinbase,Poinbase 不收 {0}。
|
||||
hw.err.tainted,钱包里的 {1} 有 {0} 枚是脏的,Poinbase 只收干净的:最多 {2} {1}。
|
||||
hw.err.tainted,钱包里的 {1} 有脏币 {0},Poinbase 只收干净的币:最多 {2} {1}。
|
||||
@@ -276,13 +276,13 @@ namespace Decentralized
|
||||
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);
|
||||
ow.AddDirty(Assets.CRA, oe.Cra, oe.Cra * oe.Order.DirtyRatio); d.Staking.Stake(ow, oe.Cra, Session.Price);
|
||||
d.Chain(d.Address("cra"), ow.Address, Assets.CRA, oe.Cra);
|
||||
d.Chain(ow.Address, d.Address("staking"), Assets.CRA, oe.Cra);
|
||||
}
|
||||
else if (oe.Kind == CraOrderKind.Burned)
|
||||
{
|
||||
ow.Add(Assets.CRC, oe.Crc); ow.Add(Assets.SPARK, oe.Spark);
|
||||
ow.AddDirty(Assets.CRC, oe.Crc, oe.Crc * oe.Order.DirtyRatio); ow.AddDirty(Assets.SPARK, oe.Spark, oe.Spark * oe.Order.DirtyRatio);
|
||||
d.Chain(d.Address("cra"), ow.Address, Assets.CRC, oe.Crc);
|
||||
d.Chain(d.Address("cra"), ow.Address, Assets.SPARK, oe.Spark);
|
||||
}
|
||||
|
||||
@@ -466,8 +466,8 @@ namespace Decentralized
|
||||
if (got <= 0) { _message = L.T("swap.same"); Open(); return; }
|
||||
double spent = v * Session.Price(from);
|
||||
CandleChart.Trade(from, spent); CandleChart.Trade(to, spent);
|
||||
w.Add(from, -v);
|
||||
w.Add(to, got);
|
||||
// 换来的币继承付出那种币的脏比例
|
||||
w.Convert(from, v, to, got);
|
||||
w.RecordBuy(to, got, spent);
|
||||
_message = L.T("msg.trade", Fmt.Num(v), from, Fmt.Num(got), to);
|
||||
Session.Save();
|
||||
@@ -504,7 +504,7 @@ namespace Decentralized
|
||||
private static float[] HoldW => Sc(HoldWBase);
|
||||
private static readonly TextAnchor[] HoldAligns = { TextAnchor.MiddleLeft, TextAnchor.MiddleRight, TextAnchor.MiddleRight, TextAnchor.MiddleRight };
|
||||
/// <summary>钱包的持仓表多一列“其中脏的”(Poinbase 没有污点,不显示)。</summary>
|
||||
private static readonly float[] HoldDWBase = new[] { 70f, 95f, 85f, 95f, 95f };
|
||||
private static readonly float[] HoldDWBase = new[] { 60f, 85f, 75f, 90f, 90f };
|
||||
private static float[] HoldDW => Sc(HoldDWBase);
|
||||
private static readonly TextAnchor[] HoldDAligns = { TextAnchor.MiddleLeft, TextAnchor.MiddleRight, TextAnchor.MiddleRight, TextAnchor.MiddleRight, TextAnchor.MiddleRight };
|
||||
|
||||
@@ -2278,7 +2278,7 @@ namespace Decentralized
|
||||
{
|
||||
if (pw.Avail(src) + 1e-9 < needSrc) { Finish(L.T("msg.balance")); return; }
|
||||
double got = credits / Session.Price(coin) * 1.002;
|
||||
pw.Add(src, -needSrc); pw.Add(coin, got); pw.RecordBuy(coin, got, credits);
|
||||
pw.Convert(src, needSrc, coin, got); pw.RecordBuy(coin, got, credits);
|
||||
CandleChart.Trade(src, credits); CandleChart.Trade(coin, credits);
|
||||
Log.Info($"自动换币:{needSrc:0.####} {src} → {got:0.####} {coin}({credits:0} 信用点等值)");
|
||||
// 一次签名两步:经 DEX 换币,再付给这家商家;分别记账
|
||||
@@ -2693,7 +2693,7 @@ namespace Decentralized
|
||||
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);
|
||||
pw.Convert(coin, v, 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);
|
||||
|
||||
Reference in new issue
Block a user