以太坊的Java客户端使用

原文地址:http://blog.csdn.net/m0_37327416/article/details/72885625


准备工作

  1. 已经安装好以太坊客户端或是以太坊集群
  2. 安装jdk8开发环境,web3j需要在java 8的环境才能运行

引入jar包

<dependency>
  <groupId>org.web3j</groupId>
  <artifactId>core</artifactId>
  <version>2.2.1</version>
</dependency>

连接以太坊客户端

使用web3j的api连接



使用Parity的api连接

public class Web3JClient {
	private static String ip = "http://ip地址:8545/";

	private Web3JClient() {

	}

	private volatile static Web3j web3j;

	public static Web3j getClient() {
		if (web3j == null) {
			synchronized (Web3JClient.class) {
				if (web3j == null) {
					web3j = Web3j.build(new HttpService(ip));
				}
			}
		}
		return web3j;
	}
}



账户操作

1.创建账户POJO

public class AccountInfo {
	private String userName;
	private String phone;
	private String address;
	private String school;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getSchool() {
		return school;
	}

	public void setSchool(String school) {
		this.school = school;
	}
}



2.账户相关操作

public class Account {
	private static Parity parity = ParityClient.getParity();
	private static Web3j web3j = Web3JClient.getClient();

	/**
	 * * Life * Like this * Like that * Also * It's not the same with you think
	 * * @Author lzh *
	 */
	public List<String> getAccountlist() {
		try {
			return parity.personalListAccounts().send().getAccountIds();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public String createAccount(String accountName, String password,
			AccountInfo accountInfo) {
		try {
			NewAccountIdentifier newAccountIdentifier = parity
					.personalNewAccount(password).send();
			if (newAccountIdentifier != null) {
				String accountId = newAccountIdentifier.getAccountId();
				parity.personalSetAccountName(accountId, accountName);
				Map<String, Object> account = new HashMap<String, Object>();
				account.put(accountId, accountInfo);
				parity.personalSetAccountMeta(accountId, account);
				return accountId;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public PersonalAccountsInfo.AccountsInfo getAccountInfo(String accountId) {
		try {
			PersonalAccountsInfo personalAccountsInfo = parity
					.personalAccountsInfo().send();
			return personalAccountsInfo.getAccountsInfo().get(accountId);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public BigInteger getBalance(String accountId) {
		try {
			DefaultBlockParameter defaultBlockParameter = new DefaultBlockParameterNumber(
					58);
			EthGetBalance ethGetBalance = parity.ethGetBalance(accountId,
					defaultBlockParameter).send();
			if (ethGetBalance != null) {
				return ethGetBalance.getBalance();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

账户测试

public class AccountTest {
	public static void main(String args[]) {
		getBalance();
	}

	public static void getBalance() {
		Account account = new Account();
		BigInteger ba = account
				.getBalance("0xcee1086eabd4cac10f6658eeffcdc66ad7565450");
		System.out.print(ba);
	}

	public static void queryAccount() {
		Account account = new Account();
		List<String> accounts = account.getAccountlist();
		for (String accountId : accounts) {
			System.out.println(accountId);
		}
	}

	public void createAccount() {
		Account account = new Account();
		AccountInfo accountInfo = new AccountInfo();
		accountInfo.setPhone("229787499");
		accountInfo.setAddress("世宁大厦");
		accountInfo.setSchool("buaa");
		accountInfo.setUserName("lzh");
		String accountId = account.createAccount("lzh", "123456", accountInfo);
		System.out.println("注册账户成功:" + accountId);
		// PersonalAccountsInfo.AccountsInfo
		// accountsInfo =
		// account.getAccountInfo("0xad7bbca86e02e503076b06931e05938e51e49fb9");//
		// System.out.println(accountsInfo.toString());
		// }}
	}
}


交易操作

public class Trade {
	private static final Logger logger = LoggerFactory.getLogger(Trade.class);
	private static BigInteger nonce = new BigInteger("0");
	private static BigInteger gasPrice = new BigInteger("1");
	private static BigInteger gasLimit = new BigInteger("50");
	private Parity parity = ParityClient.getParity();

	public boolean trasfer(String accountId, String passsword,
			String toAccountId, BigDecimal amount) {
		Transaction transaction = Transaction.createEtherTransaction(accountId,
				null, null, null, toAccountId, amount.toBigInteger());
		try {
			EthSendTransaction ethSendTransaction = parity
					.personalSignAndSendTransaction(transaction, passsword)
					.send();
			if (ethSendTransaction != null) {
				String tradeHash = ethSendTransaction.getTransactionHash();
				logger.info("账户:[{}]转账到账户:[{}],交易hash:[{}]", accountId,
						toAccountId, tradeHash);
			}
		} catch (Exception e) {
			logger.error("账户:[{}]交易失败!", accountId, e);
		}
		return false;
	}
}


交易测试

public class TradeTest {
	public static void main(String args[]) {
		Trade trade = new Trade();
		trade.trasfer("账户a的hash码", "abc123", "账户b的hash码", new BigDecimal(100));
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值