如何開發一款以太坊安卓錢包系列3
這是如何開發以太坊(安卓)錢包系列第3篇, 錢包賬號資產資訊展示,展示資訊主要包括賬號地址、eth餘額及該賬號所擁有的Token及餘額。
預備知識 MVVM
本文會涉及和UI介面的互動,提前理解下介面和資料如何互動是非常有必要的,如果你已經很熟悉MVVM,可跳過這一小節。
最早寫Android的時候,資料和介面經常耦合在一起,一個Activity檔案總是特別大,每當產品介面改版就非常痛苦,吐槽下,很多產品經理都喜歡對介面改來改去。
後來Google 推薦多個架構模式: MPV、 MVVM模式來解決資料和UI耦合的問題,登鏈錢包程式碼,使用的就是MVVM模式,所以對它做一個簡單介紹,下面是MVVM的檢視和資料的互動圖:
View 通常對應於Activity/Fragment/自定義View Model:則是和資料相關的模組。
View 與 Model 不直接發生聯絡, 而是通過ViewModel負責接收View層的事件以及獲取並處理資料,ViewModel層的資料變化也會通知給View層進行相應的UI的更新,從而實現業務邏輯和Ui的隔離。
使用MVVM模式最大的優點就是解耦, 因為資料處理邏輯是獨立於View, 在UI更改時,ViewModel 不用做太多改動。
我們使用了Google在I/O大會推出的一套遵循MVVM開發模式的LiveData和ViewModel元件架構。
ViewModel 和 LiveData
ViewModel 會關注UI生命週期來儲存和管理資料,在Activity發生變化(鎖屏開屏、旋轉)時,ViewModel 會自動保留之前的資料並給新的Activity或Fragment使用,當介面被系統銷燬時,ViewModel也會進行資源清理,避免記憶體洩漏。
ViewModel 還可以用於不同介面間資料共享。
LiveData是一個可觀察的資料持有者類。觀察者可以方便我們以非同步的方式獲取資料,同時LiveData也是有生命週期感知的。如果其生命週期處於STARTED或RESUMED狀態。LiveData會將觀察者視為活動狀態,並通知其資料的變化。LiveData未註冊的觀察物件以及非活動觀察者是不會收到有關更新的通知。
瞭解更多,可自行以關鍵字: Lifecycle、ViewModel、LiveData 進行搜尋。
賬號資訊展示
展示資訊主要包括賬號地址、eth餘額及該賬號所擁有的Token及餘額, 其介面效果如下:
這個介面應的是登鏈錢包的
PropertyFragment
,上圖的UPT 是我自己發行的Token,所以沒有顯示價格
現在我們來思考一下, 怎麼來展現上面的資料, 彆著急往下看, 可以先想想。
先對問題做一個拆分,把資料拆分為4個部分:
- 顯示當前選中的賬號
- 顯示當前賬號 ETH 餘額
- 顯示當前賬號下 Token 數量
- 顯示對應的法幣金額。
為了避免 UI 與上面4個數據的耦合,程式碼使用了一個TokensViewModel
, 獲取到的資料用 LiveData做了一個Wrap,以便UI可以訂閱資料,TokensViewModel類像下面,程式碼有刪減:
public class TokensViewModel extends ViewModel {
private final MutableLiveData<ETHWallet> defaultWallet;
private final MutableLiveData<NetworkInfo> defaultNetwork;
private final MutableLiveData<Token[]> tokens;
private final MutableLiveData<Ticker> prices;
}
MutableLiveData
是前面提到的 LiveData的子類,在UI介面中就可以對資料進行訂閱,下面我們逐一拆解下每個資料。
顯示當前賬號
可以分為兩個步驟:
- 從資料庫中讀取賬號;
- 介面顯示賬號
TokensViewModel中定義了一個MutableLiveData<ETHWallet> defaultWallet
,從資料庫中讀取賬號會儲存在defaultWallet中,然後UI對 defaultWallet 進行觀察顯示。
註解: 登鏈錢包 裡大量使用的這個方式,通過一個LiveData 做資料橋接。
在上一篇匯入賬號及賬號管理,所有的賬號使用greenDao 儲存起來, 因此我們只需要把所有賬號從加載出來,挑選出當前選中的那一個。 結合程式碼看一看:
// WalletDaoUtils.java
public static ETHWallet getCurrent() {
List<ETHWallet> ethWallets = ethWalletDao.loadAll();
for (ETHWallet ethwallet : ethWallets) {
if (ethwallet.isCurrent()) {
ethwallet.setCurrent(true);
return ethwallet;
}
}
return null;
}
上面程式碼先用 ETHWalletDao.loadAll
加載出所有的賬號,返回當前選中的,上面的程式碼會被FetchWalletInteract
類的 findDefault
方法呼叫,在ViewModle裡,很多時候以資料進行互動的類,我們會命名為 xxxInteract
,這也是一個習慣用法。
其程式碼如下:
// FetchWalletInteract.java
// 返回一個可訂閱的Single<ETHWallet> 物件
public Single<ETHWallet> findDefault() {
return Single.fromCallable(() -> {
return WalletDaoUtils.getCurrent();
}).subscribe(this::onDefaultWallet);
}
// 獲取到預設錢包賬號 設定到 defaultWallet 這個LiveData
private void onDefaultWallet(ETHWallet wallet) {
defaultWallet.setValue(wallet);
}
findDefault()
返回一個可訂閱的Single<ETHWallet> 物件,如果不熟悉可參考後面的文件。
之後,在UI介面PropertyFragment.java
中, 就可以對 defaultWallet
進行訂閱:
tokensViewModel.defaultWallet().observe(this, this::showWallet);
當獲取到預設賬號時,就會回撥showWallet
:
// UI 顯示
public void showWallet(ETHWallet wallet) {
tvWalletName.setText(wallet.getName());
tvWalletAddress.setText(wallet.getAddress());
}
這樣, 介面的顯示就完成了,下一篇繼續介紹獲取餘額。
參考文件
- lifecycle官方文件地址
- RxAndroid 瞭解更多響應式程式設計
我建立了一個專門討論錢包開發的微信群,加微信:xlbxiong 備註:錢包。
加入知識星球,和一群優秀的區塊鏈從業者一起學習。 深入淺出區塊鏈 - 系統學習區塊鏈,學區塊鏈的都在這裡,打造最好的區塊鏈技術部落格。
本文
開發十年,就只剩下這套架構體系了!
>>>
block final 對數 數量 改版 greendao 自定義 static 讀取 這是如何開發以太坊(安卓)錢包系列第3篇, 錢包賬號資產信息展示,展示信息主要包括賬號地址、eth余額及該賬號所擁有的Token及余額。
預備知識 MVVM
本文會涉及和UI界面的交互, aging generate hub trac more roo new cti 生成 上周我開源了一款錢包,反映很好,一周時間不到已經快到100 Star。接下來我會幾篇系列文章把開發以太坊錢包的核心要點寫出來,也算是對代碼的一個解讀。
寫在前面
錢包是使用Androi
開發十年,就只剩下這套架構體系了!
>>>
開發十年,就只剩下這套架構體系了!
>>>
Claymore 挖礦核心作為全球最強的ETH/ETC的挖礦軟體,自然會受到全球礦工的關注和使用。但在使用Claymore 挖礦核心時,會被作者抽取1%-2%的收益。當然你也可以使用"-NoFee"引數,作者不會抽取費用。但是你的算力會降低5%。 關於這個抽水,作者也是良心
完全遮蔽抽成,經分析核心採用Claymore's核心的軟體,經測試:
優點:
1,相容WINDOWS7,10作業系統,圖形化操作介面,人性化設定;
2,內建本地算力曲線圖,能夠掌握任何時候礦機的算力狀態;
3,具有開機自動啟動,自動挖礦;
4,採用Claymore'
賬戶
賬戶在以太坊中發揮著中心作用。共有兩種賬戶型別:外部賬戶(EOAs)和合約賬戶。我們這裡重點講一下外部賬戶,以下會簡稱為賬戶。合約賬戶簡稱為合約, 在合約章節具體討論。把外部賬戶和合約賬戶都歸入到帳戶的一般概念是合理的,因為這些實體都是所謂的狀態物件。這些實體都有狀態 按鈕 wid isp 查詢 到你 pan fail VC oam
MyEtherWallet 是一個以太坊的網頁錢包,使用非常簡單,打開網頁就可以使用,源代碼開源,不會在服務器上存儲用戶的錢包信息如私鑰和密碼。支持 Ledger Wallet、TREZOR 等硬件錢包
Via瀏覽器是由國內開發者開發的一款安卓平臺上的極簡瀏覽器,它追求極簡,是極客之選。Via瀏覽器以極客思維為主線,化繁為簡,簡化過程,提升搜尋與瀏覽的效率,注重瀏覽體驗,乾淨利落,簡約不簡單。
小體積的瀏覽器讓每個安卓機型都可以輕鬆駕馭。麻雀雖小五臟俱全,Via瀏覽器常用功能一應俱全,對於高階的 vid new 有一個 tran slim ole https parse 交易 接上一章的內容,這篇介紹 deploy相關和結果演示。
deploy一個合約的過程中,需要計算發布的消耗和nonce值。
當進行每筆交易時,發送人設定Gas Limit 和Gas Pric
一、以太坊p2p模組組成
在以太坊p2p目錄下,主要包括以下幾個模組:
p2p模組
功能
discover
包含了Kademlia協議。是基於UDP的p2p節點發現協議。
discv
以太坊現在各種學習資料數不勝數,但由於以太坊正處於飛速發展階段,有些學習資料很快就過時了。所以想找到有價值的資料無異於大海撈針。我費了很大功夫,才建立起對以太坊的整體認識,搞清楚它的工作機制。我相信很多躍躍欲試的開發人員正面臨著跟我一樣的問題,所以我把自己的認識整理出來,希望能對大家有
一、乙太網網路
理解以太坊 PrivateNetwork 先要理解以太坊的兩種官方網路, 目前以太坊官方提供了兩種網
生產環境網路
測試網路 TestNet
**
1 以太坊生產網路
以太坊的生產網路顧名思義,也就是產生真正有價值的 的以太幣的網路
當我第一次考慮通過加密貨幣實施支付時,我查看了像Stripe這樣的可用解決方案。我覺得Stripe的問題在於,它只允許使用美國商家帳戶進行比特幣支付,所以這對我來說不是一個選擇。在以太坊世界,它看起來更糟糕。有一些較新的服務,但他們都想要分享蛋糕。
那麼從頭開始構建以太坊支
最近EOS的熱度居高不下,完全佔據了公鏈C位,據14號sludgefeed報道,EOS的每日Dapp使用者和交易量超過以太坊,EOS在24小時內共11,428名使用者,而以太坊則為10,562名。此外,EOS7天的Dapp交易量為4800萬美元,而以太坊僅有2600萬美元
上一節提到,以太坊在node start的時候啟動了RPC服務,以太坊通過Rpc服務來實現以太坊相關介面的遠端呼叫。這節我們用個例項來看看以太坊 RPC是如何工作的,以及以太坊RPC的原始碼的實現一,RPC通訊例項1,RPC啟動命令 :geth --rpcgo-ethereu
作者:黎躍春,資深講師,全棧工程師;專注於「區塊鏈+內容」產品的開發以及區塊鏈技術培訓。
公眾號:區塊鏈部落
QQ群:348924182
區塊鏈技術部落閣:http://liyu
可憐的C盤,隨著以太坊Ethereum Wallet錢包不斷增大,終於容不下了,尋找方法轉移一開始使用的是datadir,竟然沒用,然後8位元去尋找方法,終於看到一個帖子說 mklink /J 有用,但是沒嘗試過,好吧,我來做小白鼠原文地址:http://8btc.com/t 百度雲 技術 aid 驗證 cli nac 下載到本地 ejs 11.2 EthBox是匯智網為了方便以太坊開發學習者快速安裝本地開發環境而
制作的開發套件,可以一鍵安裝以下必備開發工具:
nodejs:8.11.2
git:2.17.1.2
geth:1.8.10
ga 相關推薦
如何開發一款以太坊安卓錢包系列3
如何開發一款以太坊安卓錢包系列3 - 資產信息展示
如何開發一款以太坊(安卓)錢包系列1 - 通過助記詞創建賬號
如何開發一款以太坊(安卓)錢包系列1
如何開發一款以太坊(安卓)錢包系列2
無意中發現一款以太坊挖礦破解抽水神器-ETH超級礦工-NoDevFee,反抽水加收益2%-5%。
發現一款以太坊挖礦神器免抽水長沙礦工,聖騎士,支援ETH,ETC+SC等各種雙挖(11.9核心)破解抽水
區塊鏈開發(十一)以太坊賬戶管理
科普貼 | 以太坊代幣錢包MyEtherWallet使用教程,一步步教你玩轉MEW
Via瀏覽器 v3.4.5 又一款經典簡潔的安卓瀏覽器
【以太坊開發】如何開發一個編譯以太坊智能合約並且發布的平臺(二)
以太坊p2p網路(一):以太坊p2p網路部分結構
給 Web 開發人員的以太坊入坑指南
區塊鏈實踐(一) 以太坊網路+geth搭建私有網路實戰
PHP開發區塊鏈以太坊支付系統
失落的以太坊:埋頭苦研3年不如EOS主網上線3月
以太坊原始碼深入分析(3)-- 以太坊RPC通訊例項和原理程式碼分析(上)
ETH與以太坊代幣錢包MyEtherWallet使用教程
【親測】以太坊Ethereum Wallet錢包geth從C盤成功轉移到其他盤
EthBox以太坊開發套件,一鍵安裝以太坊開發環境