區塊鏈技術入門,涉及哪些編程語言?

想入門,都找不到突破口,應該學習哪些知識,這個技術是由哪些編程語言實現的呢,請不吝賜教


入門不需要編程語言,先搞明白區塊鏈原理,從最簡單的比特幣開始,視頻動畫教程:

數字貨幣與區塊鏈 - 飛揚學院

至於實現,你理解了概念/原理,照著協議用Java實現比特幣區塊鏈/錢包/支付很容易:

michaelliao/cryptocurrency

當然上面的代碼僅供研究學習,不推薦拿真幣做實驗。


搭車者以太坊智能合約指南

https://www.zhihu.com/people/tuo-ya-58-72

以太坊愛好者 · 1 分鐘前

翻譯:Toya

聲明:轉載須附本文鏈接,違者必究

原文鏈接:https://medium.com/bitcorps-blog/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05#.bc8qat6lf

我已經智能合約領域工作了4年,主要在比特幣區塊鏈上。我參與的一些項目包括存在證明,bitcore(比特核心)以及Streamium. 過去這個月,我探索了在以太坊平台上進行開發。

我決定製作一個簡短的指南服務未來想要學習以太坊開發的程序員。手冊分為兩個部分:如何開始以太坊智能合約開發,智能合約安全簡述.

如何開始學習以太坊智能合約

0.基礎概念

這個指南假設你已經有了一些密碼學貨幣和區塊鏈的基礎技術背景。 如果你沒有,我建議快速過一遍Andreas Antonopoulos的《完全掌握比特幣》(Mastering Bitcoin),Consensys的《用剛剛夠的比特幣來搞懂以太坊》(Just Enough Bitcoin for Ethereum),或者至少看看Scott Driscoll的短片。 為了繼續讀下去你得了解公鑰和私鑰,為什麼區塊鏈需要礦工,如何達成去中心化的共識,以及交易腳本和智能合約的概念。

另外兩個在你開始進行以太坊開發之前需要了解的重要的,相關的概念是以太坊虛擬機和汽油(gas)。以太坊的目的在於成為一個智能合約平台。它的起源可以被追溯到Vitalik Buterin對比特幣做為智能合約平台具有的局限性的評論。以太坊虛擬機(EVM)是以太坊智能合約執行之處。與比特幣相比,它為撰寫合約提供了更具表現力和完整性的語言。事實上,它是一個圖靈完備的編程語言。一個比較好的比喻是,EVM是一個執行智能合約的分散式的世界電腦。由於智能合約由EVM執行, 必須存在一種限制每個合約佔用資源的機制。EVM內運行的每一步操作實際上同時在被所有節點所執行。這是為什麼需要有汽油(gas)存在。一個以太坊合約代碼交易可以引發數據讀寫,密碼學原語,調動(發送信息給)其他合約等等昂貴的運算。每個此類運算都有用汽油計量的價格,每筆交易所耗費的汽油單元需要用以太幣來支付,根據隨時變化的汽油和以太幣的匯率計算。相應的價格會從提交交易請求的以太坊賬戶中扣除。同時每筆交易對可使用的汽油會設置上限參數,用以防止編程錯誤導致耗干賬戶中資金。點擊這裡閱讀更多關於汽油。

1.設置你的環境

好了,你已經知道了那些基礎的,讓我們趕緊把環境搞起來寫代碼吧。為了開始開發以太坊app(或者dapp,去中心化應用的簡稱,許多人喜歡這樣叫),你需要安裝一個客戶端來接入主網。它會成為你進入這個分散式網路的窗口,提供一個觀察區塊鏈的方法,那裡所有EVM(以太坊虛擬機)狀態被顯示出來。有很多與條款兼容的客戶端,最受歡迎的是geth,用Go語言實現。但它並不是最開發者友好的客戶端。我目前找到最好的選擇是testrpc節點(是的,名字起得很糟糕)。相信我,它會節省你很多時間。安裝它,運行它:

$ sudo npm install -g ethereumjs-testrpc
$ testrpc

你應該在一個新的終端中運行『testrpc』,並且在你開發的過程中一直讓它運行。每次你運行testrpc,它會生成10個包涵模擬測試資金的新地址供你使用。這個不是真錢,你可以安全得用這些進行任何實驗,不會有損失資金的風險。在以太坊中撰寫智能合約最受歡迎的語言是Solidity,因此我們會使用這個語言。我們也會用Truffle開發框架,它會幫助創造智能合約,編譯,部署以及測試。讓我們開始吧

# First, let"s install truffle
首先,讓我們安裝truffle
$ sudo npm install -g truffle# let"s setup our project
$ mkdir solidity-experiments
$ cd solidity-experiments/
$ truffle init

Truffle 會生成一個示範項目所需要的文件,包括MetaCoin,一個token合約的例子。你應該能夠通過運行truffle compile指令來編譯示範合約。然後,你需要通過我們在運行的testrpc節點用『truffle migrate』指令來在模擬網路部署合約。

Compiling ConvertLib.sol...
Compiling MetaCoin.sol...
Compiling Migrations.sol...
Writing artifacts to ./build/contracts$ truffle migrate
Running migration: 1_initial_migration.js
Deploying Migrations...
Migrations: 0x78102b69114dbb846200a6a55c2fce8b16f61a5d
Saving successful migration to network...
Saving artifacts...
Running migration: 2_deploy_contracts.js
Deploying ConvertLib...
ConvertLib: 0xaa708272521f972b9ceced7e4b0dae92c77a49ad
Linking ConvertLib to MetaCoin
Deploying MetaCoin...
MetaCoin: 0xdd14d0691ca607d9a38f303501c5b0cf6c843fa1
Saving successful migration to network...
Saving artifacts...Note to Mac OS X users: Truffle is sometimes confused by .DS_Store files. If you get an error mentioning one of those files, just delete it.

我們剛剛往測試節點上部署了我們的示範合約。哇!很簡單,對吧?是時候寫我們自己的合約了!

2.撰寫你的第一個以太坊只能合約

