因為看到 Uber 說從 PostgreSQL 轉移到 MySQL 的原因之一是 PostgreSQL 的 immutable tuple 造成了問題,所以先紀錄一下看到的相關資料….。
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註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):
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。