国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

以太坊智能合約學(xué)習(xí)筆記(二)

Xufc / 821人閱讀

摘要:錯(cuò)誤檢查拋出異常。用于檢查內(nèi)部錯(cuò)誤,比如上溢和下溢。由于語(yǔ)言完善的問(wèn)題,支持狀態(tài)變量之間的轉(zhuǎn)換,未來(lái)可能會(huì)取消該限制。注意,只能將變量賦值給狀態(tài)變量,而不是本地變量。因?yàn)槲覀冎荒茉跔顟B(tài)變量中分配內(nèi)存空間。

錯(cuò)誤檢查

throw: 拋出異常。已被廢棄。

revert(): 拋出異常,并回滾到調(diào)用前的狀態(tài)。

require(bool): require(false) 拋出異常,并回滾到調(diào)用前的狀態(tài),并返回剩余的 gas。用于檢查有效條件,比如檢查函數(shù)輸入和返回、檢查調(diào)用者(require(msg.sender == owner))。

assert(bool): 。assert(false) 拋出異常,并回滾到調(diào)用前的狀態(tài),并消耗掉所有的 gas。用于檢查內(nèi)部錯(cuò)誤(internal errors),比如上溢和下溢。可以利用消耗掉所有的 gas的特性,防止或者懲罰惡意攻擊。

if(true){
    // 拋出異常,不往下走
    throw;
}

if(true){
    // 拋出異常,不往下走
    revert();
}

// 拋出異常,不往下走
require(false);

// 拋出異常,不往下走
assert(false);
數(shù)組

數(shù)組(Arrays):相同類型的元素的集合所組成的數(shù)據(jù)結(jié)構(gòu)。

數(shù)組類型:

固定長(zhǎng)度數(shù)組。 uint[5] dynamicArr

動(dòng)態(tài)長(zhǎng)度數(shù)組。 uint[] fixedArr

成員:

length 。 固定長(zhǎng)度數(shù)組為聲明時(shí)的長(zhǎng)度,動(dòng)態(tài)長(zhǎng)度數(shù)組為數(shù)組中含有多少元素。

push 。往動(dòng)態(tài)長(zhǎng)度數(shù)組中增加一個(gè)元素,固定長(zhǎng)度數(shù)組沒(méi)有該方法。

// 聲明
uint[] dynamicArr;
uint[3] fixedArr;

// 創(chuàng)建數(shù)組
uint[] dynamicArr = new uint[](7); // 賦值長(zhǎng)度為 7 的動(dòng)態(tài)長(zhǎng)度數(shù)組
uint[3] fixedArr = new uint[3](); // 報(bào)錯(cuò)
uint[3] fixedArr = [1, 2, 3]; // 賦值長(zhǎng)度為 3 的固定長(zhǎng)度數(shù)組


// 成員賦值
dynamicArr[0] = 1; 
fixedArr[0] = 1; 
fixedArr[3] = 1; // 報(bào)錯(cuò)

// push 新元素
dynamicArr.push(1); // 正確
fixedArr.push(1); // 報(bào)錯(cuò)。fixedArr 沒(méi)有 push 屬性。

// 訪問(wèn)元素
dynamicArr[1]; // 0
fixedArr[1]; // 2

// 獲取數(shù)組長(zhǎng)度
dynamicArr.length; // push 新元素后,長(zhǎng)度為 7+1。
fixedArr.length // 3


// 改變數(shù)組長(zhǎng)度
dynamicArr.length = dynamicArr.length - 1; // 正確
fixedArr.length = fixedArr.length - 1; // 報(bào)錯(cuò)。不能改變固定長(zhǎng)度數(shù)組的長(zhǎng)度


// 遍歷數(shù)組
for(uint i; i < dynamicArr.length; i++){}
for(uint i; i < fixedArr.length; i++){}
// 固定長(zhǎng)度數(shù)組轉(zhuǎn)換為動(dòng)態(tài)長(zhǎng)度數(shù)組。由于語(yǔ)言完善的問(wèn)題,支持狀態(tài)變量之間的轉(zhuǎn)換,未來(lái)可能會(huì)取消該限制。
uint[] x = [1, 3, 4]; // 正確。
uint[] memory x = [1, 3, 4]; // 報(bào)錯(cuò)。固定長(zhǎng)度 memory 的數(shù)組,不能轉(zhuǎn)換為動(dòng)態(tài)長(zhǎng)度 memory 的數(shù)組。
結(jié)構(gòu)體

結(jié)構(gòu)體(Structs): 結(jié)構(gòu)體是一些元素的集合。合法元素類型包括:值類型、數(shù)組和映射等,包括:結(jié)構(gòu)體。

// 聲明
struc Employee{ // 大寫 E
    address id;
    uint salary;
    uint lastPayDay;
}

// 創(chuàng)建結(jié)構(gòu)體
Employee employee = Employee(0x1, 0, 0);


// 訪問(wèn)成員
employee.id
數(shù)據(jù)存儲(chǔ)

storage 持久性

memory 臨時(shí)空間

calldata 類似 memory,執(zhí)行完后被抹除

相同存儲(chǔ)空間賦值

傳遞引用 reference(EVM 上的內(nèi)存地址)。 storage = storage

不同存儲(chǔ)空間變量賦值

