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

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)

成都定制網站建設
国产一区精品在线免费看| 一区二区三区在线观看日本视频| 黄色亚洲一区二区三区四区| 国产亚洲高清国产拍精品久久| 午夜视频在线观看区一| 色哟哟91精品色哟哟| 久久精品一区二区东京热| 色哟哟网站在线精品视频| 亚洲五月六月激情综合| 草草影院最新地址在线观看| 免费观看在线黄色大片| 2021天天操夜夜爽| 日本高清不卡在线播放| 麻豆资源视频在线观看| 自由成熟性生活免费视频| 国产成年人在线免费观看| 日本女优久久精品观看| 日本欧美三级一二三区| 三级精品一区二区三区| 欧美大片在线观看高清| 激情av一区二区不卡| 中文字幕亚洲欧美日韩高清| av天堂精品一区二区三区| 日韩精品熟女一区二区三区| 精品国产一区亚洲二区| 亚洲精品国产熟女av| 日韩精品国产专区一区| 亚洲午夜av久久乱码| 亚洲国产精品自拍视频| 999久久免费精品国产| 白白色最新福利视频二| av永久免费观看网站| 日韩精品一区二区三区四区蜜桃 | 国产真实内射在线观看| 人妻少妇被猛烈进入中出视频| 亚洲av成人在线播放| 色综合色狠狠天天综合色| 日韩免费高清不卡视频| 中文免费在线观看av| 日韩精品人成在线播放| 成人黄色片久久久大全|