android web3j 代币查询_使用Web3.js查询以太币和代币余额以及转账
前言
前面的文章也提到了,使用web3.js可以與以太坊進行互動。這篇文章的主要內容如下:解決web3.js版本問題
2.使用web3.js查詢以太幣及代幣余額,以及進行以太幣和代幣轉賬
1.web3.js版本問題
現在使用npm install web3安裝的web3.js,會發現node_modules中的web3文件夾中,沒有dist文件夾,而查看package.json內容如下:{"name":?"111","version":?"1.0.0","description":?"","main":?"index.js","scripts":?{"test":?"echo?\"Error:?no?test?specified\"?&&?exit?1"},"author":?"","license":?"ISC","dependencies":?{"web3":?"^1.0.0-beta.34"}}
會發現web3的版本為"^1.0.0-beta.34"。
官方文檔有這么一句話:
大意是這篇文檔還在補全中,并且1.0版本的包還沒放出。如果要查看當前的0.x.x版本的文檔,請戳這里https://github.com/ethereum/wiki/wiki/JavaScript-API。我估計這是web3文件夾沒有dist文件夾以及web3.min.js的原因。
之前的文章《以太開發交互實戰》也有提供了下載缺失包的地址,但是下載下來的web3.min.js很可能是0.20.6版本的。因為根據當前1.0官方文檔進行使用,很多方法運行會出現找不到此方法的錯誤信息。而我們的package.json的web3的版本又是"^1.0.0-beta.34",所以干脆直接去下載1.0.0-beta.34版本的缺失包使用,還可以就著1.0版本的文檔食用。
1.1 下載1.0.0-beta.34版本的web3.min.js
首先進入https://github.com/ethereum/web3.js,點擊Branch,切換到Tags選項,點擊v1.0.0-beta.34,然后download代碼,將dist文件夾拷貝到自己項目的moudles的web3文件夾下即可。
2. 使用web3.js查詢以太幣及代幣余額以及進行以太幣和代幣轉賬
2.1 在私鏈和主鏈上查詢以太幣及代幣余額
查詢類方法在私鏈和主鏈上的方法都是一樣的,說明以下幾點:主鏈地址??梢匀nfura申請
contractAbi。合約的abi??梢匀ttps://etherscan.io獲取,如果代幣合約提供了code,就會有abi//?引入web3var?Web3?=?require('web3');if?(typeof?web3?!==?'undefined')?{web3?=?new?Web3(web3.currentProvider);}?else?{//?web3?=?new?Web3(new?Web3.providers.HttpProvider("http://localhost:7545"));web3?=?new?Web3(new?Web3.providers.HttpProvider("https://mainnet.infura.io/yourAddress"));}//?定義合約abivar?contractAbi?=?[{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}];//?合約地址var?contractAddress?=?"0x7FCCF800568747b178c6cBbe4Bf3d147df75ac61";//?賬號var?currentAccount?=?"0x4e9d5c58d8d6f02FFe5A6EF10CB804FfFB556bBb";//?定義合約var?myContract?=?new?web3.eth.Contract(contractAbi,?contractAddress,?{from:?currentAccount,?//?default?from?addressgasPrice:?'10000000000'?//?default?gas?price?in?wei,?10?gwei?in?this?case});//?查詢以太幣余額web3.eth.getBalance(currentAccount).then(console.log);//?查看某個賬號的代幣余額myContract.methods.balanceOf(contractAddress).call({from:?currentAccount},?function(error,?result){if(!error)?{console.log(result);}?else?{console.log(error);}});
舉一反三,這里還可以查詢代幣的名稱,符號,小數位,發行總量等等,因為代幣合約一般都符合ERC標準,都有這些基本方法。甚至如果你有合約代碼和abi,還可以調用合約的其他方法,當然調用有些方法需要權限及前置條件。//?獲得代幣名稱myContract.methods.name().call({from:?currentAccount},?function(error,?result){if(!error)?{console.log(result);}?else?{console.log(error);}});//?獲取代幣符號myContract.methods.symbol().call({from:?currentAccount},?function(error,?result){if(!error)?{console.log(result);}?else?{console.log(error);}});//?獲取代幣總量myContract.methods.totalSupply().call({from:?currentAccount},?function(error,?result){if(!error)?{console.log(result);}?else?{console.log(error);}});//?查看某個賬號允許另一個賬號可使用的代幣數量myContract.methods.allowance(sender,?spender).call({from:?currentAccount},?function(error,?result){if(!error)?{console.log(result);}?else?{console.log(error);}});
2.2 在私鏈上轉賬以太幣及代幣//?以太幣轉賬web3.eth.sendTransaction({from:?currentAccount,to:?receiverAccount,value:?'1000000000000000'}).then(function(receipt){console.log(receipt);});//?代幣轉賬myContract.methods.transfer(to,?amount).send({from:?currentAccount}),?function(error,?transactionHash){if(!error)?{console.log('transactionHash?is?'?+?transactionHash);}?else?{console.log(error);}});
2.2 在主鏈上轉賬以太幣及代幣
上面的方法只適用于私鏈。因為你在私鏈的賬戶在本地是有私鑰的。而在主鏈上要進行寫入數據的方法,是需要獲取賬戶的私鑰并對交易進行簽名的,所以要用到web3.eth.sendSignedTransaction方法。方法稍微有點復雜,建議先查看底部的參考文章。因為有些重復的內容這里就不再解釋了。
需要npm安裝'ethereumjs-tx'npm?install?ethereumjs-tx
以太幣轉賬//?引入ethereumjs-txvar?Tx?=?require('ethereumjs-tx');//?以太幣轉賬????//?先獲取當前賬號交易的nonceweb3.eth.getTransactionCount(currentAccount,?web3.eth.defaultBlock.pending).then(function(nonce){//?獲取交易數據var?txData?=?{//?nonce每次++,以免覆蓋之前pending中的交易nonce:?web3.utils.toHex(nonce++),//?設置gasLimit和gasPricegasLimit:?web3.utils.toHex(99000),gasPrice:?web3.utils.toHex(10e9),//?要轉賬的哪個賬號??to:?'0x3b11f5CAB8362807273e1680890A802c5F1B15a8',//?從哪個賬號轉from:?currentAccount,//?0.001?以太幣value:?web3.utils.toHex(10e14),data:?''}var?tx?=?new?Tx(txData);//?引入私鑰,并轉換為16進制const?privateKey?=?new?Buffer('your?account?privateKey',?'hex');//?用私鑰簽署交易tx.sign(privateKey);//?序列化var?serializedTx?=?tx.serialize().toString('hex');web3.eth.sendSignedTransaction('0x'?+?serializedTx.toString('hex'),?function(err,?hash)?{if?(!err)?{console.log(hash);}?else?{console.error(err);}});});
代幣轉賬//?補齊64位,不夠前面用0補齊function?addPreZero(num){var?t?=?(num+'').length,s?=?'';for(var?i=0;?i<64-t;?i++){s?+=?'0';}return?s+num;}web3.eth.getTransactionCount(currentAccount,?web3.eth.defaultBlock.pending).then(function(nonce){//?獲取交易數據var?txData?=?{nonce:?web3.utils.toHex(nonce++),gasLimit:?web3.utils.toHex(99000),gasPrice:?web3.utils.toHex(10e9),//?注意這里是代幣合約地址????to:?contractAddress,from:?currentAccount,//?調用合約轉賬value這里留空value:?'0x00',//?data的組成,由:0x?+?要調用的合約方法的function?signature?+?要傳遞的方法參數,每個參數都為64位(對transfer來說,第一個是接收人的地址去掉0x,第二個是代幣數量的16進制表示,去掉前面0x,然后補齊為64位)data:?'0x'?+?'a9059cbb'?+?addPreZero('3b11f5CAB8362807273e1680890A802c5F1B15a8')?+?addPreZero(web3.utils.toHex(1000000000000000000).substr(2))}var?tx?=?new?Tx(txData);const?privateKey?=?new?Buffer('your?account?privateKey',?'hex');tx.sign(privateKey);var?serializedTx?=?tx.serialize().toString('hex');web3.eth.sendSignedTransaction('0x'?+?serializedTx.toString('hex'),?function(err,?hash)?{if?(!err)?{console.log(hash);}?else?{console.error(err);}});});
總結
以上是生活随笔為你收集整理的android web3j 代币查询_使用Web3.js查询以太币和代币余额以及转账的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android开发技术探索,《andro
- 下一篇: springbean的生命周期_spri