国产乱人伦在线播放,99无码精品二区在线视频,最近在线更新8中文字幕免费,精品成人一区二区三区四区

您的位置:首頁 > 互聯(lián)網(wǎng) >

UsdtBank合約易被發(fā)起回退攻擊 能夠?qū)⒂囝~轉(zhuǎn)到另一地址

2019-05-13 17:11:59 來源: 波場TRON

隨著波場 DApp 生態(tài)的不斷發(fā)展, DApp開發(fā)者和用戶的數(shù)量急速增長,經(jīng)濟(jì)利益的迅速累積,提高智能合約的防攻擊能力,越來越成DApp 開發(fā)的一個(gè)

隨著波場 DApp 生態(tài)的不斷發(fā)展, DApp開發(fā)者和用戶的數(shù)量急速增長,經(jīng)濟(jì)利益的迅速累積,提高智能合約的防攻擊能力,越來越成DApp 開發(fā)的一個(gè)重要考量。因此,波場面向社區(qū),征集DApp 的開源代碼,結(jié)合其合約源碼,以實(shí)戰(zhàn)的方式,講解波場智能合約開發(fā)時(shí),需要注意的一些安全細(xì)節(jié)。

本期小課堂征集到的是 TRON-Rich 團(tuán)隊(duì)的 UsdtBank合約。在分析合約之前的首要事情,就是通過合約驗(yàn)證平臺(tái),驗(yàn)證其為真的開源合約。接下來先用小段篇幅對社區(qū)的https://troneye.com (以下簡稱 TRON-Eye)進(jìn)行解析,以選定合約驗(yàn)證平臺(tái)。

合約驗(yàn)證的原理在于,Solidity 合約編譯后的 bytecode 由可執(zhí)行bytecode 以及meta-hash兩部分組成,同一份合約源碼在相同編譯環(huán)境下多次編譯,產(chǎn)生的 bytecode 相同,正確的合約驗(yàn)證方法,應(yīng)該比對bytecode,從而驗(yàn)證源碼是否和鏈上合約完全一致。

TRON-Eye詳細(xì)闡述了其驗(yàn)證思路,同時(shí)還在合約源碼展示頁支持用戶自行編譯bytecode并比對,提高了公信力。因此,我們選定 TRON-Eye 作為小課堂的驗(yàn)證平臺(tái),校驗(yàn)合約是否真正開源。

圖2所示的,即為本次待考察合約 ,TRON-Rich 團(tuán)隊(duì)的UsdtBank合約代碼。接下來就對其源碼,進(jìn)行安全角度的詳細(xì)解讀。

如非必要, 應(yīng)該禁止被其他合約調(diào)用

允許被其他合約調(diào)用, 容易被發(fā)起回退攻擊,尤其是即時(shí)返回結(jié)果的下注類游戲。攻擊合約可以在其合約函數(shù)中調(diào)用目標(biāo)合約,如果目標(biāo)合約立即返回結(jié)果,當(dāng)攻擊合約發(fā)現(xiàn)返回的結(jié)果對自己不利時(shí),主動(dòng) revert,回退交易。從而實(shí)現(xiàn)“只贏不輸”。

/*

* only human is allowed to call this contract

*/

modifier isHuman() {

require((bytes32(msg.sender)) == (bytes32(tx.origin)));

_;

}

UsdtBank 采用了上述代碼,判斷是否是合約,其原理就是,如果是合約調(diào)用的話,msg.sender 是外層合約地址,但是 tx.origin 是合約調(diào)用者。當(dāng)然這段代碼先將 address強(qiáng)轉(zhuǎn) bytes32,浪費(fèi)了能量,建議直接采用 msg.sender == tx.origin 即可。

function invest(uint256 _referrerCode, uint256 _planId, uint256 _value) public whenNotPaused isHuman {

if (_invest(msg.sender, _planId, _referrerCode, _value)) {

emit onInvest(msg.sender, _value);

}

}

判斷一個(gè)地址是否是合約地址

