欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

solidity智能合約[52]-安全-storage陷阱-創(chuàng)新互聯(lián)

storage陷阱

下面的合約是一個鎖定金額的合約,用戶將資金存儲在此合約中,只有當過了一段時間時候才能夠提取出來。
下面的案例是為了說明storage屬性預設性帶來的陷阱。payIn函數是當用戶存儲金額時調用的函數。傳遞的參數似乎解鎖的時間。在合約payIn中,HoldRecord newRecord; 其實默認為storage類型,并且,當不為storage變量賦值的時候,變量默認引用的位置是storage空間中的0號位置。這也意味著在當前的案例中,newRecord指針指向了ownerAmount,當對newRecord 執(zhí)行newRecord.amount += msg.value; 實則將ownerAmount即合約擁有者的金額增加了。 這時,合約擁有者就可以調用ownerWithdrawal將用戶存儲在合約的錢轉移出來。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都營銷網站建設、網站重做改版、南岳網站定制設計、自適應品牌網站建設、H5響應式網站、電子商務商城網站建設、集團公司官網建設、成都外貿網站建設公司、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為南岳等各大城市提供網站開發(fā)制作服務。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
pragma solidity ^0.4.23;

contract HodlFraud {
   uint public ownerAmount;  //合約擁有者的金錢
   uint public  numberOfPayouts; //次數
   address public owner;  //合約的擁有者

   struct HoldRecord {
       uint amount;  //存儲的金錢
       uint unlockTime;  //解鎖的時間
   }

   mapping (address => HoldRecord) public balance;  //地址  => 存儲的金錢,時間

   //構造函數初始化
   function HodlFraud () public payable {
       owner = msg.sender;
       ownerAmount = msg.value;
   }

   //某一個用戶存儲金錢,
   //@param  holdTime 代表的是解鎖時間
   function payIn(uint holdTime) public payable {
       require(msg.value > 0);


       HoldRecord  newRecord;


       newRecord.amount += msg.value;
       newRecord.unlockTime = now + holdTime;
       balance[msg.sender] = newRecord;
   }

   //轉賬,使用這筆錢
   function withdraw () public {
       require(balance[msg.sender].unlockTime < now && balance[msg.sender].amount > 0);

       msg.sender.transfer(balance[msg.sender].amount);

       balance[msg.sender].amount = 0;
       numberOfPayouts++;
   }

   //合約的擁有著,轉移自己的錢
   function ownerWithdrawal () public {
       require(msg.sender == owner && ownerAmount > 0);
       msg.sender.transfer(ownerAmount);
       ownerAmount = 0;
   }
}

解決辦法

HoldRecord newRecord 修改為 HoldRecord memory newRecord

總結

1
2
3
// 這個例子是要舉出在 smart contract 中 storage 預設行為的危險性。其實只要維持一個原則就可以避免這個問題。
// 養(yǎng)成明確定義使用 storage 還是 memory 的好習慣
// 一般來說,指定 storage 時就直接給初始值;而在 function 里面需要用到的緩存器都用 memory,除非想要直接修改鏈上的值?,F在 compiler 都會很聰明的提醒開發(fā)者要定義 storage 還是 memory,而當 storage pointer 沒有初始值時也會提醒開發(fā)者。
  • 本文鏈接: https://dreamerjonson.com/2018/11/25/solidity-52-security-storage/

  • 版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協(xié)議 許可協(xié)議。轉載請注明出處!

solidity智能合約[52]-安全-storage陷阱

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現已開啟,新人活動云服務器買多久送多久。

當前標題:solidity智能合約[52]-安全-storage陷阱-創(chuàng)新互聯(lián)
文章源于:http://www.aaarwkj.com/article16/cccdgg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄企業(yè)網站制作、做網站App設計、全網營銷推廣、品牌網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站建設
青青草原三区在线播放| 18岁下禁止看的视频| 中国的性生活黄片免费观看| 91中文字幕精品一区二区| 中文字幕日韩人妻av| 少妇又色又爽又高潮欧美| 人妻天天爽夜夜爽欧美色| 免费女性啪啪无遮挡网站| 欧美黄片在线免费观看| 日韩欧美中文字幕一区二区| 亚洲美女毛茸茸的逼逼| 中国女人内射91熟女| 尤物视频在线观看一下| 午夜男女激情在线观看| 亚洲精品老司机福利在线| 欧美高清一区二区三区精品| 免费看欧美黄片在线看| 国产麻豆剧传媒精品av| 亚洲中文字幕一二区日韩| av一区二区三区网站| 色婷婷久久综合中文久久| 一本色道久久88综合日韩| 日韩一级久久精品理论| 麻豆视传媒短视频免费看| 欧美亚洲一区二区三区91| 久久人体午夜激情视频| 亚洲三级成人一区在线| 国产又粗又猛又爽黄老大爷| 人妻有码av中文字幕久久| 熟女一区二区三区免费视频| 久国产亚洲精品久久久极品| 一区二区在线日韩视频| 日本一级a级黄免视频| 久久精品国产一区二区三| 国产一区二区不卡在线播放| 九色91成人在线视频| 亚洲一区二区三区精品乱码| 永久免费观看黄色录像| 日本国产福利视频在线观看| 草草视频在线观看网站| 欧美日韩专区一区二区三区|