在這個指南裡面,我們會寫一個存在證明只能合約。就是創造一個存有用於證明存在的文件哈希的電子公正機關。用『truffle create:contract』來開始:

$ truffle create:contract ProofOfExistence1

從你的編譯器裡面打開合約/ProofOfExistnece1.sol(我用的是帶Soilidity語法高亮顯示的vim)

// Proof of Existence contract, version 1
contract ProofOfExistence1 {
// state
bytes32 public proof; // calculate and store the proof for a document
// *transactional function*
function notarize(string document) {
proof = calculateProof(document);
}// helper function to get a document"s sha256
// *read-only function*
function calculateProof(string document) constant returns (bytes32) {
return sha256(document);
}
}

我們將從一段簡單但是有錯誤的代碼開始向一個更好的解決方案靠近。這是一份Solidity合約定義,有點像其他語言中的類別(class)。合約中有狀態(state)和函數(functions)。區分合約中可能出現的兩種函數非常重要。

  • 只讀(常數)函數:這些函數不對任何狀態(state)進行改變。他們只讀取狀態,進行計算,並且返回數值。因為這些函數可以在每一個節點內本地解決,他們不回花費任何的汽油(gas)。他們被用『contant』關鍵詞標出。

  • 交易函數:這些函數對狀態進行改變,轉移資金。因為這些變化需要在區塊鏈中被反應出來,執行交易函數需要向網路提交交易,這會消耗汽油(gas)。

我們的合約中兩種函數各有一個,已在注釋中標註。下一段我們將會看到我們使用函數的類型會如何改變我們與智能合約交互。這個簡單的版本每次只儲存一個證明,用數據類型bytes32或者32bytes,跟sha256哈希的大小一樣。交易函數『notarize』允許我們在合約的狀態變數『proof』里存儲一個文件的哈希。這個變數是個公開變數,是我們合約的用戶認證一個文件是否被公正的唯一途徑。我們一會就會自己做一下,但是首先。。。

讓我們把ProofOfExistence1部署到網路上!這次,你需要通過編輯移動文檔(migration file)(migrations/2_deploy_contracts.js)讓Truffle部署我們的新合約。用以下的來代替內容:

/*
* migrations/2_deploy_contracts.js:
*/
module.exports = function(deployer) {
deployer.deploy(ConvertLib);
deployer.autolink();
deployer.deploy(MetaCoin);
// add this line
deployer.deploy(ProofOfExistence1);
};

你也可以選擇性的刪除有關ConvertLib和MetaCoin的語句,這些我們不會再用了。為了再次運行這個移動,你需要使用重啟標籤確保它再次運行。

truffle migrate --reset

更多的關於Truffle移動如何工作的內容可以看這裡。

3. 與你的智能合約互動

現在我們已經將智能合約部署好了,讓我們擺弄擺弄它!我們可以通過函數調用來給它發信息或者讀取它的公開狀態。我們通過Truffle操縱台來完成:

$ truffle console
// get the deployed version of our contract
truffle(default)&> var poe = ProofOfExistence1.deployed()// and print its address
truffle(default)&> console.log(poe.address)
0x3d3bce79cccc331e9e095e8985def13651a86004// let"s register our first "document"
truffle(default)&> poe.notarize("An amazing idea")
Promise { &

}// let"s now get the proof for that document
truffle(default)&> poe.calculateProof("An amazing idea").then(console.log)
Promise { &

}
0xa3287ff8d1abde95498962c4e1dd2f50a9f75bd8810bd591a64a387b93580ee7// To check if the contract"s state was correctly changed:
truffle(default)&> poe.proof().then(console.log)
0xa3287ff8d1abde95498962c4e1dd2f50a9f75bd8810bd591a64a387b93580ee7
// The hash matches the one we previously calculated

注意所有函數調用都會返回一個Promise,當Promise被解決如果我們想要檢驗它我們可以通過『.then(console.log)』來輸出。

我們要做的第一件事是獲得一個我們部署合約的表達,並把它存儲在一個叫做『poe』的變數之中。

然後我們調用交易方程『notarize』,這會涉及一個狀態改變。當我們調用一個交易方程,我們得到的是一個被轉化為交易id的Promise,而不是函數返回的值。記住為了改變EVM狀態我們需要消耗汽油(gas)並且向網路提交一個交易。這是為什麼我們會得到交易id做為Promise的結果,從改變狀態的那項交易那裡得到。在這裡,我們對交易id不感興趣,所以我們可以把Promise丟掉。不過當我們真正寫app時,我們會想要把它存起來用以檢查相應的交易,捕捉錯誤。

接下來,我們調用只讀(常數)函數『calculateProof『. 記得用』constant『關鍵詞來標記你的只讀函數,否則Truffle會試著創造一個交易來執行這個函數。這個是我們告訴Truffle,我們並沒有跟區塊鏈交互而只是在讀取。通過這個只讀函數,我們會得到』An amazing idea『文件的sha256。

我們現在需要把這個和我們智能合約的狀態進行對比。為了檢查狀態的改變是否正確,我們需要讀取『Proof』這個公開狀態變數。要獲得一個公開狀態變數的值,我們得調用具有同樣名字的一個函數,它會返回一個Promise。我們這次,輸出的哈希值是一致的,所以一切都如我們所料得進行了 :)

像你從上面的片段看到的,我們第一版存在證明智能合約似乎可以工作!幹得好!但是它每次只可以註冊一個文件。讓我們做一版更好的。

4. 合約代碼迭代

讓我們修改合約來支持多個文件驗證。把原文件複製到名為contracts/ProofOfExistence2.sol的新文件中,並且採取以下改變。主要的變化包括:我們把『proof』變數變成了bytes32的數組,並且命名為『proofs』,我們把它變成私有,然後加入一個通過循環訪問數組來檢查一個文件是否被公正的函數。