下面是 UsdtBank 使用這個(gè)modifier 的方式,可以發(fā)現(xiàn),這個(gè) modifier 僅適合用來限制被調(diào)用方是普通用戶。那么如果需要判斷某個(gè)傳入的address 參數(shù)是人,而不是合約,則需要使用另外一種方式。

function isContract(address account) internal view returns (bool) {

uint256 size;

assembly { size := extcodesize(account) }

return size > 0;

}

Q: 那么為什么 isHuman() 這個(gè) modifier 不使用這種方式呢?

A: 這是因?yàn)?,通過 extcodesize 方式判斷一個(gè)地址是否是合約地址,并不準(zhǔn)確。當(dāng)在其他合約的構(gòu)造函數(shù)中讀取extcodesize時(shí),這個(gè)值總是0.

More: 波場已經(jīng)提交了一個(gè)關(guān)于增加 address.type 的 TIP,可以直觀準(zhǔn)確的判斷一個(gè)地址類型,歡迎參與該 TIP 的討論。

小結(jié)論:要想完整限制合約中的調(diào)用者,以及合約中的地址參數(shù)為 Human,目前最好的方式,是結(jié)合前述的 isHuman() modifier 以及 isContract().

怎么通過合約,處理TRC20的轉(zhuǎn)賬

本期選擇 UsdtBank 講解的一個(gè)重要原因是,UsdtBank 是一個(gè)支持 USDT參與投注的合約,有助于推廣使用TRC20投注游戲合約的正確姿勢。

UsdtBank 和 USDT 投注相關(guān)的有如下一些代碼:

ITRC20 public usdtAddr_;

function setUsdtAddr(address _usdtAddr) public onlyOwner {

require(address(usdtAddr_) == address(0x00));

require(address(_usdtAddr) != address(0x00));

usdtAddr_ = ITRC20(_usdtAddr);

}

上述代碼表示,usdtAddress 僅允許初始化的時(shí)候,設(shè)置一次(謝絕跑路 ^_^)。

function _invest(address _addr, uint256 _planId, uint256 _referrerCode, uint256 _amount)

private

notContract(_addr)

returns (bool)

{

usdtAddr_.transferFrom(_addr, address(this), _amount);

….

}

由于 TRC20 token 相對 TRX以及 TRC10 token 最大的區(qū)別在于,TRX 和 TRC10 的balance存儲(chǔ)于address 的 account 中,而 TRC20 token 的 balance存儲(chǔ)在 TRC20合約里。直接調(diào)用 TRC20合約的 transfer 函數(shù),雖然能夠?qū)⒆约旱挠囝~轉(zhuǎn)到另外一個(gè)地址名下,但事實(shí)上只是在 TRC20合約里發(fā)生了兩者balance 字段值的修改。所以采用 標(biāo)準(zhǔn)TRC20下注,必須使用 Approve 和 TransferFrom 兩步分開的方式。雖然這會(huì)導(dǎo)致用戶簽名兩次。

關(guān)鍵詞: UsdtBank合約 回退攻擊 余額

精選 導(dǎo)讀

募資55億港元萬物云啟動(dòng)招股 預(yù)計(jì)9月29日登陸港交所主板

萬科9月19日早間公告,萬物云當(dāng)日啟動(dòng)招股,預(yù)計(jì)發(fā)行價(jià)介乎每股47 1港元至52 7港元,預(yù)計(jì)9月29日登陸港交所主板。按發(fā)行1 167億股計(jì)算,萬

發(fā)布時(shí)間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉股多為高端制造業(yè)

隨著半年報(bào)披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場基金總數(shù)為9794只,資產(chǎn)凈值為269454 75億元,同比上

發(fā)布時(shí)間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產(chǎn) 上市公司粉飾財(cái)報(bào)動(dòng)作不斷

再有上市公司宣布變賣房產(chǎn)。四川長虹25日稱,擬以1 66億元的轉(zhuǎn)讓底價(jià)掛牌出售31套房產(chǎn)。今年以來,A股公司出售房產(chǎn)不斷。根據(jù)記者不完全統(tǒng)

發(fā)布時(shí)間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復(fù)深交所關(guān)注函 股份繼續(xù)沖高

