1.1 Solidity的型別 Types 與變數 Variables + 小練習

更新 發佈閱讀 10 分鐘

Integer, Bool, Address, string

A. 註解

// 單行註解: 快速了解接下來的目標, 或是解釋代碼

/*

多行註解

*/

B. 布林

表示真或假, true or false

C. 整數

int -> integer, 有負數 int8 to int256

uint -> unsigned integer, 無符號整數(無負數)) uint8 to uint256

D. string 字串

為了要讓開發者, 一般人看得懂, 由編碼呈現

E. Bytes (很重要, 多看幾次)

1個byte = 8 bit, 最多32個byte, 16進制

一種序列化的表示方式, 為了讓計算機看得懂的內容

F. Address

智能合約特有的型別, 以太訪地址為160 bit, 20byte

可以表示個人錢包地址, 也可以表示合約地址

(transfer都不要用了)

G. Variables變數

值可能會變, 變數便於我們閱讀, 儲存, 計算及操作流程

把型別應用在需要的變數上

H. 以太坊單位

I. 程式碼解析

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract BasicTypes{
// 型別公式: <type> < visibility> <name> = <value>
// 1. 以下都是正整數, 可視性如果沒寫, 預設是internal
// 正整數最小值= 0, uint256: 0 ~ (2^256-1)
// uint8: 0 ~ (2^8 -1)
uint256 public myUint = 123;
uint32 public myUint32 = 111;
uint public myUint16 = 222;
uint8 public myUin8 = 333;

// 2. 以下為負整數以是負數
int256 public myInt = -123;
int32 public myInt32 = -111;
int16 public myInt16 = -222;
int8 public myInt8 = -333;

// 3. 取得uint最大數值的兩種方式
uint8 public uint8_max = 2**8 -1;
// 取得最小值: uint public uint_min = 0;
uint256 public max = type(uint256).max;
// int8 public int8_min = type(int8).min;

// 4. 功能:整數運算
function doMath(uint256 a, uint b) public pure returns(uint, uint, uint, uint, uint) {
uint sum = a + b;
uint diff = a - b;
uint product = a * b;
uint quotient = a / b;
uint remainder = a % b;

return (sum, diff, product, quotient, remainder);
}
}



// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Logic {
// 5. 邏輯運算
function testLogic(uint256 x, uint256 y) public pure returns(bool, bool, bool, bool, bool) {
bool isBiggerThan5 = x > 5;
bool isLessThan10 = y < 10;
bool isBiggerThanAddEqual5 = x >=5;
bool isLessThanAndEqual10 = y <=10;
bool isEqual20 = x == 20;
return (isBiggerThan5, isLessThan10, isBiggerThanAddEqual5,isLessThanAndEqual10,isEqual20);
}

function testLogic2(bool x, bool y) public pure returns (bool, bool, bool) {
bool andResult = x && y; // &&: and, true && true = true
bool orResult = x || y; // ||: or, false|| false = false, 只要有一個true, 那就是true -> 邏輯運算
bool notResult = !x; // !:not, !true= false, !false = true

return (andResult, orResult, notResult);
}

}

J 練習

練習題 1

    • uint 在其後宣告完 bits 之後該整數的數值範圍為__________。

- 數值範圍為0到2的bits次方次方減1之間,即為 0 ~ 2n-1 

    • int 在其後宣告完 bits 之後該整數的數值範圍為__________。

- 數值範圍為 -2n-1 ~ 2n-1 -1

練習題 2 請問如何在 Solidity 之中表示浮點數?

- Solidity 之中沒有浮點數型態 (要換算成整數)

練習題 3 請問狀態變數 State variables 預設的可視性是 public 還是 private?

- private

練習題 4 請舉出 3 種我們如何用來節省 String gas 花費的儲存型態。

    • uint16:這是一種16位元的無符號整數型態,範圍從0到65535。如果你知道你的數值絕對不會超過這個範圍,那麼使用uint16可以節省儲存空間。然而,請注意,如果數值超出此範圍,將會導致錯誤。
vocus|新世代的創作平台
    • uint32:這是一種32位元的無符號整數型態,範圍從0到4294967295。如果你的數值可能會超過uint16的範圍,但仍在uint32的範圍內,那麼使用uint32可以提供更大的範圍而不會增加太多的儲存空間成本。
