經過以太坊實現本身的ICO

你想了解如何寫智能合約,但有很是有限的技術知識?你想了解如何編寫智能合約來爲你的ICO發佈數字貨幣嗎?這裏有一個關於如何着手的完整指南。php

ICO,或上線數字貨幣是新的熱潮。區塊鏈技術提供了一種獨特的方式,鼓勵早期採用者參與項目,並經過發佈數字貨幣來得到初始資金。沒必要懼怕在這個領域使用的新術語。下面是一個關於ICO是什麼的綜合指南,以及如何可以學習更多的關於這些ICO的智能合約。讓咱們開始吧!html

ICO究竟是什麼?

上線數字貨幣,一般被稱爲ICO,是一種籌資機制,其中新項目出售其數字加密貨幣,以交換比特幣和以太幣。一個加密數字幣,或一個代幣,通常只是一個術語,表示一個項目或公司發佈的價值單位。這個價值單位能夠用來獎勵參與項目並執行特定行動的用戶,或者它能夠做爲在網絡上得到特定服務的交易費用。例如,以太坊網絡使用以太幣(ETH)做爲數字貨幣,用於在網絡中執行計算。java

這些數字貨幣能夠經過美圓來購買,或者兌換美圓等法訂貨幣來得到,也能夠經過在網絡上執行特定服務(如挖礦)賺取。這些數字貨幣的優勢在於它們的價格也基於對這些數字貨幣的需求而升值和貶值。這種行爲相似於公司的股票,這反映了公司的部分全部權。數字貨幣既反映了在網絡中用於支付服務的貨幣,也反映了該數字貨幣網絡中的公平性。node

隨着數字貨幣的網絡效應增長,其在訂價中增值。肯定數字貨幣是否對你的項目有意義的第一步取決於你的項目的目標是什麼,而且有一種方法能夠「貨幣化」。正如上面所討論的,數字貨幣不只僅是網絡中使用的貨幣,並且是創建在網絡上的業務模型的一個單位。python

數字貨幣對你的項目有意義嗎?

若是數字貨幣對項目有意義,所討論的項目應該具備如下屬性:android

  • 網絡中的令牌應該具備實用價值。例如,以太坊平臺的數字貨幣是以太幣,它是被用做支付在區塊鏈中執行的任何計算的交易費用的貨幣。
  • 玩家購買數字貨幣應該有經濟上的誘因,數字貨幣發行機制應該以這樣的方式設計,即隨着數字貨幣的使用,它們的價值應該增長。例如,Filecoin是用於在去中心化的硬盤網絡中存儲文件的IPFS的數字貨幣。隨着愈來愈多的用戶想要以分佈式的方式存儲文件,他們將須要Filecoin。通常來講,這些數字貨幣預先定義貨幣供應將如何隨時間演變。這些策略是這樣設計的,其中令牌的價值隨着網絡提供的服務被更多地使用而增長。

ERC20是一個數字貨幣的標準,這使得咱們很容易發佈新的加密數字貨幣。它基於以太坊並描述了以太坊數字貨幣合約必須實現的功能和事件。可是在咱們開始學習如何爲本身的項目發放代幣以前,咱們必須理解什麼是「智能合約」。這是本篇文章的主題之一。git

什麼是智能合約?

智能合約是計算機程序,容許基於預先指定的條件在各方之間自動轉移數字資產。智能合約主要用於加密數字貨幣的交互。最突出的智能合約實現是以太坊區塊鏈平臺,它也將其稱爲去中心化應用程序,或DApp。程序員

傳統上,咱們習慣於集中託管應用程序。雖然應用程序的代碼能夠分佈在多個物理服務器上,但它們由單個實體控制。例如,facebook是一個集中式應用程序,它由一個叫作facebook公司的實體控制,而去中心化的應用程序不是由一箇中心實體控制的,而是由代碼和在其中設置的協議來控制的。這些代碼一般是開源的,任何人均可以使用它們來建立一個本身的新DAPP。一些已經成功的基於以太坊的DApp是Golem, Augur和Melonport。這些DAPPS已經可以在市場上達到數百萬美圓的價值。github

智能合約開發平臺比較

