Integer, Bool, Address, string
// 單行註解: 快速了解接下來的目標, 或是解釋代碼
/*
多行註解
*/
表示真或假, true or false
int -> integer, 有負數 int8 to int256
uint -> unsigned integer, 無符號整數(無負數)) uint8 to uint256
為了要讓開發者, 一般人看得懂, 由編碼呈現
1個byte = 8 bit, 最多32個byte, 16進制
一種序列化的表示方式, 為了讓計算機看得懂的內容
智能合約特有的型別, 以太訪地址為160 bit, 20byte
可以表示個人錢包地址, 也可以表示合約地址
(transfer都不要用了)
值可能會變, 變數便於我們閱讀, 儲存, 計算及操作流程
把型別應用在需要的變數上
// 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);
}
}
- 數值範圍為0到2的bits次方次方減1之間,即為 0 ~ 2n-1
- 數值範圍為 -2n-1 ~ 2n-1 -1
- Solidity 之中沒有浮點數型態 (要換算成整數)
- private
指的是當前區塊鏈狀態和合約執行環境的資訊的一組特殊變數, 比如:
keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))
abi.encodePacked(_str1)
將字符串 _str1
編碼為字節序列,不添加長度前綴和填充。keccak256(abi.encodePacked(_str1))
計算 _str1
的 Keccak-256 哈希值。_str2
執行相同的操作:abi.encodePacked(_str2)
生成其字節序列,然後 keccak256
計算其哈希值。這種比較字符串的方法並不直接比較字符串的內容,而是比較它們的哈希值。如果兩個字符串的內容完全相同,則它們的哈希值也應該完全相同。這種方法通常用於在 Solidity 中進行字符串比較,因為 Solidity 不支持直接比較字符串。
可以有多個 contract。
payable
wei
Solidity 是強型別語言,與弱型別語言的差別是宣告變數的時候需要表明型態。