// Proof of Existence contract, version 2
contract ProofOfExistence2 {
// state
bytes32[] private proofs; // store a proof of existence in the contract state
// *transactional function*
function storeProof(bytes32 proof) {
proofs.push(proof);
} // calculate and store the proof for a document
// *transactional function*
function notarize(string document) {
var proof = calculateProof(document);
storeProof(proof);
} // helper function to get a document"s sha256
// *read-only function*
function calculateProof(string document) constant returns (bytes32) {
return sha256(document);
} // check if a document has been notarized
// *read-only function*
function checkDocument(string document) constant returns (bool) {
var proof = calculateProof(document);
return hasProof(proof);
} // returns true if proof is stored
// *read-only function*
function hasProof(bytes32 proof) constant returns (bool) {
for (var i = 0; i &< proofs.length; i++) { if (proofs[i] == proof) { return true; } } return false; } }

讓我們與新的函數互動一下:(不要忘了更新migrations/2_deploy_contracts.js來加入新的合約並且運行『truffle mirgrate--reset』)

// deploy contracts
truffle(default)&> migrate --reset// Get the new version of the contract
truffle(default)&> var poe = ProofOfExistence2.deployed()// let"s check for some new document, and it shouldn"t be there.
truffle(default)&> poe.checkDocument("hello").then(console.log)Promise { &

}
false// let"s now add that document to the proof store
truffle(default)&> poe.notarize("hello")Promise { &

}// let"s now check again if the document has been notarized!
truffle(default)&> poe.checkDocument("hello").then(console.log)Promise { &

}
true
// success!// we can also store other documents and they are recorded too
truffle(default)&> poe.notarize("some other document");
truffle(default)&> poe.checkDocument("some other document").then(console.log)Promise { &

}
true

這一版比第一版強,但是仍然有些問題。注意每一次我們想要檢查一個文件是否有被公正過時都需要循環訪問所有存在的『proofs』。儲存proofs更好的結構會是用映射(map)。走運的是,Solidity支持映射結構,在這個語言里稱此結構為mappings。另外一個我們會在這一版代碼做出的改進是我們會去掉那些多餘的標識只讀(read-only)或交易(transactional)函數的那些注釋。我想現在你已經都知道這些了:)下面是最終版本,我想應該不難理解,因為是從之前的版本一點點變過來的:

// Proof of Existence contract, version 3
contract ProofOfExistence3 { mapping (bytes32 =&> bool) private proofs; // store a proof of existence in the contract state
function storeProof(bytes32 proof) {
proofs[proof] = true;
} // calculate and store the proof for a document
function notarize(string document) {
var proof = calculateProof(document);
storeProof(proof);
} // helper function to get a document"s sha256
function calculateProof(string document) constant returns (bytes32) {
return sha256(document);
} // check if a document has been notarized
function checkDocument(string document) constant returns (bool) {
var proof = calculateProof(document);
return hasProof(proof);
} // returns true if proof is stored
function hasProof(bytes32 proof) constant returns(bool) {
return proofs[proof];
}
}

這下看起來已經足夠好了。它跟第二版運行起來沒有差別。記得更新移動文檔(migration file)同時再次運行『truffle migrate -- reset』來測試一下它。這個教程中的所有代碼都可以在這裡找到。

5.在真正的測試網路上部署

在你用testrpc在模擬網路上大量測試你的合約之後,你就可以在真正的網路上測試你的合約啦!這就需要你有一個真正的testnet/livenet以太坊客戶端。點擊這裡看如何安裝geth的說明。

開發的過程中,你應該在testnet模式中運行你的節點,這樣你就可以在沒有損失真金白銀的風險下進行所有的測試。Testnet模式(在以太坊也叫Morden)基本上與真正的以太坊一模一樣,但是這裡的以太幣token沒有任何金錢價值。不要發懶,記得永遠要在testnet模式下開發,如果你因為編程錯誤而損失以太幣,你會非常後悔的。

在testnet模式下運行geth, 打開RPC伺服器:

geth --testnet --rpc console 2&>&> geth.log

這會打開一個你可以輸入基本口令來控制你的節點/客戶端的控制器。你的節點會開始下載testnet區塊鏈,你可以在eth.blockNumber上查看下載進度。區塊鏈下載的同時,你仍然可以運行口令。比如,讓我們設置一個賬戶:(千萬要記住密碼!)

&> personal.newAccount()
Passphrase:
Repeat passphrase:
"0xa88614166227d83c93f4c50be37150b9500d51fc"

讓我們發送一些以太幣過去並且查詢餘額。你可以從這裡獲得免費testnet以太幣:https://zerogox.com/ethereum/wei_faucet. 只需複製粘帖你剛剛生成的那個地址,這個水龍頭就是給你發送一個以太幣。想要查詢餘額,運行以下代碼:

&> eth.getBalance(eth.accounts[0])
0

