Solidity學習[1]: MetaCoin合約代碼解析

2020-12-22 那多7704

上一篇,我記錄Truffle搭建環境以及部署合約的步驟。運行你的第一個Truffle-Dapp

幾次繞過代碼不看,原諒我真的幾年沒寫代碼了....

所以這一篇開始要了解下Solidity這個語言的語法。

寫在前面:

1. 寫智能合約用的程式語言用Solidity就好。

2. 智能合約文件擴展名是.sol

3. 你應該已經了解了一些關於區塊鏈、比特幣、以太坊的相關知識。

4. 本文只供有一定面向對象開發經驗以及一定HTML、JS等前端開發經驗的同行參考。

5.官方文檔(中文版):http://solidity-cn.readthedocs.io/zh/develop/

這個文檔看著真心蛋疼,還好我不算依賴它,我學習一門語言的習慣是,解釋demo代碼,儘可能詳細的注釋每一行代碼,個人覺得效率還是蠻高的。

所以,如果你也想學Solidity的話,可以嘗試自己把demo都注釋一遍。

MetaCoin.sol 代碼解析

如果安裝好Truffle,用 truffle unbox webpack 初始化了項目。

在新建的文件夾中會有Metacoin demo代碼。

以下會用截圖來解析Metacoin.sol 的每一行代碼。

1. 版本聲明以及引入類庫

2.聲明合約、變量以及事件

3. 合約的構造函數

4. sendCion 轉帳方法

5. 查詢餘額方法

6. ConvertLib.sol 類庫的轉換函數

到這裡,MetaCion.sol 就解析完了。

總結一下:

整體來說,Solidity語法與我之前接觸的語言相差不是很大,大部分一眼就看懂,只是個別寫法上會有些不習慣。個人覺得注釋代碼會讓學習新語言變得比較容易上手.

