本篇主要说明如何离线生成ETH地址和进行离线交易
通过助记词离线生成钱包地址
大致过程如下图:
derivation.png
由于在web3j库中没有加入助记词派生地址的解决方法,所以我们离线生成地址时需要引入bitcoinj库提供方法。
以下为需要的钱包相关依赖:
org.web3j
core
4.0.3
org.bitcoinj
bitcoinj-core
0.14.7
进行离线交易
原理:将交易的原始信息包括nonce(交易次数)、gasPrice、gasLimit、from、to、amount等构造完成后进行编码,签名,最后广播至区块链上。
以下是eth方法工具类:
import com.google.common.collect.ImmutableList;
import org.bitcoinj.crypto.ChildNumber;
import org.bitcoinj.crypto.DeterministicHierarchy;
import org.bitcoinj.crypto.DeterministicKey;
import org.bitcoinj.crypto.HDKeyDerivation;
import org.web3j.abi.FunctionEncoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.*;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.request.Transaction;
import org.web3j.protocol.http.HttpService;
import org.web3j.utils.Convert;
import org.web3j.utils.Numeric;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.ExecutionException;
public class EthereumManager {
private final static ImmutableList BIP44_ETH_ACCOUNT_ZERO_PATH =
ImmutableList.of(new ChildNumber(44, true), new ChildNumber(60, true),
ChildNumber.ZERO_HARDENED, ChildNumber.ZERO);
private final static Web3j web3j = Web3j.build(new HttpService("localhost:8545"));
/**
* 通过助记词和id生成对应的子账户
* @param mnemonic 助记词