Skip to content

Commit

Permalink
add
Browse files Browse the repository at this point in the history
  • Loading branch information
TOTOROYang committed Jun 7, 2018
1 parent 0a71f6d commit f3bfa58
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 27 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ web3 for java 样例程序
- [ContractEvent](https://github.com/ethjava/web3j-sample/blob/master/src/main/java/com/ethjava/ContractEvent.java) 执行合约相关log监听
- [DecodeMessage](https://github.com/ethjava/web3j-sample/blob/master/src/main/java/com/ethjava/DecodeMessage.java) 加密后的交易数据解析
- [IBAN](https://github.com/ethjava/web3j-sample/blob/master/src/main/java/com/ethjava/IBAN.java) 根据官方规则生成iban及付款二维码
- [Calculate](https://github.com/ethjava/web3j-sample/blob/master/src/main/java/com/ethjava/Calculate.java) 在发布合约前计算合约地址,根据签名后的交易信息计算TxHash

基本功能demo已完成
46 changes: 46 additions & 0 deletions src/main/java/com/ethjava/Calculate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.ethjava;

import org.web3j.crypto.Hash;
import org.web3j.rlp.RlpEncoder;
import org.web3j.rlp.RlpList;
import org.web3j.rlp.RlpString;
import org.web3j.utils.Numeric;

import java.util.Arrays;

public class Calculate {
public static void main(String[] args) {
System.out.println(calculateContractAddress("0x6c0f49aF552F2326DD851b68832730CB7b6C0DaF".toLowerCase(), 294));

String signedData = "0xf8ac8201518506fc23ac00830493e094fda023cea60a9f421d74ac49f9a015880a77dd7280b844a9059cbb000000000000000000000000b5dbd2e4093a501f1d1e645f04cef5815a1581d7000000000000000000000000000000000000000000000004c53ecdc18a6000001ca03d710f3c5aabde2733938c44c0b1448f96e760c030205562f59889557397faa4a007110abbcfa343381a2f713d6339d3fa751200f82cc2f06a4d1967b4eaf61d50";
System.out.println(caculateTransactionHash(signedData));
}

/**
* 发布前 计算合约地址
*/
private static String calculateContractAddress(String address, long nonce) {
//样例 https://ropsten.etherscan.io/tx/0x728a95b02beec3de9fb09ede00ca8ca6939bad2ad26c702a8392074dc04844c7
byte[] addressAsBytes = Numeric.hexStringToByteArray(address);

byte[] calculatedAddressAsBytes =
Hash.sha3(RlpEncoder.encode(
new RlpList(
RlpString.create(addressAsBytes),
RlpString.create((nonce)))));

calculatedAddressAsBytes = Arrays.copyOfRange(calculatedAddressAsBytes,
12, calculatedAddressAsBytes.length);
String calculatedAddressAsHex = Numeric.toHexString(calculatedAddressAsBytes);
return calculatedAddressAsHex;
}

/**
* 提交前 计算交易hash
*/
private static String caculateTransactionHash(String signedData) {
//样例 https://ropsten.etherscan.io/tx/0xfd8acd10d72127f29f0a01d8bcaf0165665b5598781fe01ca4bceaa6ab9f2cb0
String txHash = Hash.sha3(signedData);
return txHash;
}
}
7 changes: 4 additions & 3 deletions src/main/java/com/ethjava/DecodeMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@ public class DecodeMessage {
* 本类将分析这个字符串
*/
public static void main(String[] args) {
String signedData = "0xf8a4120f82ea60944c1ae77bc2df45fb68b13fa1b4f000305209b0cb80b844a9059cbb000000000000000000000000c9e1718c3168474b37969ac1aa5602cceef0cd1600000000000000000000000000000000000000000000000000000000000003e81ba062091870dc1d5cdfd5a9fb7422df0321ada586de85df8e3e89ed7b3773cfc393a00a121d34b41bfc15c8dab4c69b7247ac7066cb38a256cc4856d57558dce78f7d";
String signedData = "0xf8ac8201518506fc23ac00830493e094fda023cea60a9f421d74ac49f9a015880a77dd7280b844a9059cbb000000000000000000000000b5dbd2e4093a501f1d1e645f04cef5815a1581d7000000000000000000000000000000000000000000000004c53ecdc18a6000001ca03d710f3c5aabde2733938c44c0b1448f96e760c030205562f59889557397faa4a007110abbcfa343381a2f713d6339d3fa751200f82cc2f06a4d1967b4eaf61d50";
decodeMessage(signedData);

}

private static void decodeMessage(String signedData) {
//样例 https://ropsten.etherscan.io/tx/0xfd8acd10d72127f29f0a01d8bcaf0165665b5598781fe01ca4bceaa6ab9f2cb0
try {
System.out.println(signedData);
System.out.println("解密 start " + System.currentTimeMillis());
Expand All @@ -37,12 +38,12 @@ private static void decodeMessage(String signedData) {
String to = Numeric.toHexString(((RlpString) values.get(3)).getBytes());
BigInteger value = Numeric.toBigInt(((RlpString) values.get(4)).getBytes());
String data = Numeric.toHexString(((RlpString) values.get(5)).getBytes());
RawTransaction rawTransaction1 = RawTransaction.createTransaction(nonce, gasPrice, gasLimit, to, value, data);
RawTransaction rawTransaction = RawTransaction.createTransaction(nonce, gasPrice, gasLimit, to, value, data);
RlpString v = (RlpString) values.get(6);
RlpString r = (RlpString) values.get(7);
RlpString s = (RlpString) values.get(8);
Sign.SignatureData signatureData = new Sign.SignatureData(v.getBytes()[0], r.getBytes(), s.getBytes());
BigInteger pubKey = Sign.signedMessageToKey(TransactionEncoder.encode(rawTransaction1), signatureData);
BigInteger pubKey = Sign.signedMessageToKey(TransactionEncoder.encode(rawTransaction), signatureData);
System.out.println("publicKey " + pubKey.toString(16));
String address = Numeric.prependHexPrefix(Keys.getAddress(pubKey));
System.out.println("address " + address);
Expand Down
23 changes: 0 additions & 23 deletions src/main/java/com/ethjava/TokenClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ public static void main(String[] args) {
fromAddress, "yzw",
"0x6c0f49aF552F2326DD851b68832730CB7b6C0DaF", contractAddress,
BigInteger.valueOf(100000)));
System.out.println(calculateContractAddress("0x6c0f49aF552F2326DD851b68832730CB7b6C0DaF".toLowerCase(), 294));
}

/**
Expand Down Expand Up @@ -273,26 +272,4 @@ public static String sendTokenTransaction(String fromAddress, String password, S
return txHash;
}

/**
* 计算合约地址
*
* @param address
* @param nonce
* @return
*/
private static String calculateContractAddress(String address, long nonce) {
//样例 https://ropsten.etherscan.io/tx/0x728a95b02beec3de9fb09ede00ca8ca6939bad2ad26c702a8392074dc04844c7
byte[] addressAsBytes = Numeric.hexStringToByteArray(address);

byte[] calculatedAddressAsBytes =
Hash.sha3(RlpEncoder.encode(
new RlpList(
RlpString.create(addressAsBytes),
RlpString.create((nonce)))));

calculatedAddressAsBytes = Arrays.copyOfRange(calculatedAddressAsBytes,
12, calculatedAddressAsBytes.length);
String calculatedAddressAsHex = Numeric.toHexString(calculatedAddressAsBytes);
return calculatedAddressAsHex;
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/ethjava/TransactionClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,5 +139,5 @@ private static String sendTransaction() {
return txHash;
}

// TODO: 2018/3/13 使用 web3j.ethSendRawTransaction() 发送交易 需要用私钥自签名交易
//使用 web3j.ethSendRawTransaction() 发送交易 需要用私钥自签名交易 详见ColdWallet.java
}

0 comments on commit f3bfa58

Please sign in to comment.