区块链学习之Web3j入门(三):状态与交易
1.以太坊的兩種交易
以太坊中有兩種交易,分別為普通交易和裸交易。普通交易由外部節(jié)點進(jìn)行簽名,然后發(fā)送到網(wǎng)絡(luò)中進(jìn)行確認(rèn);裸交易由外部應(yīng)用進(jìn)行簽名,節(jié)點不再額外處理,而只是負(fù)責(zé)發(fā)送到網(wǎng)絡(luò)中進(jìn)行確認(rèn)(未經(jīng)節(jié)點加工的原始交易數(shù)據(jù))。交易作為一種激勵,使得賬戶的狀態(tài)不斷發(fā)生改變(賬戶余額),即產(chǎn)生了一種基于余額激勵的以太坊狀態(tài)機(jī)。
2. Web3j獲取賬戶余額
以太坊定義了eth_getBalance接口用來獲取賬戶余額,在web3j中對應(yīng)的封裝方法為ethGetBalance(),響應(yīng)對象為EthGetBalance:
@Testpublic void getAccountBalance() throws IOException {Web3j web3j = Web3j.build(new HttpService("http://localhost:8545"));String account0 = web3j.ethAccounts().send().getAccounts().get(0);//獲取第1個賬戶信息BigInteger balance = web3j.ethGetBalance(account0, DefaultBlockParameterName.LATEST).send().getBalance();//獲取第一個用戶的余額,ethGetBalance第二個參數(shù)為指定特定的塊,DefaultBlockParameterName.LATEST為最近的一個塊。//.EARLIEST為最初的塊中賬戶余額信息BigInteger balance1 = web3j.ethGetBalance(account0, new DefaultBlockParameterNumber(12L)).send().getBalance();//第12塊中的賬戶余額信息System.out.println(balance);System.out.println(balance1);}執(zhí)行結(jié)果:(單位為wei,相當(dāng)于100個以太幣)
3.貨幣單位的表示與轉(zhuǎn)換
Web3j中Unit的枚舉類型定義以太坊貨幣的單位:
- Convert.Unit.WEI
- Convert.Unit.KWEI
- Convert.Unit.MWEI
- Convert.Unit.GWEI
- Convert.Unit.SZABO
- Convert.Unit.FINNEY
- Convert.Unit.ETHER
- Convert.Unit.KETHER
- Convert.Unit.METHER
- Convert.Unit.GETHER
進(jìn)制轉(zhuǎn)換實現(xiàn):
結(jié)果:
4.兩種交易
以太坊約定了兩種交易不同的提交接口:普通交易使eth_sendTransaction 調(diào)用提交,而裸交易則應(yīng)當(dāng)使用eth_sendRawTransaction調(diào)用提交。事實上,在公共節(jié)點中,通常會拒絕普通交易的提交,而要求外部應(yīng)用必須進(jìn)行離線簽名。
下節(jié)中再詳細(xì)講述兩種交易的具體實現(xiàn)過程~~
總結(jié)
以上是生活随笔為你收集整理的区块链学习之Web3j入门(三):状态与交易的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机组成原理机器码怎么求,计算机组成原
- 下一篇: 高效办公之如何高效利用互联网提高你的工作