---
# System prepended metadata

title: eth智能合約 前置作業

---

# eth智能合約 前置作業

**本文章不定期更新, 如果有錯誤請跟我說,謝謝**

編譯器版本 0.4.25+

![](https://hackmd.io/_uploads/SkrSzPQE2.png)


[已發佈的合約1](https://sepolia.etherscan.io/tx/0x9c5a8ca4089c6f58c2e6fbf22e4bb9a9c403e6fcb2256726b6d2ff546798a14c)

# eth 智能合約

一個標準的 ERC20 智能合約需具備的函式有

* 代幣的全名
* 代幣的縮寫
* 代幣的最小單位數值
* 代幣的總量
* 查詢帳戶代幣餘額
* 轉移代幣
* 轉移代幣事件
* 從 A 地址轉移代幣給 B 地址
* 批准代幣轉移
* A 地址批准給 B 地址的代幣數量
* 代幣批准觸發事件

# 關鍵字

emit   事件使用
revert 該次交易會失敗


[建立第一個智能合約專案](https://gasolin.gitbooks.io/learn-ethereum-dapp/content/create-first-smart-contract-project.html)

* 合約佈署後，就不能夠修改 ( 聽勇者說有熱更新 )
* 所有的節點都會執行一次 合約內容, 且執行內容都會一致
* 上傳修改 都要花手續費
* 萬一某次執行合約有錯誤，整批更新都不算，會回滾
* 資料儲存在區塊鍊上(因永久有效手續費比較貴)，資料儲存在此次交易的暫存記憶體上, 手續費就比較便宜




* 沒有float資料型態
* 宣告變數時, 就要預先知道數值的範圍, 然後給予可以容納的範圍 ( uint16 = 2^16 )
* bytes = 8bit * 1 = 8bit => 可以儲存 0xab
* bytes2 = 8bit * 2 = 16bit => 可以儲存 0xabcd
* bytes32 = 8bit * 4 = 256bit => 拿來存放 block.blackhash(4);

```go=
1個byte = 8 bit ( 可以儲存2個16進制)
1個16進位是 4bit

0xF = 16(10進制), 要 4bit 來處存 (1111)

sha256 回傳的 0xaaaaaa 是256bit
```

建構子
佈署合約時會執行一次
可以有船入參數, 但不能有回傳值

函式保留字 
![](https://i.imgur.com/no8mpt9.png)


## 事件
純粹用來記錄, etherscan拿來記錄轉幣紀錄(token)
記錄購買者是誰? 買多少?
紀錄轉帳給誰? 轉多少?
![](https://i.imgur.com/TOgqyss.png)

## ERC20的規範

智能合約實做下列函式
![](https://hackmd.io/_uploads/B1ZIcKI4n.png)

approve 來同意 誰 可以使用我的代幣
之後用 transferFrom 來 轉代幣

## 交易原理

轉幣是透過智能合約來轉換
來源 自己的小狐狸錢包地址
目的 合約地址

![](https://hackmd.io/_uploads/SJlnj45Vh.png)

圖解
![](https://hackmd.io/_uploads/HJmOuN9V3.png)


# 疑惑

我佈署好的合約
我用新版的 remax IDE 之後
我點下方的 url 沒辦法直接連到 合約?
**正常點下方url, 轉到該筆交易去, 再點 contract合約, 即可跳到智能合約部分**
![](https://i.imgur.com/obPXcds.png)

![](https://i.imgur.com/Lsw92Df.png)

**程式碼要開源( Verify and Publish )，才看得懂記錄在紀錄啥**
![](https://hackmd.io/_uploads/ryOvnTQEh.png)




# 參考文章

[鐵人賽-開發智能合約 - 序 (Day01)](https://ithelp.ithome.com.tw/articles/10200395)