波场币是不是合法的trx币,trx币2021年能涨到多少钱

  

  00:17年4月11日上午,PeckShield态势感知平台检测到TCX1Cay…开头的黑客,创建了一个名为BTTx的TCT10Token,Token ID为1002278,在上午00336025到01336000之间向多个地址转移了4000万个BTTX tokens。这些地址是BTTBank the的开始地址。   

  

  

BTTBank 项目介绍

  

  

   BTTBank,又名TronBank BTT,是BitTorrent (BTT)的投资产品——官方网站TronBank下的将使区块链大规模采用的BTT令牌(Token)。根据TronBank的介绍:   

  

  TronBank BTT智能合约将为您产生3.6-6.6%的每日投资收益(取决于您购买的产品计划),这些收益将自动分配到您的收入余额中。比如买一个4.6%的回报计划,21天就可以获得100%以上的回报。收益会每秒计算一次,你甚至可以每秒提取收益或者再投资。当你将收益进行再投资时,投资金额会增加,你可以更快地获得更多的收益。   

  

  其产品界面如下(由于BTTBank目前正在维护中,主站无法打开,请参考TronBank明星产品TRX的投资图片,详见TronBank):   

  

  其财务管理流程大致如下:   

  

  根据用户的收益率和投资期限购买相应的理财产品;   

  

  投资期到期后,用户将理财产品提现到钱包。   

  

  在使用上,类似于现在的P2P理财产品,用户的门槛只有一个TRON钱包,但从产品收益率来看,资产回报率还是比较可观的。   

  

  

攻击回溯

  

  

  

攻击事件简述

  

  去年年底,博孙强老板发起12号提案,即符合波场TRC10规范的原生token名称将不再唯一,涉及TRC10 token的转账等操作将由ID代替。这使得在波场创建token的过程变得容易使用,但是它带来了一个潜在的威胁。一旦合同疏于核对token id的匹配,就有被假币攻击的可能。简而言之,这次对BTTBank的攻击是由于令牌id缺乏一致性验证造成的。   

  

背景知识

  

  TRON中的令牌分为几种规格:   

  

  TRX是TRON的平台货币,类似以太坊的ETH。   

  

  TRC20是兼容以太坊ERC20的令牌,本质上是一个可编程的智能合约。用户通过智能合约创建令牌后,令牌传输和发送等操作都在智能合约内完成。对于普通白人用户来说,ERC20/TRC20用起来太复杂,不好用。   

  

  所以TRON中引入了TRC10令牌,这是一种可以被用户直接控制的令牌。每个自然用户支付1024 TRX就可以创建一个TRC10代币,而一个用户只能创建一个TRC10代币。创建每个TRC10令牌后,系统会分配一个唯一的id(即令牌Id),它是一个从1,000,001开始的整数,令牌ID标识一个唯一的令牌。目前TRON平台上有1850个(2019-04-12)TRC。   

  

  为了提高TRC10的流动性和使用价值,TRON平台在Odyssey 3.2版本后启用了智能合约内转移TRC10令牌的功能,参考智能合约中的TRC10转移,其示例代码如下:   

  

  以上代码简单解释如下:   

  

  TransferTokenTest接口用于内部传递TRC10 token,接口调用方可以通过address . transfer token(uint 256 tokenValue,TRC token id)将带有token value和token id的trc10token传递给address   

  

  msgTokenValueAndTokenIdTest的接口显示调用者可以直接在发送的消息中添加token id和TokenIdTest字段,这也说明TRC10是TRON平台上的一等公民,属于内置类型,与TRC20的tokenvalue用函数参数表示完全不同。   

  

  GetTokenBalanceTest通过token id获取账号余额。   

  

  所以TRC10 toke可以通过智能合约中的token id完成转账,trc10toke。   

n 作为价值承载者,在智能合约内部即反映在 token id 的差异上。

  

因此,合约开发者在处理 TRC10 转账相关逻辑时,需要特别注意 token Id 的有效性和真实性。

  

攻击事件

PeckShield 安全人员在分析 BTTBank 合约时,发现其合约源码实现中存在致命漏洞,可导致项目方资金受损。

  

下图为黑客攻击的原过程:

  

黑客先行创建一个名为 BTTx 的 TRC10 token;

  

黑客往一批自己控制的账号中转入 4,000 万个 BTTx token;

  

通过控制的账号往 BTTBank 合约发起数次攻击;

  

最后顺序将 BTT 提取到控制的账号中。

  

下文从 BTTBank 投资及赎回的过程还原本次 BTT 假币攻击的全过程。

  

投资

  

投资的核心代码如下:

  

public 接口的 invest 提取 msg.tokenvalue ,并调用 private 的 _invest 函数完成投资的过程,_invest 内部计算并保存用户这一次的投资数量、时间等信息到合约的内部资产账单上。值得注意的是,这里 invest 只提取了 msg.tokenvalue,这里并没有提取 msg.tokenid,也没有验证 msg.tokenid是否属于 BTT Token 的 token id(为 1002000)。

  

前面我们提到 BTTBank 是一款投资理财类 DApp,用户存入 BTT token,资产到期之后,再赎回投资的 BTT 和对应的利息,在这里并没有检查是否是真正的 BTT,也就是不论你投资的阿猫阿狗币,都被认为是 BTT token。

  

提现

提现的核心代码如下:

  

赎回的过程比较简单,先从合约的内部投资账单上计算用户已经到期的投资金额,并将这一部分投资金额转回给用户,注意:msg.sender.transferToken(withdrawalAmount, BTT_ID) 中是固定的 BTT_ID 即 1002000.

  

至此,用户投入 BTT,收获 BTT;而黑客投入 BTTx, 收获 BTT,一个完美的『狸猫换太子』过程。

  

防御策略

PeckShield 安全人员在此提醒广大开发者,虽然 TRC10/TRC20 都是 token, 但两者在 TRON 平台上有着本质的差异性,若要在智能合约内部转账 TRC10,一定要检查所转移的 TRC10 对应的 token id 是否为预期值。针对上例,可将投资代码增强如下:

  

另外,PeckShield 安全人员根据上述的代码样式分析 TRON 平台上其它类 BTTBank 合约时,也发现了相似的问题。在此,PeckShield 安全人员提醒在进行智能合约开发的时候,虽然复用现有代码可能会带来开发功能上面的便利,但也须注意可能带来的安全风险。

  

(作者:PeckShield,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)

相关文章