發表文章

目前顯示的是 2017的文章

使用Web3j 快速實作 Oracle -I建立smart contract wrapper

本篇是在介紹,如何使用Web3j能快速開發Oracle,不用一個一個刻跟ABI互動的function 因為整個ethereum都還在發展中,相關的工具也是,所以變動很快,這邊我使用的是 Web3j 2.3.1 ,搭配 Solidity 0.4.17 不清楚Oracle的,可以參考 這篇 ,寫得相當詳細跟清楚 簡單來說,EVM是一個封閉環境,不可跟外界接觸,不過event(可以想作是一般寫程式的log)是會被寫到鏈上的,寫到鏈上就代表是公開網路,大家都可以去讀取,再透過程式(也就是Oracle)去監聽特地的event。然後smart contract裡的function本來就是可以從外部被執行的。所以就是透過監聽event跟執行smart contract的function,進而從外界可以跟smart contract 做互動。 首先,先撰寫你自己的smart contract,下面這是我從官方copy過來的範例,然後加了兩個event,完整的smart contract可以看 這裡 pragma solidity ^ 0 . 4 . 17 ; contract Ballot { event EventVote ( uint id, address voter, uint time); event EventNewVoter ( address voter); function giveRightToVote ( address voter) { require (( msg . sender == chairperson) && ! voters[voter].voted && (voters[voter].weight == 0 )); voters[voter].weight = 1 ; EventNewVoter (voter); } function vote ( uint proposal) { Voter storage sender = voters[ msg . sender ]; require ( ! sender.voted); ...

如何使用Objective-C 呼叫 JavaScript - Part II 實戰篇

前情提要,如果我需要require其他的套件,像下面這樣,該怎麼辦? "use strict" ;  var   version  =  require ( '../lerna.json' );  var   core   =   require ( '../packages/web3-core' );  var   Eth   =   require ( '../packages/web3-eth' );  var   Net   =   require ( '../packages/web3-net' );  var   Personal   =   require ( '../packages/web3-eth-personal' );  var   Shh   =   require ( '../packages/web3-shh' );  var   Bzz   =   require ( '../packages/web3-bzz' );  var   utils   =   require ( '../packages/web3-utils' ); 最後找到一個方法,不知道是不是唯一,也不知道是不是最好的(歡迎有經驗的人一起分享),我使用了 Browserify 。就我的認知,Browserify就是把require到的檔案,全部打包到一個檔案裡,也就是你最後會有一個幾千行的 .js檔案。 首先,先安裝npm(npm就是Node.js安裝管理工具,如何安裝npm,可以參考 這裏 ) 再來,寫一個 .js檔案,把你需要的套件require進來,然後assign給window這個物件, // index.js "use strict" let Web3 = require ( '../3rd_party/web3.js-1.0.0' ); window . Web3 = Web3 ; 切到index...

如何使用Objective-C 呼叫 JavaScript - Part I 基礎篇

之前工作需要在ios上開發Ethereum 類電子錢包的SDK,(離線狀態)做交易的打包,簽章,呼叫ABI等等之類的,Geth, ethereum.io都有部分達不到我們需求的地方,最後採用Web3.js Objective-C經驗不是很多,JavaScript根本就不會,所以在找solution的過程,吃了不少苦頭。找了不少資料,看到的都是透過這兩種方式呼叫 WebView:JavaScript是寫在html裡的,所以需要多一個html檔案 JavaScriptCore:直接呼叫 .js檔案,類似node.js的方式,比較直接 網路上的範例大概都長得像這個樣子,直接把功能寫在html裡 <html> <head> <script> function myFunction () { alert ( "Hello World!" ); } </script> </head> <body> <button onclick = " myFunction () " > Try me </button> </body> </html> Objective-C的部分大概長得像這樣, 一定要在有UI的檔案裡 // @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 先取得html檔案路徑,使用webview loads html NSBundle * thisBundle = [ NSBundle mainBundle ]; NSString * path = [ thisBundle pathForResource :@ "first" ofType :@ "html" ]; N...

使用Grafana 作為 Prometheus 的操作介面(二) 操作篇

圖片
環境  - Ubuntu 16.04  - Kubernetes 1.6  - Prometheus 1.6  - Grafana 4.2.0 啟動完後,接下來就是在Grafana上生出一個Prometheus的dashboard Creat a dashboard 首先,連到安裝Grafana的node 如果照前一篇的設定,port會是 30603 ,然後點下" Add data source " Name 可自行取 Type 選取 Prometheus Url 輸入Prometheus 那台的ip,記得port是 30900 最後,按下 Add ,系統同時會測試有沒有成功。如果沒成功,確認ip, port或是 Access 換成 proxy 試試看 依照圖的順序,就可以看到dashboard Notification Channels 在連到dashboard之前,我們先來設定Notification Channels,也就是,發生問題後,要用什麼方式通知,然後要找誰 點下左上方Grafana的圖示,會有選單,點選 Alerting 中的 Notification channels 點選 New Channel 後,會跑到以下頁面 Name 一樣取個好辨別的名字 Type 這裡有很多方式,如Line, Slack, Email...等,我們以email作為例子 Email addresses ,輸入email的名單,如有多個,用 ; 區隔 在 Save 前,可以先按 Send Test 測試,確認你的設定都是OK的 Set Alerts 再來回到Dashboard, 選擇某個圖表,進入編輯 選擇 Alert 這個tab,在左邊按下 Create Alert 然後就會長出來Alert的設定,這邊就是看每個服務的需求而設定 條件設定完之後,點選左邊的 Notifications ,就是當Alert的條件觸發,要去找誰 Send to  就是剛剛Notification Channels新增的name Message  顧名思義就是要留的訊息 完成後,就得要存檔喔!Grafana沒...