顯示具有 Ethereum 標籤的文章。 顯示所有文章
顯示具有 Ethereum 標籤的文章。 顯示所有文章

2018年10月17日 星期三

(暫存) 追蹤智能合約

之前看到人家說 web3.py 有 bug,好像追蹤不到,不過現在看 issue 似乎是在新版解決了的樣子,之後要找個時間來實驗一下。

不過如果連接的是 infura 的話,因為 infura 不支援 filter event,所以好像無法靠 Contract Events 追蹤。

參考資料
  1. Empty event log #730
  2. Event logs? Am I doing something wrong?
  3. Listen to filtered events using web3js 0.19 (provided by infura)

編譯 Solidity 智能合約

快速紀錄,因為需要讓 web3.py 使用合約,官方的範例是寫說可以用程式碼直接編譯,不過好像需要環境本身的支援,感覺很麻煩 XD。所以直接在 Windows 裝了 Solidity 的編譯程式 solc,然後執行以下的指令(假設要編譯的智能合約的檔名叫做 contract.sol):

solc --combined-json abi,bin contract.sol > contract.json

以上的指令會建立 abi,並把智能合約的原始碼編譯成 hex 表示的字串,然後寫成一個 JSON 檔。JSON 檔的格式大略會長成這樣:

{
	"contracts": {
		"./XXX.sol:XXX": {
			"abi": "....",
			"bin": "...."
		},
		"./OOO.sol:OOO": {
			"abi": "....",
			"bin": "...."
		}
	},
	"version": "0.4.25+commit.59dbf8f1.Windows.msvc"
}

在這個範例中,是假設要編譯的智能合約包含了超過一個合約,也就是智能合約會引用其他智能合約的狀況。因此編譯出來會有很多個合約一起包在這個 JSON 裡,而每個合約都會有 abi 和 bin 兩個 key,反映我們的指令要求的輸出 abi 和 bin。

參考資料
  1. Installing the Solidity Compiler
  2. Ethereum Dapp初心者之路(7): web3.eth.compile.solidity()替代方案

2018年9月6日 星期四

使用 Python 存取 Ethereum:透過 web3.py

想要透過 Python 存取 Ethereum,從 Ethereum 官方的 Github 中可以看到有兩種套件可以達成:web3.py [1] 和 pyethereum [2]。就我目前的理解來說,兩者的差別在於 web3.py 主要是作為外部存取 Ethereum 的客戶端,也就是說 web3.py 函式庫本身不會成為區塊鏈節點,也不會進行區塊鏈同步,而是連接一個區塊鏈上的節點,把區塊鏈當成像是外部資料庫一樣取用而已;而 pyethereum 則比較像是 geth 那樣,是用來把自己做成一個區塊鏈節點,會正常進行區塊同步,也可以作為礦工開始挖礦。

在本篇當中,因為是想要一個輕量級的客戶端來與區塊鏈互動,並不想要準備龐大的儲存空間來存放區塊鏈的資料,因此會以 web3.py 為主。

在 Java 存取 Ethereum 區塊鏈:透過 ethereumj

嗯…標題寫是這樣寫啦,不過其實因為實驗到一半就終止了,因此這篇其實只是留下一點點紀錄而已,並不會真的有完整的範例和說明。

(書籤) Ethereum 的 light client protocol

在一般情況下,Ethereum 的客戶端都需要一定程度地下載區塊鏈上的資料,並在自己的本地端開始驗證、組成現在的狀態
能做的選項頂多也就是 full client 跟 fast sync 的差別。
不過在有 light Client [1] 的情況下就不同了,Light Client 的目的是避免同步 block 的需求,改為去問網路上的其他 client。
但至少到目前為止,light client 還不是一個完全準備好的協定,所以也不是所有 client 都能支援它(雖然說 geth 和 parity 都支援了)。

參考資料
  1. Light client protocol
  2. ethereumj - Add "light client" support

2018年5月15日 星期二

Ethereum 基礎概念與原理

Ethereum 是一種分散式帳本的技術,雖然說大家更熟知的是「以太幣」這個虛擬貨幣~。不過這裡會嘗試從系統工程師的角度來看帶這個技術。

這篇文章大概會寫得有點雜亂,因為這主要是要紀錄一些本來我自己不太清楚的問題。如果需要比較完整、有條理的說明,推薦可以認真看看 [1]。