# 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)