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

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://aaarwkj.com/article16/cccdgg.html

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

廣告

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

成都定制網站建設
青青草国产成人自拍视频在线观看| 日韩电影中文字幕一区| 男人的天堂久久精品激情| 97国产精品视频在线观看| av在线播放网址网站| 麻豆国产自拍在线视频| 在线观看一区二区三区国产视频 | 成年女人大片免费观看版| 欧美 成人一区二区三区| 中文字幕在线看二区不卡| 亚洲一区日韩精品颜射| 亚洲熟妇亚洲熟妇亚洲熟妇| 国产黄色片网站在线观看| 人人妻人人澡人人爽久久av| 人人妻人人澡人人爽的视频| 欧美私人影院—区二区日本 | 精品欧美国产日韩在线观看| 黄色亚洲一区二区三区四区| 99国产精品久久久久久| 日韩激情av中文字幕| 国产自拍成人精品视频| 婷婷网色偷偷亚洲男人| 一区二区三区三级视频| 午夜一区二区三区精品| 日韩欧美一区二区三区不卡在线| 欧美视频综合一级91| 扒开女性毛茸茸的视频| 久久国产成人精品免费看| 日本加勒比系列在线视频| 日本少妇人妻一区二区| 91精品蜜臀国产综合久久久久久| 欧美日韩福利视频在线| 丝袜美腿美女日韩在线| 三级国产大片在线观看| 亚洲福利网址一二三区| 蜜臀av一区二区在线观看 | 亚洲欧美综合区丁香六月| 男女性生活视频成年人观看| 欧美激情亚洲一区二区| 国产丝袜美腿在线观看| 极品少妇一级人妻av|