它會告訴你沒有餘額因為你還沒有與全網路同步。在你等待的同時,去testnet block explorer去查詢一下餘額。那裡,你也可以看到testnet目前最高的塊數(寫這個的時候是#1355293),你可以將這個信息與eth.blockNumber的信息結合去判斷你的節點是否已經完成同步。

一旦你的節點同步好,你就可以開始通過Truffle在testnet上部署你的合約了。首先,解鎖你的主geth賬戶,這樣Truffle就可以使用它。確認裡面有一些餘額,否則你將不能夠把新的合約推向網路。

&> personal.unlockAccount(eth.accounts[0], "mypassword", 24*3600)
true
&> eth.getBalance(eth.accounts[0])
1000000000000000000

準備好了吧!如果這兩個的某一個無法運行,檢查之前的步驟以確保你正確的完成了它們。現在,運行:

$ truffle migrate --reset

注意這次會需要更長的時間來完成,因為我們是在連接到真正的網路而不是一個用testrpc模擬出來的網路。一旦完成,你就可以用之前同樣的方法跟智能合約互動。

在testnet上部署的版本ProofOfExistence3可以在這個地址找到:0xcaf216d1975f75ab3fed520e1e3325dac3e79e05.

我想把如何在以太坊現場網路部署合約的細節留給讀者。你只應該在模擬網路和testnet大量測試你的合約之後再做這個。千萬記得,任何編程錯誤都可能導致在livenet上的金錢損失!

以太坊中智能合約的安全性問題很具有挑戰性。參見 Emin Gun Sirer的 「智能合約挺難弄對的」。

考慮到智能合約是定義金錢如何移動的電腦代碼的性質,我不得不在安全問題上稍做提示。我會在以後的文章里深度的討論合約安全性問題(像這裡),但是這裡我會先簡單的提幾點。

一些你應該知道(並且避免)的問題:

重入攻擊(reentrancy):不要在合約里使用外部調用。如果迫不得已,確保它是你做得最後一件事。

發送失敗(send can fail):發送資金時,你的代碼應該為發送失敗的情況做好準備。

循環可能引發汽油限制(Loops can trigger gas limit):當你在狀態變數上做循環的時候千萬當心,變數的大小會增長這可能導致汽油消耗到達極限。

調用棧深度限制(Call stack depth limit):不要使用遞歸,記住任何調用都可能因為調用棧到達極限而失敗。

時間戳依賴性(Timestamp dependency):不用在代碼的關鍵部分使用時間戳,因為礦工可以操縱它們。

這些是智能合約中可能導致資金盜竊以及毀壞的一些意外行為的例子。中心思想是:如果你在撰寫智能合約,你就在寫真正處理金錢的代碼。你應該加一萬個當心!寫測試,反覆檢查代碼,並且做代碼審核。

避免明顯安全問題的最好方法就是對語言有扎紮實實的理解。我建議熟讀Solidity文檔,如果你有時間。我們將會需要更多更好的工具來完善智能合約安全。


參考路徑如下:

1. 閱讀區塊鏈相關的資訊,對區塊鏈整體有個了解

2. 選擇一個區塊鏈項目(大部分都是開源的,基本上在GitHub上都能找到)

3. 本地調通,能寫能讀,可以先不管原理怎樣,重要的是建立整體概念

4. 分析代碼,梳理請層次結構與模塊,理解代碼

5. 嘗試修改代碼

至於你說對編程語言,C++,Java,Go,Python等主流的編程語言都是可以的,有的區塊鏈項目擁有多個語言版本

--------------------

微信公眾號:區塊英雄鏈


很多軟體都是基於C++或者java的,類、面向對象的東西

這裡有一個技術教程,感興趣由此展開慢慢探索: 區塊鏈技術(三):智能合約入門


請關注小蟻5月即將發布的智能合約2.0,支持多種編程語言~


不邀請自答!

區塊鏈學習更多的是去理解這種去中心化的思想和去中心化的價值所在,語言倒是其次的東西。

不過由於以太坊和Hyperledger Fabric 對go語言支持最好,所以go語言肯定是要學習的。

下面把我另外一個問題的答案copy過來,希望對你有所幫助。

背景介紹:本人從2015年開始研究區塊鏈技術,也算是對區塊鏈有一定的了解吧。

申明:預估看到本問題的知乎er應該都是想要入門區塊鏈,那麼本回答也主要是進行一個入門級別的介紹。只是入門級別介紹,不適合區塊鏈從業人員提升學習。

-----------------------------------

回答的目錄如下:

一、區塊鏈是什麼?

二、從業務角度學習區塊鏈技術?

三、從技術角度學習區塊鏈技術?

四、學習資料推薦與共享?

-------------------------------------

一、區塊鏈是什麼?

區塊鏈有很多的定義,大家的說法都不一樣,業界都還沒有統一。每個人心中都有自己的哈姆雷特。所以此處就不做定義了。也可以參考其他回答。

那麼我主要推薦一些關於區塊鏈概念的學習資料,看完我所推薦的資料,你應該對這門技術有一個自己的了解:

預備知識:

00.一個故事告訴你比特幣的原理及運作機制:

01.區塊鏈是什麼 | 巴比特

正式學習:

01.中本聰的關於比特幣的白皮書。

英文原版:Bitcoin: A Peer-to-Peer Electronic Cash System(https://bitcoin.org/bitcoin.pdf)

中文翻譯版本:比特幣白皮書:一種點對點的電子現金系統(比特幣白皮書:一種點對點的電子現金系統 | 巴比特)

這份白皮書是區塊鏈的起源,也是區塊鏈從業人員必須要看的。

02.普林斯頓大學的公開課:

Bitcoin and cryptocurrency: Bitcoin and Cryptocurrency Technologies | Coursera

內容講的很透徹。

密碼學原理,bitcoin的基本概念,共識機制,區塊鏈現狀 ,區塊的應用中問題,包括比較新的側鏈都有講到。

基本也是從業人員必看的。

03.Master Bitcoin這本書:

中文名:《精通比特幣》

英文名:《Master Bitcoin》

我自己之前並沒有在jd/tb/dd/amz找到這本書,所以附上中文電子版本:(鏈接: https://pan.baidu.com/s/1sl7IMz7 密碼: uq7g)侵刪。

這本書極其推薦去看一下,內容由淺入深,基本概念,代碼分析都是有的,密碼學也講的很通俗易懂。

通過以上資料的學習,基本對於區塊鏈就有了一個基本的了解。

二、從業務角度學習區塊鏈技術?

01.工信部的白皮書:

(鏈接: https://pan.baidu.com/s/1bGeBi2 密碼: ctbn)

02.香港金管局的白皮書:

(鏈接: https://pan.baidu.com/s/1mh8sGwK 密碼: 25nh)

03.騰訊關於TRUSTsql的白皮書:

(鏈接: https://pan.baidu.com/s/1bGeBi2 密碼: ctbn)

04.《區塊鏈從數字貨幣到信用社會》--長鋏著作:

長鋏前輩的講解可以說是非常透徹,而且對於未來的展望也很有現實意義。

05.《區塊鏈:定義未來金融與經濟新格局》-張健著作:

作者為火幣網技術副總裁可以說是個奇才,把概念講的非常清楚。

06.世界經濟論壇區塊鏈報告:

(鏈接: https://pan.baidu.com/s/1nuFcpKH 密碼: mbxf)

07.國內證券公司報告:

(鏈接: https://pan.baidu.com/s/1nuFcpKH 密碼: mbxf)

08.美國政府公布的15大區塊鏈醫療研究論文:

(鏈接: https://pan.baidu.com/s/1dFhIRr7 密碼: 3fap)

09.歐洲央行分散式賬本技術報告:

(鏈接: https://pan.baidu.com/s/1dFhIRr7 密碼: 3fap)

10.其他資料就不太方便共享了:

我覺看了上面推薦的這些書和報告,你應該從業務角度對於區塊鏈技術有了一個比較深入的了解了。

三、從技術角度學習區塊鏈技術?

(一)、基礎階段:

01.《區塊鏈開發指南》-作者申屠青春:

作者多餘比特幣底層的研究可謂是非常深入,講解的也非常通俗易懂。

02.《區塊鏈技術指南》-作者鄒均:

作為國內第一本從技術角度講解區塊鏈的書籍,值得一讀,2016年出版以來一致評價不錯。

03.《區塊鏈 原理、設計與應用》-作者楊保華陳昌:

陳昌前輩作為紙貴的CTO、記得之前的墨鏈就是基於Hyperlerger Fabric的,所以這本書對於Hyperlerger 相關開源產品的講解很透徹。

(二)、以太坊部分:

04.以太坊介紹:

官網:Ethereum Project

中文學習社區:EthFans | 以太坊愛好者

GitHub:ethereu

05.以太坊白皮書:

中文版:EthFans | 以太坊愛好者

05:Solidity語言(以太坊開發推薦語言):

官網:Solidity - Solidity 0.4.19 documentation

06.web3.js(與以太坊交互的js api):

網址:https://github.com/ethereum/web3.js

論壇:web3-js

07.truffle框架:

官網:TruffleFramework.com - Truffle Suite

以太坊開發的瑞士軍刀,幾乎是一站式解決方案。

08.Open-zeppelin合約審查:

官網:OpenZeppelin

09.《Ethereum: Blockchains, Digital Assets, Smart Contracts, Decentralized Autonomous Organizations》:

沒有中文版,只有亞馬遜有賣

(三)、Hyperlerger 開源項目學習:

01.Hyperlerger基本信息:

官網:Home

02.Fabric 學習:

官網:Hyperledger Fabric

(四)、其他:

01.BigchainDB:

官網:BigchainDB ? ? The scalable blockchain database powering IPDB.

這個是我比較看好的一個項目

02.IPFS:

官網:IPFS is the Distributed Web

這個據說是一個取代http的價值傳輸協議,比較看好

03.國內的布比:

官網:布比區塊鏈,讓數字資產自由流動起來

個人認為值得研究

《區塊鏈技術原理與底層架構》這本書有詳細講解布比的技術實現。

四、學習資料推薦與共享?

圖文教程:

  • 在CentOS 6.5上搭建以太坊私有鏈
  • 創建自己的私有比特幣測試鏈
  • 以太坊智能合約編寫實例
  • 以太坊智能合約編程之菜鳥教程
  • 通過truffle部署以太坊智能合約
  • Hyperledger 源碼分析之 Fabric
  • programming blockchain in c#

  • Nodejs開發加密貨幣
  • 精通比特幣
  • 區塊鏈技術指南
  • 區塊鏈:定義未來金融與經濟新格局
  • Hyperledger 源碼分析之 Fabric
  • programming blockchain in c#
  • csdn的blockchain知識庫
  • History of cryptography
  • 公鑰與私鑰
  • 什麼是橢圓曲線加密(ECC)
  • 比特幣背後的密碼學原理
  • 密碼學一小時必知
  • 現代密碼學實踐指南
  • SafeCurves:choosing safe curves for elliptic-curve cryptography

希望以上答案可以對你有所幫助!

後期有時間再更新!


懂那個先用那個看懂邏輯,幾選一,感覺比較常見的python,js,go,Solidity 幾選一。可能要計算性能的地方會用c++。


以太坊:

以太坊具有四種專用語言:Serpent (受Python啟發)、 Solidity (受JavaScript 啟發)、 Mutan(受Go 啟發) 和 LLL (受Lisp 啟發),都是為面向合約編程而從底層開始設計的語言。Solidity是以太坊的首選語言,正處於緊張開發中,它內置了Serpent的所有特性,但是語法類似於JavaScript,這樣一來降低了學習門檻,易於被掌握和使用,因為JavaScript是Web開發者的常用語言。

比特幣:

C++為主

ripple:

還是C++為主

總結:

現有的產品,除了像lisk這種用純javascript,其他幾乎都是用C++寫區塊鏈底層。

以太坊的話可以用solidity試著寫智能合約,可能會用到web3等庫。

solidity教程:Solidity by Example

希望能幫到你


針對這塊談一下我的感受,如有不妥希望大家多提意見。

區塊鏈是一種通信協議,採用單鏈的數據結構,和點對點的網路結構。

翻譯下我自己,從後往前。

所謂點對點的網路結構,可以想像一下與之相反的中心化網路結構,也就是日常里應用最廣泛的傳統網路結構,一個交換機一台伺服器帶了一堆客戶端,在區塊鏈的網路結構里取消了這個交換機和伺服器,完全是各個客戶端之間完成數據的通信。

所謂單鏈的數據結構,算是數據結構裡面非常簡單的了。可以先想像一下樹狀的數據結構,一個父節點可能衍生出好多子節點。而區塊鏈的數據結構像一個火車一樣把各個節點連接在一起,後面的子節點只連接前面的父節點。火車頭就是所謂的創世快,又創始人建立。

而區塊鏈是一種通信協議的實現,他規定了每個客戶端之間通信的方式,在區塊鏈的網路裡面,所有人都遵守同樣的規定,也就確保了通信的可靠性。每隔一段時間,各個客戶端協力按照單鏈的數據結構,把這段時間裡面的所有通信的內容整理成塊,慢慢就形成了一個長長的鏈條,就是區塊鏈。

在這張網上面傳什麼,成了區塊鏈應用的主要研究內容。最著名的應用就是比特幣,在比特幣的世界裡區塊鏈只傳交易信息,是個大賬本。如果我們把交易信息擴展為其他你想傳的信息,比如車輛,個人信用… 那就成為了區塊鏈其他方面的應用。

明白了以上,來看看樓主想要的編程語言。編程語言只是翻譯計算機指令的一個工具,況且絕大多數的語言都是跨系統的,所以選擇一個平時學的好的,只要遵循區塊鏈的協議規定,是沒有差別的。

這麼說有點不負責任了,學習區塊鏈是可以從比特幣開始。Python的bitcoin庫是個不錯的選擇,從入門角度相比C,CPP我覺得代入感更強一些。


目前最為主流的幾個區塊鏈平台有比特幣,以太坊,隸屬於hyperledger下的fabric以及國產的hyperchain這麼幾個。除了比特幣是由c++開發的,其餘幾個最主流坊客戶端均有go語言開發。如若對區塊鏈有興趣的話,不妨關注一下以上幾個項目


要懂區塊鏈先懂比特幣,至於用什麼編程語言,這個要看你選擇什麼樣的開發平台。


做區塊鏈開發,你是準備自己從頭開發,還是藉助於其它平台,第一個不說,只要能寫出來什麼語言都可以,第二個看你藉助什麼平台,如果藉助依然方就去學以太坊智能合約程式語言Solidity,如果你藉助Lisk或者ASCH就去學JavaScript,語言並不是首要因素。


技術入門與語言無關。


什麼是區塊鏈技術?每一個行業的人士理解不一樣,相關的解釋也因為現實應用越來越多而漸漸浮出水面,隨著這種區塊鏈技術的普及,相關的成果也是越來越大。我們要想理解這種技術就要從現實當中去深入的了解。

區塊鏈要實現替代現存的關係型資料庫系統的目標,首先要參考當前關係型資料庫的設計,實現標準化。何不基於結構化查詢語言(SQL)模型來創建區塊鏈查詢語言(BQL)呢?比如,在應用層和區塊鏈底層數據框架之間創建標準化和可重複使用的介面,這樣就更加容易理解了。

這就意味著,忽略特殊的區塊鏈解決方案中的底層細節,使用底層數據類型和語法來進行標準化BQL操作。舉個例子,最可能的設計是這樣,我們需要CREATE、INSERT、SELECT和VERIFY這樣的BQL命令,來實現這樣的功能:創建區塊,把區塊插入區塊鏈中(包括達成一致),從區塊鏈中選擇符合特定條件的區塊,驗證區塊的一致性。當然這只是一個建議,具體的最終語言標準可能會實施不同的或相似的語句來實現不同的語義。

存儲於區塊內部的底層支付載荷的語法(如對指定和移動公鑰間數字資產的描述)也應該標準化,和BQL命令無縫結合。支持密碼學操作和語法,集合驗證和授權能力,這些都應該包含進BQL標準。

顯然,這些可能性僅僅受限於BQL設計者的想像力和底層開發者工具的複雜度,還需要編譯器架構,可以把BQL命令的應用層編譯進應用商低級別API中(就像「R」指令或其它的)。

就像現存的SQL語言,BQL在應用中可以使用兩種方式,靜態的(預先編譯過的)和動態的。這些是公司化的區塊鏈開發社區快速發展的必要條件,這些讓實施BQL的區塊鏈應用更加有競爭力。這些標準化的實施,也可以激發軟體開發商們對區塊鏈技術創新的潛能,使他們可以提供基於區塊鏈技術的組件框架和各種相關工業的資源庫,這些組件框架和資源庫不受制於區塊鏈底層平台。

從開發者角度來看

布比區塊鏈已經應用於股權、供應鏈、積分等領域,並正在與交易所、銀行開展試驗和應用測試。布比區塊鏈專註於區塊鏈技術和產品的創新,已擁有多項核心技術,開發了自有的區塊鏈服務平台。而且很多區塊鏈創新創業企業不斷湧現。

我們先要仰望星空,展望未來,互聯網的未來形態將是物聯網,在物物相聯時代,每一個設備都是交易主體和決策主體,交易的三大元素會徹底變化,第一,交易的主體將從人或者法人變為設備,各種各樣的設備、器件等智能物體點對點之間的交易。第二,交易的內容發生變化,現在的內容是基於資產的產權,未來交易的內容將是設備、資產的使用權和收益權,其載體將是信息,資產既包括有形資產,更主要將是無形資產,比如各種生產生活過程中產生的數據。

第三,由於交易主體、內容發生變化,交易的顆粒度也將發生巨大變化,現在以人或者法人為主體的交易體系每天交易100次已經很多,但在未來物聯網時代,設備和設備之間一天之內發生的交易可能是幾十萬次,同時交易的價值顆粒度也會發生很大的變化,每一次基於數據的交易價值顆粒度可能是幾毫甚至是萬分之一元,在物聯網時代,新的價值單位會變得非常小。

商業的基礎就是交易,所以隨著交易的三大元素,發生天翻地覆的變化,未來商業、金融業,以及我們習以為常的整個生產關係都會隨之發生天翻地覆的變化,當然這個變化並不是一蹴而就,而是潛移默化,就是說等到這個變化十年之後成型之後我們可能早就習慣了,但是每一次潛移默化的生產關係革命背後都將有新興的商業生態和企業出現。

仰望星空後,我們再來腳踏實地的看看眼下。現在整個中國經濟,我們生產、生活中面臨最大的問題在哪裡?在於信,誠信立國的口號喊了那麼多年,但是整個社會的誠信越來越差,現在不僅民企,甚至很多的國企都開始違約。李克強總理在今年兩會的時候提出一個天問,如何證明「你媽是你媽」,中國號稱現在已經按PPP(平價購買力)計算世界國民生產總值第一的國家,但是因為缺乏信任,平添了海量生產生活成本。

舉個例子,一個非京籍的學生在北京入學要提供30多個證件,各種各樣的證件,就是為了證明這個孩子是這個孩子,其實我們類似的情況每天生活中都有發生,坐飛機為什麼拿身份證看,不就是為了證明你就是你嗎?我們因為缺乏信任導致每年有海量成本浪費了,更何況還有大量的其他的問題。

所以說從這個角度來說,我們需要新的解決方案,上帝總是眷顧人類的,每次碰到大的問題總會有新的問題出現,問題永遠是催生答案的第一要素。

這個答案,就是區塊鏈。區塊鏈作為一種新的技術範式,它帶來的生產力革命將超過所有人的想像。

我把區塊鏈看作三層,第一是技術,賬本、密碼學、認證機制。第二是商業模式,基於區塊鏈重構的商業生態圈,就好象互聯網出來之後大量的傳統商業模式被阿里騰訊這樣的企業顛覆。第三是哲學,是理念,任何一種生產力的革命,最後必然會被抽象、升華,成為形而上的生產關係。區塊鏈同樣如此,我一直研究基於區塊鏈對整個社會的生產關係解構之後,如何重新建構,之後我們稱之為區塊鏈網路動力學機制。

區塊鏈技術及其應用有如下幾個特點,分散式、扁平化、強制信任、集體維護、可靠資料庫,開源、隱私保護,這些技術特徵集合在一起,就會對現在很多習以為常的概念和商業模式,很多習以為常的模式,產生顛覆性的變化,比如說金融,銀行的角色是什麼?交易所的角色是什麼,各種各樣的中介的角色是什麼?區塊鏈會讓我們把很多現在已經習以為常的各種各樣的概念、理念和模式解構,然後再重新基於區塊鏈網路動力學重構。

區塊鏈剛才講了,這樣一個技術特點,但是區塊鏈本身作為一種新的技術範式,以及建築於技術上面的商業模式,本身在進化、發展、分化。

兩個維度介紹,第一個維度是許可權,區塊鏈作為一種新的資料庫布局架構,必然有自己的開放許可權,現在已經出現了基於私有鏈、聯盟鏈和公有鏈的平台,以及立足於平台上的應用。

2016年值得關注

布比區塊鏈專註於區塊鏈技術和產品的創新,已擁有多項核心技術,開發了自有的區塊鏈服務平台。以去中心化信任為核心,致力於打造開放式價值流通網路,讓數字資產都自由流動起來。布比要做的是一項新的技術和產品——實現真正的價值流通,使得互聯網到達一個新的高度。如果有了這個技術的應用,在轉移資產的時候就可以沒有中心機構了,可以實現我們之間資產的直接轉移。

區塊鏈能夠驅動新型商業模式的誕生。

區塊鏈技術的特點讓它能夠實現一些在中心化模式下難以實現的商業模式。比如在物聯網產業,已經有機構提出要使用區塊鏈技術管理上百億個物聯網設備的身份、支付和維護任務。利用區塊鏈技術,物聯網設備生產商能夠及大地延長產品的生命周期和降低物聯網維護的成本。

區塊鏈技術具有靈活的架構。

根據不同的應用場景和用戶需求,區塊鏈技術可以劃分為公有鏈、私有鏈和聯盟鏈幾大類型,可根據機構的實際用途進行選擇。

區塊鏈技術是實現共享金融的有利工具。

共享金融的本質是通過減少金融信息的不對稱性,從而實現金融資源優化配置的目的,並通過嚴格的第三方認證和監督機制,保證交易雙方權益的落實,促成交易達成。通過使用區塊鏈技術,金融信息和金融價值能夠得到更加嚴格的保護,能夠實現更加高效、更低成本的流動,從而實現價值和信息的共享。

鏈技術的開放性鼓勵創新和協作。

通過源代碼的開放和協作,區塊鏈技術能夠促進不同開發人員、研究人員以及機構間的協作,相互取長補短,從而實現更高效、更安全的解決方案。近年來,已有不少海外金融機構和商業機構嘗試用區塊鏈技術進行商業模式的改進,在中國,儘管這一技術尚未得到廣泛的認知和應用,但是已經開始引起越來越廣泛的重視,其影響力正在快速增強。現在區塊鏈技術已經被視為下一代全球信用認證和價值互聯網的基礎協議之一,區塊鏈技術對我國金融產業和金融體系的重要性同樣不容忽視。

當然,我們必須知道區塊鏈技術的發展在全球範圍內還都尚處在早期階段,各種技術方案、應用場景和商業模式等還需要進一步地探索和完善。特別是在我國,區塊鏈作為一個全新的概念和理論,人們的認知、研究和實踐剛剛起步,要想在這一領域彎道超車,趕超先進,引領世界,還需要足夠的重視,更多的投入,需要理論研究者、網路技術者、金融從業者,以及監管部門的積極投入和良性互動,勇於探索和創新。

什麼是區塊鏈技術?人們會從更多的角度認識到區塊鏈技術,在現實當中起到的作用也是越來越大,並受到眾多機構的支持,從而讓區塊鏈在現實當中的普及進入到一個全新的應用階段。


語言並不是關鍵點,懂得原理以後,可以用各種語言實現,比如 Gavin Wood 在離開以太坊以後,用 Rust 寫了 paritytech/parity 。

目前我也在進行區塊鏈的學習與研究,並翻譯了 Jeiwan/blockchain_go 的系列文章,譯文在這裡: liuchengxu/blockchain-tutorial 。其實有很多介紹原理的簡化版實現[1][2][3][4][5],有的用 JavaScript,有的用 Python。這個 go 版本系列是我認為難得的麻雀雖小,五臟俱全,從基本的區塊,區塊鏈,交易,地址,工作量證明,持久化,網路等都有介紹。有代碼,有分析,雖是簡化後的原型實現,卻也不至於那麼的「乞丐版」。

目前已經完成基本翻譯,後期有時間的話,我打算結合更多資料進行整合豐富,比如 &<&< Mastering Bitcoin &>&>,區塊鏈是底層技術,比特幣應該是它第一個成功的應用,這本書是入門經典,歡迎批評指導。

[1] https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54

[2] https://medium.com/crypto-currently/lets-build-the-tiniest-blockchain-e70965a248b

[3] https://medium.com/crypto-currently/lets-make-the-tiniest-blockchain-bigger-ac360a328f4d

[4] https://hackernoon.com/learn-blockchains-by-building-one-117428612f46

[5] https://medium.freecodecamp.org/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d


區塊鏈項目主要以c++,go等語言為主,為什麼?第一,性能問題,尤其是並發上面。第二,強類型語言能在編譯階段避免很多錯誤,這點很重要,至於開發效率這並非首要考慮的因素。

比特幣是所有區塊鏈項目中相對簡單的,但不建議初學者閱讀bitcoind的源碼,可以看go實現的版本btcd,btcd在代碼結構上做了大量優化,閱讀起來更方便,而且很容易運行單元測試。


如果是純小白,可以看比特幣是什麼

如果多區塊鏈有一點了解,但又不是很明白,可以看這幾篇:區塊鏈記賬原理,比特幣所有權及隱私問題,比特幣如何挖礦,比特幣腳本及交易分析,分析比特幣網路

對原理有一些了解之後,就自己動手試著寫一個區塊鏈了,你可以參考:用Python從零開始創建區塊鏈,簡單的區塊鏈Go實現,你可以使用你熟悉的任何語言來實現。

如果只是想入門開發智能合約,那就學習Solidity,可以看以太坊開發入門


當前區塊鏈基礎協議的編程語言主要以C++、Go語言等為主,當然,其他的各種小語言也是存在的,比如說Corda的Kotlin。在介面接入及外圍工具方面,語言的類型就更加多了,其核心實質是提供http訪問介面,具體用用么語言進行訪問,就看個人喜好了。

作為技術入門,首先應該有一種自己熟悉的編程語言,作為實操的基礎,另外一方面要重點研究其技術原理,萬變不離其宗。


還是看書來得快,推薦《區塊鏈 技術驅動金融》,和編程語言沒有必然聯繫


報告看點梳理:

①什麼是區塊鏈?區塊鏈如何工作?

②區塊鏈的四大特徵和優勢是什麼?

③區塊鏈的三大類型和發展歷程

④核心技術、基本應用兩大產業鏈布局,更細化共識機制、數據存儲、智能合約等完整產業鏈分支

⑤82家關聯企業介紹及融資信息詳情

原文鏈接:區塊鏈行業研究報告(附82家關聯企業介紹)

區塊鏈服務允許個人之間直接互聯、共享和交易,進入真正的共享經濟。區塊鏈是一個實現真正的對等交易和「共享經濟」的平台。

區塊鏈技術的應用場景

區塊鏈技術對許多行業而言是一種強大的顛覆性技術,因為它能更順利、更高效地組織活動。而且它能協調參與者之間更大規模的組織活動。區塊鏈已在幫助重塑各種各樣的行業領域,比如金融、醫療和政府。

下面給出了區塊鏈帶來的無限可能的樣本:

1、物聯網

貨物運輸:通過多家運輸公司轉移貨物,確保透明性和及時送達

組件跟蹤和合規性:存儲原件和用於車隊維護的替換部件的來源記錄

記錄運營維護數據:存儲運營和維護記錄,以便在業務合作夥伴之間共享或將 它們用於監管

2、身份管理

構建值得信賴的數字身份

3、供應鏈

提高食品安全網路中的可跟蹤性、透明性和效率

4、金融服務

了解您的客戶:訪問可信的最新客戶信息,這能提高金融機構中的客戶服務的準確性

清算和結算:在金融機構之間實時點對點轉移資金,這可以加速結算

更多示例:信用證、公司債務和債券、貿易平台、支付匯款、回購協議和外匯

5、醫療保健

電子醫療記錄

病毒庫

醫生-供應商RFP服務和保險合同

區塊鏈健康研究共享空間

區塊鏈健康司法人員

6、保險

索賠處理

P2P保險

所有權

銷售和承保

7、政府

政府招標程序

選舉

稅收

8、遊戲音樂及其他

關於區塊鏈的知識問答

問:區塊鏈和比特幣是什麼關係?比特幣就是區塊鏈嗎?

答:區塊鏈技術是比特幣的底層技術,在早期並沒有太多人注意到比特幣的底層技術。但是當比特幣在沒有任何中心化機構運營和管理的情況下,在多年裡非常穩定的運行,並且沒有出現過任何問題。所以很多人注意到,該底層技術技術也許有很大的機制,而且不僅僅可以在比特幣中使用,也許可以在許多領域都能夠應用這種技術。於是把比特幣技術抽象提取出來,稱之為區塊鏈技術,或者分散式賬本技術。

所以從某個角度來看,比特幣可以看成是區塊鏈第一個應用,而區塊鏈更類似於TCP/IP這樣的底層技術,以後會擴展到越來越多的行業中。

問:什麼是比特幣說的「挖礦」?

答:比特幣中的「挖礦」實際上就是記賬的過程,比特幣的運算採用了一種稱為「工作量證明(Proof of Work,PoW)」的機制,系統為了找出誰有更強大的計算能力,每次會出一道數學題,只有最快解出這道題目的計算機才能進行記賬。而搶到記賬權的計算機會獲得25個比特幣的獎勵。通常把這個行為稱為「挖礦」,把獲得的比特幣視為挖礦成功獲得的獎勵。

問:比特幣總量有上限嗎?是怎麼分配的?

答:如同前面所說,礦工參與爭奪記賬權是有機會獲得獎勵的。在開始的時候是每10分鐘系統會獎勵記賬最快最好的人50個比特幣,然後這50個每四年減半,差不多在2140年的時候就不再有新的比特幣出現,將會達到2100萬個的上限。在這之後,將會使用交易手續費來獎勵礦工。

完整版報告及關聯企業介紹鏈接請戳鏈接:區塊鏈行業研究報告(附82家關聯企業介紹)


推薦閱讀:

如何評價小蟻股最近的瘋漲?
請問區塊鏈的技術路線是怎麼樣的,如何系統學習區塊鏈?
如何理解區塊鏈技術的本質的?它和傳統技術相比又有什麼樣的優勢?
如何學習區塊鏈技術?

TAG:編程 | 比特幣Bitcoin | 區塊鏈Blockchain |