雖然以太坊是最流行的開發智能合約的平臺,但它不是惟一的一個。下面是一些用於編寫智能合約的其餘平臺:web

  • Script in Bitcoin,腳本處理文檔的能力有限。Bitcoin具備非圖靈完備的腳本語言,容許在指定條件下能夠兌換。腳本語言是至關有限的,由於它只具備一些基本的算術、邏輯和密碼操做(例如hash和驗證數字簽名)。
  • Automated Transactions是另外一個圖靈完備的智能合約語言,用於像Burstcoin和Qora之類的加密數字貨幣。它的一個應用例子是原子交叉鏈交易。原子交叉鏈交易使交易雙方擁有不一樣的數字加密貨幣,直接進行交換而不須要第三個受信任方。
  • NXT:NXT是一個公共的區塊鏈平臺,包含智能合約的模板選擇有限。你必須使用給定的模版,你不能編寫你本身的代碼。
  • Chain使用Java、Ruby和Node.js提供了帶有SDK的企業級區塊鏈基礎設施。

智能合約的侷限性

智能合約仍處於發展階段,不能徹底取代全部形式的合約。它們對於可以客觀定義並徹底在數字領域中的術語更有效。更具體地說:

  • 智能合約不該該對外部Web服務、API或外部數據庫進行調用。這可能致使相同智能合約代碼的多個獨立執行產生不一樣結果。這可能破壞區塊鏈的共識。Oracles,將現實世界中的數據更新到區塊鏈,是解決這個問題的一種方法。
  • 智能合約只能解決事實上能夠客觀決定的問題。這種約束使得智能合約對法律合約的價值較低,在沒有客觀事實的狀況下靠雙方當事人的主觀判斷容易出現糾紛。
  • 智能合約的最重要的限制是,(目前)它被用於基於if a, then b或相似變化模式的簡單合約模型。在我國現行的法律用語中,「無不當延誤」和「超出合理懷疑」等合約中的主觀方面的考慮是很難的。

雖然這些限制目前存在,但團隊正在努力使這些智能合約更加智能化。隨着物聯網的出現,更容易傳遞實時、真實世界的數據,這些數據能夠經過oracles保存在區塊鏈上。許多像Oraclize這樣的區塊鏈服務已經啓動,將真實世界的數據推到了區塊鏈鏈中。即便是簡單的if a, then b的智能合約,也有不少狀況下會被破壞。

編寫和部署智能合約的工具

  • Infura:Infura提供了可擴展的區塊鏈基礎架構,能夠知足運行完整的以太坊節點的需求,並容許開發者專一於它們的代碼。它受到開發者社區的歡迎。
  • Mist Browser:它是瀏覽和使用DAPPS的工具。它是一個單獨的瀏覽器,能夠用來瀏覽DAPPS並與它們進行交互。
  • Truffle Framework:Truffle是一種流行的以太坊開發框架。它具備內置的智能合約編譯、連接、部署和二進制管理,極大地簡化了區塊鏈開發人員的工做。
  • Metamask:是一個容許人們在瀏覽器中訪問去中心化網絡的橋樑。它容許用戶在瀏覽器中運行以太坊DApp,而不須要運行完整的以太坊節點。它是一個瀏覽器插件,容許用戶經過正規網站進行以太坊交易。截至2017年9月,Metamask只能做爲一個插件在Chrome瀏覽器中使用。
  • Remix:是一個基於Web瀏覽器的IDE,它容許用戶編寫Solidity的智能合約,而後部署和運行智能合約。

編寫智能合約的語言

兩個主要用來寫智能合約的語言是Serpent和Solidity。Serpent是一種古老的語言,它在2017年9月就已通過時了。Solidity,它是一種基於JavaScript的語言,如今已經成爲編寫智能合約的推薦語言。近年來,Serpent也發現了安全漏洞,目前這基本是一個沒有吸引力的開發平臺了。這些語言的一些關鍵特徵是:

  • solidity:是一種面向合約的高級語言,其語法相似於JavaScript,它的設計目的是完成以太虛擬機(EVM)開發。
  • Serpent:是一種高級語言,用來寫合約。它與Python很是類似,但到了2017年9月,solidity是以太坊開發者的首選語言。

即將到來的智能合約語言

solidity是目前最流行的智能合約語言。有一些即將到來的智能合約語言可能在將來變得重要:

  • Viper:側重於安全性、語言和編譯器的簡單性。它有一個相似Python的縮進方案。
  • Lisk:使用JavaScript做爲一種智能合約語言。
  • Chain:提供了企業級區塊鏈基礎設施,並採用了流行的語言,如Ruby、Java和Nodejs。

