以太坊钱包1-Android-创建钱包
以太坊钱包2-Android-转账(ETH)
以太坊钱包3-Android-代币转账(ERC20)
在说ETH转账和查询余额之前需要准备环境:也就是普通app平时请求后台数据时分为开发、测试以及正式环境。以太坊同样的也有几个网络供我们开发测使用。后续会使用ropsten
作为测试网络
环境 | 连接地址 |
---|---|
主网 | https://mainnet.infura.io/ |
rinkeby测试网 | https://rinkeby.infura.io/ |
ropsten测试网 | https://ropsten.infura.io/ |
更多 | - |
在相应区块链浏览器上均可以查询到所有部署在此链上的智能合约以及用户的以太币。
选中ropsten
作为测试网络,首先需要获取在该网络上获取以太币。有多种获取方式。如下:
ropsten
上的以太币这里采用的是方式2
安装Chrome浏览器或者火狐浏览器的METAMASK插件
通过metamask选择ropsten网络创建钱包
进入水龙头网站进行转账(一会就到账了)
地址:0xB4939cd825d4408656e64C987C8cf8354Cc2208d
私钥:f48028e1e37f507e59f0011ddd106b18747936b09e03ba565a085f17c672f671
上面的账号就是通过metamask生成的 里面有几个以太币,如果不方便可以直接使用上面的账号,通过钱包导入即可
查询余额、转账ETH以及后续的智能合约部署,调用均使用Web3j
//初始化web3j
Web3j web3j = Web3jFactory.build(new HttpService("https://ropsten.infura.io/"));
//获取余额 ETH支持小数点后18位,此处获取的balance要除以10^18
BigInteger balance = web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST)
.send()//是同步获取
//.sendAsync()//异步获取
.getBalance();
通过直接调用web3j.ethGetBalance()
即可。第一个参数address:查询余额的地址,第二个填写的参数表示到最新的挖掘块,第二个参数其他值。这样就可以获取每个账户的以太币的余额,如果使用同步方式获取余额记得在其他线程调用。
Transfer
转账//初始化web3j
Web3j web3j = Web3jFactory.build(new HttpService("https://ropsten.infura.io/"));
//此处密码为输入的,walletFile为钱包里面中存储的WalletFile文件
Credentials credentials = Credentials.create(Wallet.decrypt(pwd, walletFile));
TransactionReceipt transactionReceipt = Transfer.sendFunds(
web3j, credentials, toAddr,
BigDecimal.valueOf(value), Convert.Unit.ETHER)
.send()
//toAddr 转入账户地址
//BigDecimal.valueOf(value) 转账的以太币数量value为1
//Convert.Unit.ETHER 以太币的单位 因为以太币支持小数点后面18位。
//所以当转账1个ETH时实际上转换为BigInteger为100 0000 0000 0000 0000。
//此处不懂先看后面,看完就能弄懂
//初始化web3j
Web3j web3j = Web3jFactory.build(new HttpService("https://ropsten.infura.io/"));
//此处密码为输入的,walletFile为钱包里面中存储的WalletFile文件
Credentials credentials = Credentials.create(Wallet.decrypt(pwd, walletFile));
//获取当前账户的下一个有效随机数 此处的address为当前钱包的地址
EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(
address, DefaultBlockParameterName.LATEST).send();
BigInteger nonce = ethGetTransactionCount.getTransactionCount();
//创建交易 这里几个参数没写,统一在下面解释
RawTransaction rawTransaction = RawTransaction.createEtherTransaction(
nonce, , , , );
// 签名交易 并转换为16进制
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = Numeric.toHexString(signedMessage);
//发送交易 发送完了或获取一个交易的hash值,这个值可以在区块链浏览器上查询当前交易的结果
EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send();
创建交易需要用到一下几个参数
RawTransaction.createTransaction(nonce,gasPrice,gasLimit,to,value,data);
ETH转账更多详细信息
因为简单的描述无法让人快速的弄懂比较生疏的概念,所以这里找了几篇比较友好的文章
DemoApk下载地址
github代码地址