智能合約示例

2022-05-10 17:03 更新

讓我們從一個(gè)基本示例開始,該示例設(shè)置變量的值并將其公開以供其他合約訪問。如果您現(xiàn)在不了解所有內(nèi)容也沒關(guān)系,我們稍后會(huì)詳細(xì)介紹。

存儲(chǔ)示例

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

第一行告訴您源代碼是在 GPL 3.0 版下獲得許可的。機(jī)器可讀的許可證說明符在默認(rèn)發(fā)布源代碼的設(shè)置中很重要。

下一行指定源代碼是為 Solidity 版本 0.4.16 或更高版本的語言編寫的,但不包括版本 0.9.0。這是為了確保合約不能與新的(破壞性的)編譯器版本一起編譯,因?yàn)樗男袨榭赡軙?huì)有所不同。 Pragma是編譯器關(guān)于如何處理源代碼的常用指令(例如pragma once)。

Solidity 意義上的合約是位于以太坊區(qū)塊鏈上特定地址的代碼(其功能)和數(shù)據(jù)(其狀態(tài))的集合?uint storedData;?行聲明了一個(gè)?uint?類型(256位的無符號(hào)整數(shù))的狀態(tài)變量?storedData?。您可以將其視為數(shù)據(jù)庫中的單個(gè)插槽,您可以通過調(diào)用管理數(shù)據(jù)庫的代碼的函數(shù)來查詢和更改它。在此示例中,合約定義了可用于修改或檢索變量值的函數(shù)?set?和 get

要訪問當(dāng)前合約的成員(如狀態(tài)變量),通常不需要添加this.前綴,只需通過名稱直接訪問即可。與其他一些語言不同,省略它不僅僅是風(fēng)格問題,它會(huì)導(dǎo)致訪問成員的方式完全不同,稍后會(huì)詳細(xì)介紹。

除了(由于以太坊構(gòu)建的基礎(chǔ)設(shè)施)允許任何人存儲(chǔ)世界上任何人都可以訪問的單個(gè)數(shù)字之外,該合約還沒有做太多事情,而沒有(可行的)方法來阻止你發(fā)布這個(gè)數(shù)字。任何人都可以用不同的值再次調(diào)用set并覆蓋您的號(hào)碼,但該號(hào)碼仍存儲(chǔ)在區(qū)塊鏈的歷史記錄中。稍后,您將看到如何施加訪問限制,以便只有您可以更改號(hào)碼。

警告
使用 Unicode 文本時(shí)要小心,因?yàn)榭雌饋硐嗨疲ㄉ踔料嗤┑淖址赡苡胁煌拇a點(diǎn),因此被編碼為不同的字節(jié)數(shù)組。
筆記
所有標(biāo)識(shí)符(合約名稱、函數(shù)名稱和變量名稱)都僅限于 ASCII 字符集??梢詫?UTF-8 編碼的數(shù)據(jù)存儲(chǔ)在字符串變量中。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)