相關焦點

  • 智能合約開發solidity程式語言開發一個以太坊應用區塊鏈投票實例
    智能合約開發用solidity程式語言部署在以太坊這個區塊鏈平臺,本文提供一個官方實戰示例快速入門,用例子深入淺出智能合約開發,體會以太坊構建去中心化可信交易技術魅力。智能合約其實是「執行合約條款的計算機交易協議」。區塊鏈上的所有用戶都可以看到基於區塊鏈的智能合約。
  • 在線工作坊 | 使用 Solidity 建立以太坊智能合約
    微軟Reactor 為幫助廣開發者,技術愛好者,更好的學習 Python,數據科學,機器學習,AI,區塊鏈等技術,將每周三到周六,組織 3~5
  • 區塊鏈_Solidity智能合約_函數、事件與日誌03
    文章目錄值類型與引用類型Solidity語言特點數據類型分類代碼演示memory測試引用類型之storage測試值類型與引用類型Solidity語言特點沒有main、沒有多線程、合約與合約裡面的函數都是通過地址調用
  • TRONCOIN波場幣智能合約怎麼樣
    目前市面上有很多智能合約的盤: troncoin波場幣智能合約跟其他項目如何對比 ①合約佔比率:就是手續費能量消耗的那個合約佔比率,一般很多的智能合約,能量消耗的:合約佔比率0%,或者是只有1%。而用戶佔比率100%,甚至99%‼️ 第一點:為什麼查詢合約地址,我們要先看這一點呢?
  • Solidity中library的使用與建議
    1.合約繼承 在研究合約合約訪問library之前,這裡簡單介紹一下合約如何從其他合約繼承合約。與其他程式語言一樣,你可以指定從外部或派生合約中可以訪問合約的內容。函數可以指定為external,public,internal,private,默認為public。
  • 使用編譯器——Solidity中文文檔(8)
    會影響代碼的生成和類型檢查。    // 第一級的key是文件名,第二級是合約名稱,如果合約名為空,則針對文件本身(進行輸出)。    // 若使用通配符*,則表示所有合約。  sources: {    "sourceFile.sol": {      // 標識符(用於源碼映射)      id: 1,      // AST對象      ast: {},      // legacy AST 對象      legacyAST: {}    }  },  // 這裡包含了合約級別的輸出
  • 區塊鏈(39):Solidity開發神器Remix
    /browser-solidity1.1   文件夾管理最左邊是文件夾管理,裡面列出了當前工作區裡的文件,remix可以支持從本地文件夾讀取文件。1.2   工作區正中間是工作區,工作區上半部是代碼編輯區,在這裡可以寫solidity合約。下半部是日誌區,在執行智能合約時,會顯示transaction相關的信息。在輸出日誌的時候還可以查看Details和Debug信息。
  • 適合區塊鏈入門學習的以太坊開發教程Solidity、DApp、智能合約
    通過本課程的學習,你將掌握:以太坊區塊鏈的基本知識開發和部署以太坊合約所需的軟體環境使用高級語言(solidity)編寫以太坊合約使用NodeJS在以太坊網絡中,眾多的節點彼此連接,構成了以太坊網絡:以太坊節點軟體提供兩個核心功能:數據存儲、合約代碼執行。在每個以太坊全節點中,都保存有完整的區塊鏈數據。以太坊不僅將交易數據保存在鏈上,編譯後 的合約代碼同樣也保存在鏈上。以太坊全節點中,同時還提供了一個虛擬機來執行合約代碼。
  • Filecoin最近熱門的「互操作」什麼意思!IPFS星際大陸最新解讀
    共同特點:1、同一語言的客戶端在不同平臺上的使用是完全相同的2、不同語言的客戶端(mist、geth、eth等等)之間在同一個平臺(linux、windows或OSX)上共用一樣的應用配置,同時其命令行可使用的參數也是一致。
  • CTF技能寶典之智能合約 重入漏洞
    :查看合約題目,發現並沒有ether,也沒有給出合約源碼,如下圖:由於拿到題目後只有合約的opcode,所以需要進行逆向,這裡我們推薦Online Solidity Decompiler在線網站(https://ethervm.io/decompile),具體逆向時的源碼還原我們不再贅述,需要學習的同學可移步系列文章反編譯篇,反彙編篇以下為逆向後的合約代碼:
  • 一文入門元學習(Meta-Learning)(附代碼)
    筆者挑選了經典的paper詳讀,看了李宏毅老師深度學習課程元學習部分,並附了MAML的代碼。為了通俗易懂,我將數學推導和工程實踐分開兩篇文章進行介紹。比如20-ways,1-shot分類的意思是說,要做一個20分類,但是每個分類下只有1張圖像的任務。我們可以依據Omniglot構建很多N-ways,K-shot任務,這些任務將作為元學習的任務來源。構建的任務分為訓練任務(Train Task),測試任務(Test Task)。特別地,每個任務包含自己的訓練數據、測試數據,在元學習裡,分別稱為Support Set和Query Set。
  • 關于波場智能合約fallback 函數的特性
    本期小課堂結合 TRON-Rich 團隊的 RichBank 合約,談一談波場智能合約fallback 函數的特性以及如何有效避免重入攻擊。同時,歡迎大家關注 TRON官方 twitter,踴躍投稿合約代碼。老規矩,開講之前,先通過https://troneye.com (以下簡稱 TRON-Eye)驗證合約源碼的真實性。
  • 智能合約安全系列文章反彙編·下篇
    前言上篇我們詳細分析了智能合約反彙編後的代碼內容,包括多個反彙編指令的含義,數據在棧中的存儲方式,並通過上下文關聯關係梳理代碼邏輯。本篇我們將繼續分析上篇遺留的反彙編代碼,通過上篇學習我們已對反彙編指令在棧和內存存儲的有了一定了解,該篇我們將重點來分析反彙編指令表示的代碼邏輯。
  • 搞懂事件的使用,詳細解讀Solidity事件Event
    當然要注意的就是,日誌和事件在合約內是無法被訪問,即使是創建日誌的合約。在Solidity 代碼中,使用event 關鍵字來定義一個事件,如:event EventName(address bidder, uint amount);這個用法和定義函數式一樣的,並且事件在合約中同樣可以被繼承。
  • 零基礎Solidity入門教程:6. 循環語句和條件語句
    Solidity的基礎概念、合約結構和變量等相關內容,大家可以點擊相應課程連結進行回顧。(▲點擊回顧:零基礎Solidity入門教程:1.基礎概念與Remix在線編譯器;2.基本合約結構;3.變量類型;4.基本操作符及其運算;5.修飾符及真假bool值)今天,我們要為大家介紹的是循環語句和條件語句。
  • 九環智能合約(Nine Ring Smart Contract)合約代碼全解析
    最近火爆的九環智能合約(Nine Ring Smart Contract)到底是什麼來頭?這個項目背後最終獲利者是誰?這個項目合約背後是否留有後門?總結上述靈魂三問:歸根結底就是這個項目能不能做?可靠性強不強?是適合個人做還是團隊做?
  • 2天1夜教會您獨立完成Meta分析和網狀Meta分析線上學習班(免費提供所有數據、代碼3月20-21日 線上班)
    2天1夜教會您獨立完成Meta分析和網狀Meta分析線上學習班(免費提供所有數據、代碼3月20-21日 線上班)歡迎新老客戶預定消費預存卡
  • 2天1夜教會您獨立完成Meta分析和網狀Meta分析線上學習班(免費提供所有數據、代碼1月30-31日 線上班)
    線上互動好 線下服務好 老師建群長期耐心答疑本培訓班以1篇meta分析和網狀meta分析為案例主線,全程實戰講解,現場教學,現場答疑,演示全部代碼和操作,全程錄製屏幕,不限時間回放。提供珍藏多年的代碼和數據提取表。課後自己可以獨立完成1篇meta分析和1篇網狀meta分析。 猴哥:孫老師,主講《meta分析的選題、寫作與投稿》,碩士生導師,副主任醫師。主持多項國家級基金項目,歷任3家公司數據分析師,共發表meta分析文章25篇,累積影響因子100+。
  • 如何寫一個Solidity智能合約
    好吧,如果枚舉(ENUM)成員僅封裝在一個合約中並且從未在其他文件中提及過,那麼一切都可以。 然而DAPP通常由幾個相互連接的合約組成。當相同的枚舉(ENUM)出現時,我要討論的問題會出現: 1. 枚舉成員出現在多個合約中 2. 在DApp生命周期中進行修改 例如您有2份合約。第一個是存儲非常重要的信息。
  • 想開發區塊鏈應用,你被solidity拖後腿了嗎?
    作為一個前端開發,我接觸智能合約開發已經快一年了,期間也開發了幾個智能合約應用,看過了一些以太坊合約代碼。  以下是我基於Catalyst的TRC3模板合約體驗及一些簡單的合約移植後代碼修改的流程,主要介紹一下曾經在使用Solidity時出現的問題,以及後來使用C/C++在WASM實現中的對比  Dapp合約開發經歷  我曾經使用Solidity寫過一個溯源存證類的合約,主要就是把用戶通過表單提交的一些信息,存入到區塊鏈上。