1. 程式人生 > >【以太坊開發】Web3j對以太坊錢包功能的實現

【以太坊開發】Web3j對以太坊錢包功能的實現

public class App {

    // GAS價格  
    public static BigInteger GAS_PRICE = BigInteger.valueOf(20_000_000_000L);  
    // GAS上限  
    public static BigInteger GAS_LIMIT = BigInteger.valueOf(4_300_000L);  
  
    // 交易費用  
    public static BigInteger GAS_VALUE = BigInteger.valueOf(1300_000L);;  
    
public static void main(String[] args) {
// 獲取餘額
try {
System.out.println("Hello World!");


Admin admin = EthService.initAdmin();
System.out.println(admin.personalListAccounts().send().getAccountIds());
////ShhAddToGroup group = admin.shhAddToGroup("enode://6d1819c68ad4bb4928f349d8fecb14223087b4ea0740dd3ffee55b95d975c2123
[email protected]
192.168.1.64:30303").send();
////System.out.println(group);
//
//NetPeerCount count=admin.netPeerCount().send();
//System.out.println(count.getResult());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


/**
* 開始挖礦
*/
@Test
public void startMining(){

}

/**
* 新建使用者
*/
@Test
public void CreateNewAccounts() {
String account = "";
try {
account = EthService.newAccount("123456");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(account);
}


/**
* 獲取錢包裡的所有使用者
*/
@Test
public void getAllAccounts() {
try {
Geth geth = EthService.initGeth();
Request<?, EthAccounts> request = geth.ethAccounts();
List<String> list = request.send().getAccounts();
System.out.println(list.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


/**
* 獲取使用者餘額
*/
@Test
public void getAccountBalance() {
try {
String address="0xdbaea9b9d0b4d9dfff546466c89de34c9711a942";//0x8b7483ea3c7a545dbf93bf07764b479e0469e821 0xdbaea9b9d0b4d9dfff546466c89de34c9711a942
Web3j web3 = EthService.initWeb3j();
EthGetBalance ethGetBalance1 = web3.ethGetBalance(address, DefaultBlockParameter.valueOf("latest")).send();
System.out.println(ethGetBalance1.getBalance());
System.out.println(address+"的餘額:" + Convert.fromWei(ethGetBalance1.getBalance().toString(), Convert.Unit.ETHER));  //.new BigDecimal(ethGetBalance1.getBalance() + "").divide(BigDecimal.valueOf(Math.pow(10, 18))).setScale(6)
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 轉賬
*/
@Test
public void transferBalance(){
try {
boolean flag = EthService.unlockAccount("0xdbaea9b9d0b4d9dfff546466c89de34c9711a942", "123456", new BigInteger(1800 + ""));
System.out.println(flag);


BigInteger value = Convert.toWei("12", Convert.Unit.ETHER).toBigInteger(); 

Web3j web3j=EthService.initWeb3j();
Credentials credentials = WalletUtils.loadCredentials("123456", "F:\\Ethereum\\blockchain\\keystore\\UTC--2018-04-26T06-04-02.691651400Z--dbaea9b9d0b4d9dfff546466c89de34c9711a942");


// get the next available nonce
BigInteger nonce = EthService.getNonce("0xdbaea9b9d0b4d9dfff546466c89de34c9711a942");

// create our transaction
RawTransaction rawTransaction  = RawTransaction.createEtherTransaction(
            nonce, GAS_PRICE, GAS_LIMIT, "0x8b7483ea3c7a545dbf93bf07764b479e0469e821", value);


// sign & send our transaction
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = Numeric.toHexString(signedMessage);
EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send();

System.out.println(ethSendTransaction.getResult());
System.out.println(ethSendTransaction.getTransactionHash());


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 監聽新區塊
*/
@Test
public void observableBlockChain(){
Web3j web3j=EthService.initWeb3j();
Subscription subscription = web3j.blockObservable(false).subscribe(block -> {
Block blk=block.getResult();
System.out.println("當前區塊高度:"+blk.getNumber()+",上一個區塊:"+blk.getParentHash()+blk.getHash());
});
System.out.println("訂閱的"+subscription.hashCode());
}

相關推薦

開發Web3j錢包功能實現

public class App {    // GAS價格      public static BigInteger GAS_PRICE = BigInteger.valueOf(20_000_000_000L);      // GAS上限      public static BigInteger G

開發發幣指南--進階篇

參考:https://www.ethereum.org/token pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value,

開發如何開發一個編譯智能合約並且發布的平臺(二)

vid new 有一個 tran slim ole https parse 交易 接上一章的內容,這篇介紹 deploy相關和結果演示。 deploy一個合約的過程中,需要計算發布的消耗和nonce值。 當進行每筆交易時,發送人設定Gas Limit 和Gas Pric

開發利用Oraclize開發一個投注合約(一):原理介紹

智慧合約的作用很多,但是很多資料還是要基於網際網路,那麼如何在合約中獲取網際網路中的資料?Oraclize就是為了這個目的而誕生的。 本篇介紹如何利用Oraclize開發一個投注智慧合約,開始coding之前,這一節講述一下理論。 工作原理: 智慧合約通過對Oraclize釋出一個合約之間的呼叫請求來獲

開發利用Oraclize開發一個投註合約(一):原理介紹

tween 協議 簡單方法 type callback 使用 抓取 獲取 num 智能合約的作用很多,但是很多數據還是要基於互聯網,那麽如何在合約中獲取互聯網中的數據?Oraclize就是為了這個目的而誕生的。 本篇介紹如何利用Oraclize開發一個投註智能合約,開始co

開發geth的使用入門

geth的全稱是go-ethereum,是一個以太坊客戶端,用go語言編寫,應該是目前最常用的客戶端。當然以太坊客戶端還有用C++,Ruby,Python,Java等其他多種語言編寫的,不同型別的客戶端是為了滿足不同的需求場景。今天我們主要來介紹geth(發音同guess )

java開發使用web3j和spring boot構建區塊鏈應用

區塊鏈最近IT世界的流行語之一。這項有關數字加密貨幣的技術,並與比特幣一起構成了這個熱門的流行趨勢。它是去中心化的,不可變的分塊資料結構,這是可以安全連線和使用的密碼演算法。在這種結構中的每一區塊通常包含前一個區塊的加密雜湊,一個時間戳,和交易資料。區塊鏈是點對點管理網路的,

python全棧開發第十四篇面向象三大特性——繼承

blog area ear person subclass rom from 指定 實現 一、組合 組合:組合指的是,在一個類中以另外一個類的對象(也就是實例)作為數據屬性,稱為類的組合    也就是說:一個類的屬性是另一個類的對象,就是組合 例子:   圓環是由兩個圓組成

python全棧開發第十五篇面向象三大特性——封裝

inf delete 面向對象 修改 turn 外部 clas fun 內部 1.封裝: 什麽是封裝呢?(封裝不是單純意義的隱藏,其實它還是可以查看的)   就是把一些不想讓別人看的給隱藏起來了 封裝數據:目的是保護隱私 功能封裝:目的是隔離復雜度 如果用了私有的,在類的外

python全棧開發第十六篇面向象三大特性——多臺和繼承補充

全棧 space 其他 到你 使用 方法名 調用父類 大眾 chat 一、回顧 面向對象   1.類:具有相同屬性和方法 的一類事物      類名可以實例化一個對象      類名可以調用類屬性,(靜態屬性 和(方法)動態屬性)   2.對象:也就是實例     

python全棧開發第十七篇面向象反射和內置方法

**kwargs login 語言 return 遊戲 def item 註意 做的 一、靜態方法(staticmethod)和類方法(classmethod) 類方法:有個默認參數cls,並且可以直接用類名去調用,可以與類屬性交互(也就是可以使用類屬性) 靜態方法:讓類裏

Windows 10 應用開發跟隨系統主題顏色

tex 線程 align tro 都是 顏色 stroke object 截圖 有些時候,希望應用程序中的某些顏色可以與系統的主題顏色相同,並且當系統主題色改變時進行同步。 實現過程並不復雜,主要用到 UISettings 類,它公開一個 GetColorValue 方法

Windows 10 應用開發使用快捷訪問鍵

width object block 菜單項 miss await 觸控 程序 應用 UWP 雖然主要面向觸控操作,但 Windows 設備是萬能工具,不用手指不用筆的時候,也可能會接上鍵盤耍耍。因此,給應用界面上的一些元素弄個快捷訪問鍵也挺不錯的。為了使用 Windows

高德地圖開發---簡單介紹

pat 人員 4.2 服務 登錄 .com con 高德 搜索服務 高德地圖 Android SDK 能夠為 Android 應用開發人員提供互動的、功能豐富的 Android 手機地圖。 將地圖顯示功能與搜索服務、定位服務分別封裝為三個類庫。每一個類庫不相互

Windows 10 應用開發使用x:Bind標記動態獲得計算結果

ash 進行 reg tps 屬性綁定 使用 例子 應用 處理 UWP 在傳統(WPF)的Binding標記上引入了 Bind 標記,Bind 基於編譯階段生成,因而具有較高的性能。但是,你得註意,這個性能上的優化是免去了運行階段動態綁定的開銷,這是不包括數據源的體積的。要

Win 10 應用開發UI Composition 劄記(三):與 XAML 集成

單獨使用 切換 column gif 頂部 tel border 靜態 ons 除了 DirectX 遊戲開發,我們一般很少單獨使用 UI Composition ,因此,與 XAML 互動並集成是必然結果。這樣能夠把兩者的優勢混合使用,讓UI布局能夠更靈活。 說到與 X

Win 10 應用開發UI Composition 劄記(四):繪制圖形

圖形 package 記得 aml 3.5 平時 surf 繪圖 str 使用 Win 2D 組件,就可以很輕松地繪制各種圖形,哪怕你沒有 D2D 相關基礎,也不必寫很復雜的 C++ 代碼。 先來說說如何獲取 Win 2D 組件。很簡單,創建 UWP 應用項目後,你打開&

Win 10 應用開發UI Composition 劄記(五):燈光

傳播 目標 spa 速度 review sta sset ext 集合 UI Composition 除了能夠為 UI 元素建立三維空間外,還有相當重要的一個部件——燈光。宇宙萬物的精彩繽紛,皆源於光明,光,使我們看到各種東西,除了黑洞之外的世界都是

Win 10 應用開發UI Composition 劄記(六):動畫

onclick 相對 行修改 log review asset 是你 express iteration 動畫在 XAML 中也有,而且基本上與 WPF 中的用法一樣。不過,在 UWP 中,動畫還有一種表現方式—— 通過 UI Composition

Win 10 應用開發UI Composition 劄記(七):基於表達式的動畫

eat seconds fin ima 旋轉 range align 綁定 true 上一篇爛文中,老周給大夥伴們介紹過了幾個比較好玩的動畫。本篇咱們深化主題,說一說基於表達式的動畫。這名字好理解,就是你可以用公式 / 等式來產生動畫的目標值。比如,你想讓某個可視化對象的高