月亮链 月亮链
Ctrl+D收藏月亮链

UST:Rust智能合约养成日记(6)_Owndata

作者:

时间:1900/1/1 0:00:00

相关文章:

Rust智能合约养成日记合约状态数据定义与方法实现

Rust智能合约养成日记编写Rust智能合约单元测试

Rust智能合约养成日记Rust智能合约部署,函数调用及Explorer的使用

Rust智能合约养成日记Rust智能合约整数溢出

Rust智能合约养成日记拒绝服务攻击

拒绝服务攻击又称DoS(DenialofService)攻击,该类型的攻击将使得智能合约在一段时间内(甚至永久)无法被用户正常使用。

目前已知的原因大致可分为如下两类:

合约逻辑中存在的某些缺陷。如某一public函数,其实现没有考虑到计算复杂度。用户调用该函数时,实际所需消耗的Gas会超出NEAR公链创世区块配置文件(genesis_config.json)中所定义的"max_total_prepaid_gas":300000000000000`(300TGas),导致交易失败。

外媒:加密托管公司Protego Trust已解雇大部分员工:金色财经报道,据一位知情人士透露,加密托管公司Protego Trust本周被迫解雇了大部分员工。据悉,该公司一直在寻求获得新的融资,但一直未能成功。Protego Trust曾于2021年完成7000万美元A轮融资,Coinbase Ventures、FTX和Digital Currency Group等公司参投。2022年2月,该公司任命OCC前代理审计长Brian Brooks为董事会成员。Protego拥有美国联邦信托执照。(CoinDesk)[2023/3/2 12:37:41]

某些跨合约调用情形中,合约的执行依赖于其他外部合约的执行状态。而外部合约的执行并非总是可靠,以至于本合约的执行可能被外部合约阻塞,无法照常运行。该类问题的发生可表现为合约用户在合约中的资金被锁定,以至于无法正常的充值或提现。

除了合约逻辑的缺陷,DoS现象发生的原因还可以归因于人为因素:典型的如:合约的所有者丢失了自己的私钥,以至于合约中部分only_owner可执行的特权函数无法被调用,使得合约中某些重要的系统状态值无法及时的更新,这将有可能对项目造成较大的损失。

金融科技公司Prime Trust将启动API集成的Prime Trust Crypto IRA测试计划:金色财经消息,金融科技公司Prime Trust宣布将启动API集成的IRA(个人退休账户)解决方案Prime Trust Crypto IRA测试计划,允许用户为账户注资,并将退休基金投资于加密货币,还享有税收优惠。

PrimeTrust表示,该计划将得到机构级金融API技术的支持,包括合规、托管、支付、加密交易和结算。Prime Trust Crypto IRA的启动将分为三个阶段,第1阶段中,PrimeTrust正在与现有客户合作,并接受金融科技公司和集成商的申请;第2阶段将从2022年6月1日开始,对注册参与的人开放Beta访问;第3阶段会面向所有客户开放。PrimeTrust受内华达州监管,是一家为金融科技和数字资产创新者提供金融基础设施的提供商。(prnewswire)[2022/3/29 14:25:20]

为方便读者更加深刻地了解智能合约中的DoS攻击漏洞,本文后续将结合具体DoS攻击的例子展开描述与分析。本文代码已上传至BlockSec官方github,读者可以自行下载https://github.com/blocksecteam/near_demo/tree/main/DoSDemo

TrustToken向Curve上tfTUSD贷款池新投入2400万美元资金:3月18日,资产代币化平台TrustToken官方发推称,已向Curve Finance上tfTUSD贷款池新投入2400万美元资金,这将进一步提高该池收益率。[2021/3/18 18:55:39]

用户可通过调用pubfnregister_account()函数进行注册并初始化。

后续该合约的管理者将调用pubfndistribute_token函数来为系统中用户进行"分红"。“分红”的方式为遍历用户数组self.registered,并通过跨合约调用向每一个用户转入指定额度amount的代币以做奖励。

然而该合约状态数据(self.registered)的大小没有限制,并且可以被恶意用户所操控,使得该合约数据的大小变得过大。以至于DISTRIBUTOR用户在调用该合约方法时,可能消耗的Gas费用过高,超出了GASLIMIT。

Crust将停止使用APP和网站的HTTP版本:波卡生态中的去中心化存储应用Crust发推表示,为了为下一阶段的Crust Maxwell测试网做准备,防止安全问题出现,Crust将从1月14日12:00开始,停止使用APP和网站的HTTP版本,只支持HTTPS版本。使用HTTP版本账户的用户,需要将账户移至HTTPS或者进行备份。[2021/1/14 16:08:47]

如下是该合约在实际NEARLocalnet中测试的结果

可以看到当系统中注册的用户较多时,实际在distribute_token执行的过程中,所设置的prepaid_gas将不足以满足所有用户的转账操作,以至于本次交易失败。

推荐的解决方案:

由于GasLimit的限制,合约方法在执行过程中不建议遍历一个较大的数据结构(该数据结构的大小可被外部用户操纵)。确需遍历的,也需要限制该数据结构的大小,并保证当该数据结构的大小达到该最大值时,也不会触及GasLimit的限制。

R3与Hex Trust合作帮助亚洲银行出售证券型代币:金色财经报道,总部位于香港的Hex Trust正在与企业区块链公司R3合作,为银行客户提供另一种发行证券型代币的选择。Hex Trust将通过2019年7月发布的用于代币的Corda软件开发套件(SDK)与R3集成。R3客户可以利用Hex Trust的托管解决方案,而Hex Trust客户可以利用Corda区块链。[2020/4/4]

因此推荐采用withdrawal模式对上述合约进行改造。即要求合约方不主动地对所有的用户逐一发放奖励,而是先记账,并设置一个withdraw函数,让单一用户通过该函数方法的调用,自行取回“分红”奖励。此时合约方也只需要维护逐一用户已经取回的奖励数额或者还能取回的奖励数额即可。

用户可以通过调用“竞价合约”中的pubfnregister_account函数方法注册账户,为参与后续的竞价做准备

用户还可以通过如下接口函数查询当前系统中目前为止出价最高的用户ID,及其所出的价格。

用户还可以通过如下接口函数查询当前系统中目前为止出价最高的用户ID,及其所出的价格。

当竞价合约收到token时,会通过ft_on_transfer函数调用到如下bid函数。

在该出价函数中,函数的执行逻辑将首先检查本次用户的出价是否高于之前出价最高用户的出价值。如果满足该条件,将执行self.refund_exe()从“竞价合约”中退回之前出价最高用户的出价代币。随后更新目前为止出价最高的用户ID及其所出的价格。

实际的情况是,根据该合约的逻辑定义:必须要退回之前出价最高用户的出价代币,才能将目前为止出价最高的用户ID进行更替。

在该出价函数中,函数的执行逻辑将首先检查本次用户的出价是否高于之前出价最高用户的出价值。如果满足该条件,将执行self.refund_exe()从“竞价合约”中退回之前出价最高用户的出价代币。随后更新目前为止出价最高的用户ID及其所出的价格。

实际的情况是,根据该合约的逻辑定义:必须要退回之前出价最高用户的出价代币,才能将目前为止出价最高的用户ID进行更替。

此时测试模拟了“竞价系统”的参与的用户:user0、user1和user2

他们分别拥有10000个初始代币。user0首先在“竞价系统”中出价1000,此时查询可知current_leader:user0.test.nearhighest_bid:1000。随后user0立即将剩余的9000个代币转给了user2,并销毁了代币账户。

此后,当user1出价2000时,系统将打算退回user0之前的出价值。但由于此时user0的账户已不存在,系统将提示"CannotRefund",始终无法成功完成后续的交易更新状态。

此时第二位出价者想出价2000:

解决方法:

如果合约的状态的转化需要依赖于外部合约的调用处理,则需要考虑外部合约调用可能失败的情形,防止合约的执行逻辑被阻塞而拒绝服务,即我们需要实现合理的错误处理手段。在本例子中,我们可以将无法退回的代币寄存于合约新增的lost_found用户组中,当后续用户满足条件refund条件时,再由用户本身来进一步取回代币(同样可以实现withdraw函数)。

3.Owner私钥丢失

去中性化智能合约项目中往往也存在部分中心化的现象:如存在合约的owner。部分合约函数的执行被设置为仅owner可以执行,用以对合约中某些关键系统变量值的进行设置更改。我们可以将此类函数称之为only_owner类型函数。

例如前文在“分红”合约中所定义的pubfndistribute_token,该函数即为only_owner函数。当合约的owner无法履行职能(私钥丢失)时,资金将一直被锁定在合约之中,无法分发给其他用户。另有大多数的情况下,only_owner函数还可以用来暂停或者重启合约中的所有交易,可见owner正常履行其职能的重要性。

解决方法:

为避免上述owner个人“失能”情形的发生,我们可增设多位合约的owner共同治理合约,甚至可采用多签请求的方式来替换原有的合约权限控制方案,以此实现合约的去中心化治理效果。有关智能合约中多签请求功能的设计实现,将在后续的《智能合约养成日记》中展开详细的描述。

标签:USTTRUSTTRUOWNustc币重新与美元挂钩吗Cryptrusttru币前景Owndata

比特币价格热门资讯
TOS:获币安、a16z等2亿美元投资,新兴公链Apotos靠什么赶超前辈?_Aptos

作者|秦晓峰编辑|郝方舟出品|Odaily星球日报3月29日,根据币安官方公告,币安旗下投资机构BinanceLabs宣布投资公链项目AptosLabs,具体金额未知.

1900/1/1 0:00:00
Gate.io Startup:Lumerin (LMR) Initial Sale Result & Listing Schedule

1Lumerin(LMR)TokenSaleResultTheGate.ioStartupLumerin(LMR)saleresultisasfollows:LMRStartupSaleAmou.

1900/1/1 0:00:00
AND:如何为The Sandbox地块估值?是什么推动了地价?_SANTA

本文来自Dappradar,原文作者:PedroHerrera,由Odaily星球日报译者Katie辜编译。自Meta公司去年10月宣布进军元宇宙以来,虚拟地块NFT的需求激增,推动了价格上涨.

1900/1/1 0:00:00
UPE:閃兌交易平台上線APE、BSW,新增50個幣對_Norse Finance

親愛的用戶:為了給用戶提供更豐富的交易選擇,幣安閃兌交易平台已上新資產-APE、BSW,並新增其它50個幣對,邀您體驗!幣安閃兌交易平台將會陸續上線更多資產,敬請期待.

1900/1/1 0:00:00
COM:XT.COM關於即將上線GULF(GulfCoim)的公告_HTT

尊敬的XT.COM用戶:XT.COM即將上線GULF,並在主板區開放GULF/USDT,GULF/BNB交易對。具體開通時間,請關註後續公告.

1900/1/1 0:00:00
DAO:DAO生态系统概述_LOC

原文作者:Arvind&ghiya.eth原文翻译:Blockunicorn政策,以规范他们与公司以及彼此之间的关系.

1900/1/1 0:00:00