因為看到 Uber 說從 PostgreSQL 轉移到 MySQL 的原因之一是 PostgreSQL 的 immutable tuple 造成了問題,所以先紀錄一下看到的相關資料….。
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification.
- Bertrand Meyer
Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems.
- Charles Connell
註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2018年10月31日 星期三
2018年10月28日 星期日
2018年10月23日 星期二
在 Spring Data JPA 中使用 AUTO_INCREMENT
快速紀錄~使用 @Id 和 @GeneratedValue 就可以用自動遞增的 Primary Key 了。不過如果不想要讓 Hibernate 自己產生 ID,而是直接靠資料庫自行產生的話,可以設定 @GeneratedValue 的屬性 strategy = GenerationType.IDENTITY。
參考資料
2018年10月17日 星期三
(暫存) 追蹤智能合約
之前看到人家說 web3.py 有 bug,好像追蹤不到,不過現在看 issue 似乎是在新版解決了的樣子,之後要找個時間來實驗一下。
不過如果連接的是 infura 的話,因為 infura 不支援 filter event,所以好像無法靠 Contract Events 追蹤。
參考資料
編譯 Solidity 智能合約
快速紀錄,因為需要讓 web3.py 使用合約,官方的範例是寫說可以用程式碼直接編譯,不過好像需要環境本身的支援,感覺很麻煩 XD。所以直接在 Windows 裝了 Solidity 的編譯程式 solc,然後執行以下的指令(假設要編譯的智能合約的檔名叫做 contract.sol):
1 |
solc --combined-json abi,bin contract.sol > contract.json |
以上的指令會建立 abi,並把智能合約的原始碼編譯成 hex 表示的字串,然後寫成一個 JSON 檔。JSON 檔的格式大略會長成這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "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。