拷貝
memory a = storage ,b 在 memory 內(nèi)存中重新開辟一個(gè)空間給 employee 類型,并且將 employee 這個(gè)值拷貝到 memory 內(nèi)存空間中。將 memory 內(nèi)存地址賦值給 memory 變量。所以 memory 變量?jī)?nèi)存地址并不是指向 storage 內(nèi)存地址,而是一個(gè) memory 變量的全新的地址。同樣的將 memory 賦值給 storage 變量,也會(huì)進(jìn)行一個(gè)拷貝。注意,只能將 memory 變量賦值給狀態(tài)變量,而不是本地 storage 變量。因?yàn)槲覀冎荒茉跔顟B(tài)變量中分配內(nèi)存空間。

delete

delete 初始化變量、刪除數(shù)組中的內(nèi)容

http://www.tryblockchain.org/...

@黃敏之-助教; EVM的定義就是0值等同于回收,把一個(gè)storage設(shè)為0是消耗負(fù)值的gas

實(shí)驗(yàn)結(jié)果: remove約等于remove2,同時(shí)遠(yuǎn)遠(yuǎn)小于remove3和4。且執(zhí)行完remove12后下次remove34的gas消耗大大增加。這個(gè)很有意思。1和2做的都是釋放內(nèi)存的操作,所以有負(fù)gas的福利;釋放內(nèi)存后如果要再賦值,需要重新申請(qǐng)內(nèi)存,所以這樣會(huì)消耗更多的gas。

delete owner 
delete arr 初始化arr length =0
delete arr[i] 初始化 arr 的某個(gè)元素,但此時(shí) arr[i]  還占據(jù)空間,length 也沒(méi)有變。

// 因此需要以下兩步,真正的刪除元素
arr[i] = arr[arr.length - 1]
arr.lenght -= 1;

未完成,待更新...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/23998.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.41 - 深入學(xué)習(xí)區(qū)塊鏈

    摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計(jì)十分靈活,極具適應(yīng)性。超級(jí)賬本區(qū)塊鏈的商業(yè)應(yīng)用超級(jí)賬本超級(jí)賬本是基金會(huì)下的眾多項(xiàng)目中的一個(gè)。證書頒發(fā)機(jī)構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個(gè)故事告訴你比特幣的原理及運(yùn)作機(jī)制 這篇文章的定位會(huì)比較科普,盡量用類比的方法將比特幣的基本原理講出來(lái)...

    qianfeng 評(píng)論0 收藏0
  • 以太智能合約學(xué)習(xí)筆記(一)

    摘要:舍去小數(shù)位在以太坊中賬戶有兩種類型普通賬戶和智能合約賬戶。報(bào)酬是小額的以太幣,想要運(yùn)行智能合約的人的需要支付報(bào)酬來(lái)使合約工作。涉及到以太坊智能合約的攻擊的問(wèn)題。 智能合約可以簡(jiǎn)單的理解為一段可執(zhí)行的程序片段,具體的代碼經(jīng)過(guò) Solidity 編寫之后,發(fā)布到區(qū)塊鏈上。而以太坊的智能合約也可以理解為一個(gè)特殊的交易(包括可執(zhí)行代碼的),被發(fā)送出去后會(huì)被礦工打包記錄在某一個(gè)區(qū)塊中,當(dāng)需要調(diào)用...

    dadong 評(píng)論0 收藏0
  • 以太智能合約學(xué)習(xí)筆記(三)

    摘要:另外只能做狀態(tài)變量,不能做本地局部變量。語(yǔ)法聲明映射類型包括類型包括狀態(tài)變量報(bào)錯(cuò)。可視度指的是,決定函數(shù)或者狀態(tài)變量的可以被哪些智能合約可見(jiàn)和調(diào)用。狀態(tài)變量可見(jiàn)性沒(méi)有。在中,通過(guò)來(lái)抽象出狀態(tài)變量自增的代碼,并修飾。 Mapping 映射(Mappings):類似于哈希表。mapping 中任何一個(gè)可能的 key 都對(duì)應(yīng)著一個(gè) value,它的默認(rèn)值是default-value 。底層用...

    mumumu 評(píng)論0 收藏0
  • 區(qū)塊鏈技術(shù)學(xué)習(xí)指引

    摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個(gè)指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場(chǎng)景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請(qǐng)讀者前往原文閱讀 本章的文章越來(lái)越多,本文是一個(gè)索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...

    Cristic 評(píng)論0 收藏0
  • 以太智能合約開發(fā)第篇:理解以太相關(guān)概念

    摘要:原文發(fā)表于以太坊智能合約開發(fā)第二篇理解以太坊相關(guān)概念很多人都說(shuō)比特幣是區(qū)塊鏈,以太坊是區(qū)塊鏈。它是以太坊智能合約的運(yùn)行環(huán)境。是由以太坊節(jié)點(diǎn)提供。以太坊社區(qū)把基于智能合約的應(yīng)用稱為去中心化的應(yīng)用。 原文發(fā)表于:以太坊智能合約開發(fā)第二篇:理解以太坊相關(guān)概念 很多人都說(shuō)比特幣是區(qū)塊鏈1.0,以太坊是區(qū)塊鏈2.0。在以太坊平臺(tái)上,可以開發(fā)各種各樣的去中心化應(yīng)用,這些應(yīng)用構(gòu)成了以太坊的整個(gè)生態(tài)...

    yibinnn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<