web3 轉帳功能java
爲了完成以太坊交易,必須有幾個先決條件git
一、對方的以太坊地址web
二、肯定要轉帳的金額學習
三、本身地址的轉帳權限區塊鏈
四、大於轉帳金額的以太幣,以太幣轉帳其實就是提出一個交易,礦工會幫你計算,計算完成即達成交易,可是礦工計算須要支付必定的費用(GAS),支付過少,計算轉帳就有可能很慢或者不成功。測試
轉帳方式1:網站
代碼以下ui
1 import org.web3j.crypto.Credentials; 2 import org.web3j.crypto.RawTransaction; 3 import org.web3j.crypto.TransactionEncoder; 4 import org.web3j.protocol.Web3j; 5 import org.web3j.protocol.core.DefaultBlockParameterName; 6 import org.web3j.protocol.core.methods.response.EthGetTransactionCount; 7 import org.web3j.protocol.core.methods.response.EthSendTransaction; 8 import org.web3j.protocol.http.HttpService; 9 import org.web3j.utils.Convert; 10 import org.web3j.utils.Numeric; 11 12 import java.math.BigInteger; 13 14 15 public class TransactionTest { 16 public static void main(String[] args) throws Exception { 17 //設置須要的礦工費 18 BigInteger GAS_PRICE = BigInteger.valueOf(22_000_000_000L); 19 BigInteger GAS_LIMIT = BigInteger.valueOf(4_300_000); 20 21 //調用的是kovan測試環境,這裏使用的是infura這個客戶端 22 Web3j web3j = Web3j.build(new HttpService("https://kovan.infura.io/<your-token>")); 23 //轉帳人帳戶地址 24 String ownAddress = "0xD1c82c71cC567d63Fd53D5B91dcAC6156E5B96B3"; 25 //被轉人帳戶地址 26 String toAddress = "0x6e27727bbb9f0140024a62822f013385f4194999"; 27 //轉帳人私鑰 28 Credentials credentials = Credentials.create("xxxxxxxxxxxxx"); 29 // Credentials credentials = WalletUtils.loadCredentials( 30 // "123", 31 // "src/main/resources/UTC--2018-03-01T05-53-37.043Z--d1c82c71cc567d63fd53d5b91dcac6156e5b96b3"); 32 33 //getNonce(這裏的Nonce我也不是很明白,大概是交易的筆數吧) 34 EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount( 35 ownAddress, DefaultBlockParameterName.LATEST).sendAsync().get(); 36 BigInteger nonce = ethGetTransactionCount.getTransactionCount(); 37 38 //建立交易,這裏是轉0.5個以太幣 39 BigInteger value = Convert.toWei("0.5", Convert.Unit.ETHER).toBigInteger(); 40 RawTransaction rawTransaction = RawTransaction.createEtherTransaction( 41 nonce, GAS_PRICE, GAS_LIMIT, toAddress, value); 42 43 //簽名Transaction,這裏要對交易作簽名 44 byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials); 45 String hexValue = Numeric.toHexString(signedMessage); 46 47 //發送交易 48 EthSendTransaction ethSendTransaction = 49 web3j.ethSendRawTransaction(hexValue).sendAsync().get(); 50 String transactionHash = ethSendTransaction.getTransactionHash(); 51 52 //得到到transactionHash後就能夠到以太坊的網站上查詢這筆交易的狀態了 53 System.out.println(transactionHash); 54 } 55 }
注意:3d
以上交易代碼是離線交易,先組裝交易,而後發送到鏈上,web3j提供在線交易,可是這種交易須要parity錢包,將完整的區塊鏈錢包下載下來,而後綁定帳戶進去。code
一、第27-31行,能夠用兩種方式得到地址的信任憑證,一種是直接使用私鑰,一種是使用keystore文件
二、https://kovan.etherscan.io/tx/0x88cb6e625b57cadd6d7f71872433c2e638014fca30e47c649f2831db79b54304
這個地址是能夠查到你的這筆交易的
0x88cb6e625b57cadd6d7f71872433c2e638014fca30e47c649f2831db79b54304是transactionHash
這個地址是測試地址,若是須要查詢主網上的,刪除kovan
轉帳方式2:
import org.web3j.crypto.Credentials; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.methods.response.TransactionReceipt; import org.web3j.protocol.http.HttpService; import org.web3j.tx.Transfer; import org.web3j.utils.Convert; import java.math.BigDecimal; public class TransactionTest2 { public static void main(String[] args) throws Exception { Web3j web3j = Web3j.build(new HttpService("https://kovan.infura.io/<your-token>")); String ownAddress = "0xD1c82c71cC567d63Fd53D5B91dcAC6156E5B96B3"; String toAddress = "0x6e27727bbb9f0140024a62822f013385f4194999"; Credentials credentials = Credentials.create("xxxxxxxx"); TransactionReceipt transactionReceipt = Transfer.sendFunds( web3j, credentials, toAddress, BigDecimal.valueOf(0.2), Convert.Unit.ETHER).send(); System.out.println(transactionReceipt.getTransactionHash()); } }
注意
這種也是離線的,可是代碼量比較小。
備註:
若是在kovan環境中沒有以太幣的話,能夠到https://gitter.im/kovan-testnet/faucet這裏去要,直接註冊帳號以後,把你的帳號地址發到羣裏就好了,過幾分鐘就會給你轉錢的,主網的帳號地址和kovan是同樣的,可是裏面的幣是不同的。
若是想系統的學習java開發以太坊的話推薦一個很受歡迎的在線互動教程:
java以太坊,主要是介紹使用java圍繞web3j庫進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和事件等內容。