日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

以太坊智能合约生命周期(Ethereum smart contracts lifecycle)

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊智能合约生命周期(Ethereum smart contracts lifecycle) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

合約對象初始化

上一節中我們提到Solidity編寫合約和面向對象編程語言非常相似,我們可以通過構造函數(constructor)來初始化合約對象。構造函數就是方法名和合約名字相同的函數,創建合約時會調用構造函數對狀態變量進行數據初始化操作。

pragma solidity ^0.4.4;contract Power {uint value;/* 合約初始化時會調用構造函數 */function Power(uint number, uint p) { value = number ** p;}function getPower() constant returns (uint) {return value;}}

同一個合約是否可同時擁有兩個構造函數?

由上圖不難看出,當我們同一個合約如果有多個構造函數時,會出現下面的錯誤提示:

More than one constructor defined.function Power(uint number) { ^ Spanning multiple lines. Another declaration is here

如果你嘗試部署Power合約,你將看到需要提供兩個參數進行合約交易。

合約部署成功后,我們將會看到getPower函數返回的值。

構造函數(constructor)會在合約創建時對數據進行初始化,傳統的類會在對象銷毀時調用析構函數(destructor),在以太坊智能合約中,同樣在合約銷毀時,自動調用析構函數銷毀相關數據。

合約owner

讓我們來對我們上一篇中的Counter合約進行改進,合約對象創建時在構造函數中保存我們當前合約的合約地址,在increment函數中增加一個判斷,只有當在我們合約內部調用時,狀態變量count才加1,否則不做任何其他操作。

pragma solidity ^0.4.4;contract Counter {uint count = 0;address owner; //存儲Counter合約ownerfunction Counter() {owner = msg.sender; // 存儲Counter合約owner} function increment() public {if (owner == msg.sender) { // 判斷是誰在調用`increment`方法count = count + 1;}}/* 讀取count的值 */function getCount() constant returns (uint) {return count;}}

因此我們給合約增加了一層保護層,只有創建合約的creator才能夠自己調用increment方法讓count加1。

析構函數 - 一個合約的銷毀

最完美的事情是有開始有結尾,合約也一樣,它也可以結束。當一個合約通過kill方法將其殺死,那么我們將不能再和這個合約進行交互,如果一個合約被銷毀,那么當前地址指向的是一個僵尸對象,這個僵尸對象調用任何方法都會拋出異常。你想銷毀合約,需要調用selfdestruct(address)才能將其進行銷毀。

pragma solidity ^0.4.4;contract Counter {uint count = 0;address owner;function Counter() {owner = msg.sender;} function increment() public {if (owner == msg.sender) {count = count + 1;}}function getCount() constant returns (uint) {return count;}function kill() {if (owner == msg.sender) { // 檢查誰在調用selfdestruct(owner); // 銷毀合約}}}

在其他一些比較老的教程里面,你可能會看到suicide()方法,但是為了語言更好的可讀性,這個方法目前已經重新命名,以后如有需要,大家直接調用selfdestruct()方法就好。

接下來讓我們調用我們的kill方法查看效果:

執行kill方法,過一會兒刷新,你會發現剛才的合約已經沒了。

小結

本節中,我們學習了一個簡單但是完整的合約,詳細講解了合約的構造函數、析構函數,以及如何部署到區塊鏈,當我們調用kill方法時,會調用析構函數將合約銷毀的整個過程。


http://liyuechun.org/2017/09/29/solidity-contract-0005/

總結

以上是生活随笔為你收集整理的以太坊智能合约生命周期(Ethereum smart contracts lifecycle)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。