vocus|新世代的創作平台
    • uint256:這是一種256位元的無符號整數型態,提供了極大的範圍,但也需要更多的儲存空間。如果你需要處理非常大的數值,或者你不確定數值的範圍,那麼uint256可能是一個選擇。
vocus|新世代的創作平台

練習題 5 請問全局訊息 Global Variables 指的是何者提供的資訊? 

指的是當前區塊鏈狀態和合約執行環境的資訊的一組特殊變數, 比如:

  1. block:提供有關當前區塊的資訊,如區塊號、時間戳和區塊難度等。
  2. msg:提供有關當前交易或訊息的資訊,如發送者地址、交易數據、gas 限制等。
  3. tx:提供有關當前交易的資訊,如交易哈希、發送者地址、接收者地址等。
  4. now(或 block.timestamp):提供當前區塊的時間戳。
  5. address(this):提供當前合約地址。

練習題 6 請舉例「如何在 Solidity 之中進行字串比較。」

keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))
  1. abi.encodePacked(_str1) 將字符串 _str1 編碼為字節序列,不添加長度前綴和填充。
  2. keccak256(abi.encodePacked(_str1)) 計算 _str1 的 Keccak-256 哈希值。
  3. 同樣地,對 _str2 執行相同的操作:abi.encodePacked(_str2) 生成其字節序列,然後 keccak256 計算其哈希值。
  4. 最終,通過比較這兩個哈希值來判斷兩個字符串是否相等。

這種比較字符串的方法並不直接比較字符串的內容,而是比較它們的哈希值。如果兩個字符串的內容完全相同,則它們的哈希值也應該完全相同。這種方法通常用於在 Solidity 中進行字符串比較,因為 Solidity 不支持直接比較字符串。

練習題 7 請問在一個 .sol 檔案裡面,我們可以有幾個 contract?

可以有多個 contract。

練習題 8 在宣告 address 時加上 ____ ,代表可用於支付的地址。

payable

練習題 9 <account>.balance 回傳的單位是 ____。

wei

練習題 10 Solidity 是強型別語言還是弱型別語言,並簡單說明它們兩者的差別。

Solidity 是強型別語言,與弱型別語言的差別是宣告變數的時候需要表明型態。

[Reference]

  1. Solidity Tutorial: Basics 瞭解初階語法、型別 Types 與變數 Variables - BOOLEANS, INTEGER, STRING, Address, KryptoCamp 區塊鏈人才培育第一品牌, Jun 14, 2023
  2. Solidity 教學: 型別 Types & 變數 Variables, KryptoCamp - 智能合約教學與區塊鏈工程師課程
  3. Solidity 實戰工作坊 - 第 1 場精彩重播: 智能合約撰寫, KryptoCamp - 智能合約教學與區塊鏈工程師課程
留言
avatar-img
Follow the Rainmaker 🌧️
5會員
91內容數
尋大神腳印, 亦步亦趨。
2024/06/12
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
2024/06/12
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
2024/05/29
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
2024/05/29
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
2024/05/28
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
2024/05/28
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
看更多
你可能也想看
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
在AI浪潮下,009819 中信美國數據中心及電力ETF 直接卡位算力與電力雙主軸,等於掌握AI最核心基建。2008從 Apple Inc. 與 iPhone 帶動供應鏈,到如今AI崛起,主線已由應用端轉向底層。AI發展離不開算力與電力支撐,009819的價值,在於押中「沒有它不行」的核心資產。
Thumbnail
在AI浪潮下,009819 中信美國數據中心及電力ETF 直接卡位算力與電力雙主軸,等於掌握AI最核心基建。2008從 Apple Inc. 與 iPhone 帶動供應鏈,到如今AI崛起,主線已由應用端轉向底層。AI發展離不開算力與電力支撐,009819的價值,在於押中「沒有它不行」的核心資產。
Thumbnail
中學數學基礎練習—整數減法練習
Thumbnail
中學數學基礎練習—整數減法練習
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
中學數學基礎練習—二元一次方程式
Thumbnail
中學數學基礎練習—二元一次方程式
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
高中數學主題練習—絕對值不等式
Thumbnail
高中數學主題練習—絕對值不等式
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—整數減法練習
Thumbnail
中學數學基礎練習—整數減法練習
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News