回復(fù)交易所關(guān)注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時(shí)觸及漲停,報(bào)20 2元 股。值得一提的是,在7月21日

發(fā)布時(shí)間: 2022-08-12 09:56
資訊   2022-08-12

萬家基金再添第二大股東 中泰證券擬受讓11%基金股權(quán)

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡稱齊河眾鑫)所持有的萬家基金11%的股權(quán),交易雙方共同確定本次交易的標(biāo)的資

發(fā)布時(shí)間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購 對債市影響如何?

央行12日再次開展了30億元逆回購操作,中標(biāo)利率2 10%。這已是央行連續(xù)7日每天僅進(jìn)行30億元的逆回購縮量投放,創(chuàng)下去年1月以來的最低操作規(guī)

發(fā)布時(shí)間: 2022-07-13 09:38
資訊   2022-07-13

美元指數(shù)創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個(gè)月新低

由于對美聯(lián)儲(chǔ)激進(jìn)加息的擔(dān)憂,美元指數(shù)11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個(gè)月新低。美

發(fā)布時(shí)間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達(dá)克跌幅創(chuàng)下記錄以來最大跌幅

今年上半年,美股持續(xù)回落。數(shù)據(jù)顯示,道瓊斯指數(shù)上半年下跌15 3%,納斯達(dá)克綜合指數(shù)下跌29 5%,標(biāo)普500指數(shù)下跌20 6%。其中,納斯達(dá)克連續(xù)

發(fā)布時(shí)間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內(nèi)增加超344億元

近期A股走強(qiáng),滬指6月以來上漲4%,融資客熱情明顯回升。數(shù)據(jù)顯示,截至6月16日,兩市融資余額1 479萬億元,月內(nèi)增加344 67億元,最近一個(gè)半

發(fā)布時(shí)間: 2022-06-20 09:41
資訊   2022-06-20

4個(gè)交易日凈買入超百億元 北向資金持續(xù)流入A股市場

北向資金凈流入態(tài)勢延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計(jì)凈

發(fā)布時(shí)間: 2022-06-17 09:37
推薦   2022-06-17

熱門TAG

more
美聯(lián)儲(chǔ)今年已將基準(zhǔn)利率從接近零大幅上調(diào)至略高于3% EIA報(bào)告:美國原油庫存及戰(zhàn)略儲(chǔ)備減少,汽油及精煉油庫存輕微波動(dòng) 美國政府更廣泛推動(dòng)從汽油動(dòng)力汽車轉(zhuǎn)向電動(dòng)汽車的一部分 數(shù)據(jù)顯示:今年9月日本船企接單量延續(xù)8月下跌下跌趨勢 公告顯示:2022年前三季度TCL中環(huán)研發(fā)投入為27億元 占比營業(yè)收入5.42% 新的111.75億英鎊注資列在“對金融機(jī)構(gòu)的援助—支付給英格蘭銀行”標(biāo)題下 本次政府儲(chǔ)備肉投放面向北京18家主要連鎖超市門店及相關(guān)零售終端投放 有交易員預(yù)計(jì):如果LME不采取措施 接下來可能將有數(shù)十萬噸鋁流入LME 據(jù)報(bào)道:繼德國最大釀酒商拉德貝格啤酒公司9月宣布漲價(jià) 據(jù)報(bào)道:澳大利亞礦商Pilbara的鋰礦拍賣價(jià)再創(chuàng)新高 折算后的碳酸鋰成本 中集天達(dá)首次公開發(fā)行A股股票 招股書顯示此次擬公開發(fā)行股數(shù)不超過103, 多家銀行加強(qiáng)綠色金融頂層設(shè)計(jì) 致力于為經(jīng)濟(jì)社會(huì)綠色低碳轉(zhuǎn)型貢獻(xiàn)力量 萊特幣 比特幣 數(shù)字資產(chǎn) 火幣 以太經(jīng)典 比特股 EOS 比特幣現(xiàn)金 量子鏈 Hcash 泰達(dá)幣 瑞波幣 Qcash 比特幣鉆石 超級(jí)比特幣 優(yōu)幣 硬分叉 加密貨幣