# eth智能合約 前置作業
**本文章不定期更新, 如果有錯誤請跟我說,謝謝**
編譯器版本 0.4.25+

[已發佈的合約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
```
建構子
佈署合約時會執行一次
可以有船入參數, 但不能有回傳值
函式保留字

## 事件
純粹用來記錄, etherscan拿來記錄轉幣紀錄(token)
記錄購買者是誰? 買多少?
紀錄轉帳給誰? 轉多少?

## ERC20的規範
智能合約實做下列函式

approve 來同意 誰 可以使用我的代幣
之後用 transferFrom 來 轉代幣
## 交易原理
轉幣是透過智能合約來轉換
來源 自己的小狐狸錢包地址
目的 合約地址

圖解

# 疑惑
我佈署好的合約
我用新版的 remax IDE 之後
我點下方的 url 沒辦法直接連到 合約?
**正常點下方url, 轉到該筆交易去, 再點 contract合約, 即可跳到智能合約部分**


**程式碼要開源( Verify and Publish ),才看得懂記錄在紀錄啥**

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