智能合約實例

讓咱們來看看一個在Solidity寫的例子。solidity是發展智能合約最流行的語言。下面的合約是一個關於如何建立新的數字貨幣的例子。新數字貨幣能夠憑空挖掘出來,但只能由建立合約的用戶使用。這個合約也能夠用來進行數字貨幣的轉帳即從一個地址發送到另外一個地址。

pragma solidity ^0.4.0;
 
contract Coin {
 address public minter;
 mapping (address => uint) public balances;
 
 event Sent(address from, address to, uint amount);

 function Coin() {
 minter = msg.sender;
 }
 
 function mint(address receiver, uint amount) {
 if (msg.sender != minter) return;
 balances[receiver] += amount;
 }
 
 function send(address receiver, uint amount) {
 if (balances[msg.sender] < amount) return;
 balances[msg.sender] -= amount;
 balances[receiver] += amount;
 Sent(msg.sender, receiver, amount);
 }
}

上面的智能合約顯示了它如何被用來鑄幣並將其轉入特定的地址。咱們來分析下這段代碼。

address public minter;

定義公共可訪問的地址變量。地址類型是一個160位變量,用於存儲在以太網網絡上的地址。

mapping (address => uint) public balances;

建立地址和單位類型之間的映射,存儲每一個地址中的數字貨幣餘額。你能夠把它看做是記錄每一個地址有多少數字貨幣的分類賬。

function Coin() {
minter = msg.sender;
}

這個函數是一個構造函數,它一旦部署就被執行。這將minter的值設置爲已部署合約的地址。這確保了只能合約的全部者鑄造新的數字貨幣,而其餘人不行。這能夠經過如下功能來保證:

function mint(address receiver, uint amount)

只有當minter調用該函數時,纔會執行該函數。該功能將數字貨幣值等於接收地址。若是它是由minter之外的人調用的,那麼這個函數什麼也不作。

function send(address receiver, uint amount)

這個函數從調用函數的地址向接收方的地址發送一個數字貨幣。例如,若是Bob用Alice的地址調用這個函數,而且金額是1000,那麼1000個硬幣將從Bob的賬戶轉移到Alice的賬戶。

在以太坊區塊鏈中部署智能合約

一旦編寫了一個合約,就須要經過實際部署它來測試它,並測試它是否像預期同樣運行。這就是須要testnets的緣由。

什麼是測試網?

testnets模擬以太坊網絡和EVM。它們使開發人員可以在不支付gas成本的狀況下上傳和與智能合約進行交互。

智能合約必須爲他們的計算支付在以太網絡的gas。若是你想在以太坊網絡上運行一個智能合約,你須要支付「gas」來完成交易。然而,testnets爲開發者提供了測試他們的合約而不支付任何費用的環境。testnets的gas可從許多公共區域免費提供。

什麼是Etherscan和我如何瀏覽智能合約?

Etherscan是區塊鏈的資源管理器。區塊鏈瀏覽器基本上是一種搜索引擎,容許用戶輕鬆查找、確認和驗證在以太坊區塊鏈上發生的交易。使用這個連接能夠在Etherscan中驗證智能合約。

使用智能合約的不多模板開始

爲了讓你開始使用智能合約,你能夠在查看下面的模板。以太坊和solidity文檔有簡單的合約讓你開始。一旦實現了這些,就能夠查看IBM提供的更高級的模板。IBM智能合約模板展現瞭如何使用IoT設備的輸出來控制智能合約。Mahesh的以太坊DAPP教程給出了一個關於如何在以太坊上實現和部署投票DAPP的開始到結束的示例。

自從發佈數字貨幣成爲一種愈來愈流行的方式,經過你的產品和產生用戶參與來賺錢,智能合約變得愈來愈重要。瞭解智能合約和學習如何寫一個將使你可以發出數字貨幣,並把你的項目帶到你一直夢想的地方。祝你一切順利!

推薦給你們咱們的以太坊教程:

  • 以太坊教程,主要介紹智能合約與dapp應用開發,適合入門。
  • 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • web3j教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和事件等內容。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和事件等。

這裏是原文

相關文章
相關標籤/搜索