以太坊(以太坊solidity合約)
- 1,以太坊
- 2,開發名詞解釋
- (1)錢包
- (2)Solidity
- (3)Ether(以太幣)
- (4)Truffle
- (5)Web3.js
- 3,叔伯塊礦工獎勵計算
- 4,如何查詢區塊計算gas
- 5,第一個智能合約
- (1)語法格式
- (2)編譯
- (3)部署
- (4)調用
1,以太坊
以太坊坊的錢包
Minist 是完整版的錢包,下載的是以太坊所有的數據,最終成為一個節點
數據太大,快一天才能下完
Metamask錢包
前面的是全節點同步
此開發人員只想借用錢包完成合約發布測試和部署
基于網頁端的錢包,可以不用同步錢包所有信息,但可以實現合約測試和部署
一旦發布,代碼開源和不可更改
天然是某些行業的解決方案
捐款、眾籌、游戲等
比特幣的區塊只有交易信息,如下
https://cn.etherscan.com/blocks
此可以查看到從誕生之初到現在的以太坊的區塊
每個區塊除了交易信息外還有代碼信息
智能合約可以發布和部署
一旦部署成功,每個合約會有一個地址,以后可以通過這個地址去調用合約中的函數,或修改合約中的狀態
以太坊并沒有
Solidity最大特點有地址類型變量,可以完成賬戶間的轉賬,而且也只有它對以太坊的分布式賬本有讀寫和調用
前端的都是調用solidity,solidity訪問底下的分布式賬本
以太坊和其他區塊鏈一樣,也會有一個點對點的協議,完成轉賬和數據相關操作
智能合約只能通過虛擬機編譯部署
以前服務器訪問返回數據,基于區塊鏈的分布式賬本,全球的節點,寫入數據操作昂貴,節點同步會消耗資源時間
開發了智能合約后要將合約部署到分布式賬本以太坊需要花錢
部署完畢后,誰調用合約也要花錢,每次調用都花錢,若調用免費,會出現惡意寫入數據的場景,geth優化分布式賬本操作
Remix在線,有網,網速不快第一次打開會
如果網速不好,可以安裝本地版,不暫
本地版門檻較高
專注編程
使用remix環境
練習時可以部署到本地,最后一層可以部署到遠程
http://remix.ethereum.org
使用火狐可以打開此開發環境,谷歌瀏覽器暫時未打開
在中文文檔中
https://learnblockchain.cn/docs/solidity/
2,開發名詞解釋
(1)錢包
想要玩以太坊相關的游戲,需要下載安裝metamask在火狐瀏覽器
https://blog.csdn.net/lsqzedu/article/details/104727957
ETH Wallet
以太坊客戶端,其實我們可以把它理解為一個智能合約運行環境,它提供賬戶管理、挖礦、轉賬、智能合約的部署和執行等等功能,而EVM是由以太坊客戶端提供的
Remix類似錢包,偏向開發,賬戶部署調用
真正的錢包
插件形式的錢包metamask,轉賬,發送代幣,不具備同步數據功能
(2)Solidity
一種語法類似JavaScript的高級語言。語法結構與JavaScript更為接近,支持結構體、面向對象 (封裝、繼承、多態、接口、抽象合約) 等特性,Solidity會被編譯為用于EVM的代碼。最大的優勢在于可以直接與以太坊分布式賬本進行交互。
只有此種語言可以完成與以太坊分布式賬本的交互
Solidity被EVM虛擬機解析后,可以操作分布式賬本,而在分布式賬本里,
通常有兩種交易
1,以太坊賬號之間的轉賬交易
2,合約的部署和相應的調用
而java、python等都是間接的訪問賬本,通過solidity
Dapp (去中心化應用,即Decentralized application)
Dapp是可以讓“終端用戶間、終端用戶和資源間、資源和資源間”在沒有中間人的情況下直接進行互動、商定協議或通訊的應用程序
合約一旦部署到以太坊區塊中,回合比特幣的區塊一樣,永久存在此區塊中不可篡改
一個一個的區塊會分到全世界的終端
(3)Ether(以太幣)
以太幣是在以太坊中使用的貨幣的名稱。以太幣被用于支付在EVM(以太坊虛擬機)中進行計算所需的開銷. Gas
公有鏈、聯盟鏈、私有鏈
公有鏈:對所有人開放,任何人都可以參與,聯盟鏈:Hyperledger Fabric.支持權限、多區塊互聯. 私有鏈:對單獨的個人或公司內部開放
區塊鏈權限掌控,聯盟鏈,fabric最有名的,聯盟鏈的開發框架
私有鏈,用于學習開發使用,使用remix部署本地私有鏈的操作,我們沒有創建私有鏈,remix已經將所有工作開發好了,我們只需要開發即可
以后學習工作中很少、幾乎不可能自己創建公鏈,而是將合約部署到以太坊公鏈
(4)Truffle
Truffle是針對基于以太坊的Solidity語言的一套開發框架,對開發,測試,部署實現了非常友好的支持. 讓開發者專注智能合約本身
一門語言成熟不,有沒有相應開發框架
Solidity,可以在百度搜索truffle框架,加速我們的開發應用
通過truffle生成模板,此處涉及到各種前端技術
可以使用JavaScript、vue、nodejs等間接調用solidity操作分布式賬本
(5)Web3.js
Web3.js是以太坊提供的一個Javascript庫,提供了一系列與區塊鏈交互的Javascript對象和函數,包括查看網絡狀態,查看本地賬戶、查看交易和區塊、發送交易、編譯/部署智能合約、調用智能合約等 (提供了點對點網絡交互的API)
Truffle本身使用JavaScript編寫,web3.js
只需要有個錢包,就可以下載分布式賬本里的區塊信息,每個賬本有區塊數據,有合約部署調用,又稱分布式數據庫,只支持solidity的調用,為什么要學習solidity的原因
使用原生語言開發效率不高,維護也不方便
盡量使用truffle框架,
JavaScript、vue、nodejs等很方便的與Web3.js交互
https://learnblockchain.cn/2018/01/12/first-dapp/
3,叔伯塊礦工獎勵計算
兩個礦工同時挖到一個區塊
比特幣出現孤塊無獎勵
以太坊有
https://blog.csdn.net/lsqzedu/article/details/104747369
以太坊的獎勵機制和比特幣不同
叔伯塊的獎勵機制,為了提高礦工積極性
叔塊無交易手續費獎勵的,且最后算的得到的獎勵比較少
當時的固定報酬是5個以太幣
發起的地址不同但都去往同一個智能合約(后面有文本標志的)
此合約完成的是眾籌操作,前面的人是向此合約中打錢
上面的交易都打了感嘆號,說明交易最后沒成功,但尷尬的是交易手續費被扣了
交易失敗和礦工無關
設置合約眾籌金額
假設100個以太幣,超過此則合約交易不再接受
眾籌的以太幣會原樣返回,但扣的手續費就沒了
4,如何查詢區塊計算gas
https://cn.etherscan.com/
https://cn.etherscan.com/blocks
https://www.yitaifang.com/blocks/
以上兩個地址顯示的區塊都是一樣的
高度每增加一個區塊高度加1,時間不同
比特幣10分鐘出一個快
而以太坊9到10秒出一個塊
出塊時間縮短,處理能力強比比特幣
單機block下的數字進入區塊查看
單機進入65的智能合約交易
可以查看如下
上方有文本標記的就是智能合約
一旦整個合約部署成功就會生成唯一的哈希地址
可以查看合約代碼
https://www.jianshu.com/p/a74afe1b171f
以太坊中的計量單位及相互轉換
手續費= 本區塊消耗的gas(14963259)*當前gas的價值(23.86)得到單位為以太坊
所有區塊獲得的手續費都獨屬于礦工
叔伯塊也是有獎勵的,就是雙花、交叉時的出現的平行塊
5,第一個智能合約
合約第一個字母大寫
(1)語法格式
這一張主要是合約部署整個流程
https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency
勾選后,一旦編寫程序,合約會自動編譯
(2)編譯
(3)部署
編譯成功后就是合約部署,正常部署是本地合約部署到以太坊分布式賬本
但此部署需要消耗以太幣
Remix好處在于本地構建私有鏈,編譯測試后再部署到遠程就節省時間和經歷
合約的部署和調用都會消耗ges,geth本身也是以太坊的一個貨幣單位,和以太坊換算
真實場景合約部署成功后,會有64位的地址,在下個視頻可以根據這個地址調用其變量和其函數來進行智能合約的執行
上面的from就是部署合約的用戶地址
所消耗的gas也能在上方看到
和比特幣不同的是,合約的部署也是一筆交易,只要有交易就會生成64位的hash
(4)調用
一旦部署成功,使用另一個賬戶調用此合約會花錢
調用合約花費要少,水很深,調用不同的函數,函數的操作級別不同花費也是不同的
發現第3個用戶,點擊get函數的沒有消耗以太坊gas,原因是其沒有向變量寫入東西,而是拿東西,分布式賬本寫東西代價很高,但讀沒問題
Remix開發工具的使用,智能合約編譯、部署、調用
以太坊開發概念就好理解了