Merge branch 'master' of https://github.com/romanman/EthereumJ
Conflicts: src/main/java/org/ethereum/gui/ConnectionConsole.java src/main/java/org/ethereum/net/client/EthereumProtocolHandler.java
This commit is contained in:
commit
abd9625ca8
|
@ -0,0 +1,7 @@
|
|||
*.class
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
/target
|
|
@ -92,6 +92,18 @@
|
|||
<version>3.2.1</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -1,16 +1,11 @@
|
|||
package org.ethereum.geodb;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URL;
|
||||
|
||||
import com.maxmind.geoip.Location;
|
||||
import com.maxmind.geoip.LookupService;
|
||||
import com.maxmind.geoip2.DatabaseReader;
|
||||
import com.maxmind.geoip2.exception.GeoIp2Exception;
|
||||
import com.maxmind.geoip2.model.CityResponse;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package org.ethereum.gui;
|
||||
|
||||
import com.maxmind.geoip.Location;
|
||||
import com.maxmind.geoip2.model.CityResponse;
|
||||
import org.ethereum.geodb.IpGeoDB;
|
||||
import org.ethereum.util.Utils;
|
||||
|
||||
|
@ -28,8 +27,6 @@ public class PeersTableModel extends AbstractTableModel {
|
|||
generateRandomData();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getColumnName(int column) {
|
||||
|
||||
if (column == 0) return "Location";
|
||||
|
@ -59,7 +56,6 @@ public class PeersTableModel extends AbstractTableModel {
|
|||
URL flagURL = ClassLoader.getSystemResource("flags/" + countryCode + ".png");
|
||||
ImageIcon flagIcon = new ImageIcon(flagURL);
|
||||
|
||||
|
||||
return flagIcon;
|
||||
}
|
||||
|
||||
|
@ -78,7 +74,6 @@ public class PeersTableModel extends AbstractTableModel {
|
|||
flagIcon = Utils.getImageIcon("disconnected.png");
|
||||
}
|
||||
|
||||
|
||||
return flagIcon;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import java.awt.*;
|
|||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
* User: Roman Mandeleil
|
||||
|
|
|
@ -33,7 +33,6 @@ public class ToolBar extends JFrame {
|
|||
|
||||
this.setContentPane(cp);
|
||||
|
||||
|
||||
java.net.URL imageURL_1 = ClassLoader.getSystemResource("buttons/feedly.png");
|
||||
ImageIcon image_1 = new ImageIcon(imageURL_1);
|
||||
|
||||
|
@ -43,8 +42,6 @@ public class ToolBar extends JFrame {
|
|||
java.net.URL imageURL_3 = ClassLoader.getSystemResource("buttons/browser.png");
|
||||
ImageIcon image_3 = new ImageIcon(imageURL_3);
|
||||
|
||||
|
||||
|
||||
JToggleButton editorToggle = new JToggleButton("");
|
||||
editorToggle.setIcon(image_1);
|
||||
editorToggle.setContentAreaFilled(true);
|
||||
|
@ -97,20 +94,12 @@ public class ToolBar extends JFrame {
|
|||
PeersTableMain mainFrame = new PeersTableMain();
|
||||
mainFrame.setVisible( true );
|
||||
// mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
cp.add(editorToggle);
|
||||
cp.add(logToggle);
|
||||
cp.add(peersToggle);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void main(String args[]){
|
||||
|
@ -120,7 +109,6 @@ public class ToolBar extends JFrame {
|
|||
new ToolBar().setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package org.ethereum.manager;
|
||||
|
||||
import com.maxmind.geoip.Location;
|
||||
import com.maxmind.geoip2.model.CityResponse;
|
||||
import com.maxmind.geoip2.record.Country;
|
||||
import org.ethereum.geodb.IpGeoDB;
|
||||
import org.ethereum.net.vo.PeerData;
|
||||
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package org.ethereum.net;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum Command {
|
||||
|
||||
HELLO(0x00),
|
||||
DISCONNECT(0x01),
|
||||
PING(0x02),
|
||||
PONG(0x03),
|
||||
GET_PEERS(0x10),
|
||||
PEERS(0x11),
|
||||
TRANSACTIONS(0x12),
|
||||
BLOCKS(0x13),
|
||||
GET_CHAIN(0x14),
|
||||
NOT_IN_CHAIN(0x15),
|
||||
GET_TRANSACTIONS(0x16),
|
||||
UNKNOWN(0xFF);
|
||||
|
||||
private int cmd;
|
||||
|
||||
private static final Map<Integer, Command> intToTypeMap = new HashMap<Integer, Command>();
|
||||
static {
|
||||
for (Command type : Command.values()) {
|
||||
intToTypeMap.put(type.cmd, type);
|
||||
}
|
||||
}
|
||||
|
||||
private Command(int cmd) {
|
||||
this.cmd = cmd;
|
||||
}
|
||||
|
||||
public static Command fromInt(int i) {
|
||||
Command type = intToTypeMap.get(Integer.valueOf(i));
|
||||
if (type == null)
|
||||
return Command.UNKNOWN;
|
||||
return type;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -62,7 +62,6 @@ public class ClientPeer {
|
|||
// Wait until the connection is closed.
|
||||
f.channel().closeFuture().sync();
|
||||
|
||||
|
||||
} catch (InterruptedException ie){
|
||||
|
||||
System.out.println("-- ClientPeer: catch (InterruptedException ie) --");
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
package org.ethereum.net.message;
|
||||
|
||||
import org.ethereum.net.RLP;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.ethereum.net.rlp.RLPItem;
|
||||
import org.ethereum.net.rlp.RLPList;
|
||||
import org.ethereum.net.vo.BlockData;
|
||||
import org.ethereum.net.vo.TransactionData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
* User: Roman Mandeleil
|
||||
|
@ -25,8 +24,6 @@ public class BlocksMessage extends Message {
|
|||
super(rawData);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void parseRLP() {
|
||||
|
||||
RLPList paramsList = (RLPList) rawData.getElement(0);
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
package org.ethereum.net.message;
|
||||
|
||||
import org.ethereum.net.RLP;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.ethereum.net.rlp.RLPItem;
|
||||
import org.ethereum.net.rlp.RLPList;
|
||||
import org.ethereum.util.Utils;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
* User: Roman Mandeleil
|
||||
|
@ -21,7 +19,6 @@ public class GetChainMessage extends Message {
|
|||
List<byte[]> blockHashList = new ArrayList<byte[]>();
|
||||
BigInteger blockNum;
|
||||
|
||||
|
||||
public GetChainMessage(RLPList rawData) {
|
||||
super(rawData);
|
||||
}
|
||||
|
@ -36,7 +33,6 @@ public class GetChainMessage extends Message {
|
|||
throw new Error("GetChain: parsing for mal data");
|
||||
}
|
||||
|
||||
|
||||
int size = paramsList.size();
|
||||
for (int i = 1; i < size - 1; ++i){
|
||||
|
||||
|
|
|
@ -29,7 +29,6 @@ public class HelloMessage extends Message {
|
|||
super(rawData);
|
||||
}
|
||||
|
||||
|
||||
public HelloMessage(byte protocolVersion, byte networkId, String clientId, byte capabilities, short peerPort, byte[] peerId) {
|
||||
this.protocolVersion = protocolVersion;
|
||||
this.networkId = networkId;
|
||||
|
@ -39,7 +38,6 @@ public class HelloMessage extends Message {
|
|||
this.peerId = peerId;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void parseRLP() {
|
||||
|
||||
|
|
|
@ -1,19 +1,12 @@
|
|||
package org.ethereum.net.message;
|
||||
|
||||
import org.ethereum.net.RLP;
|
||||
import org.ethereum.net.message.Message;
|
||||
import org.ethereum.net.rlp.RLPItem;
|
||||
import org.ethereum.net.rlp.RLPList;
|
||||
import org.ethereum.net.vo.PeerData;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import org.ethereum.net.rlp.RLPItem;
|
||||
import org.ethereum.net.rlp.RLPList;
|
||||
import org.ethereum.net.vo.PeerData;
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
|
@ -37,7 +30,6 @@ public class PeersMessage extends Message {
|
|||
parsed = false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void parseRLP() {
|
||||
|
||||
|
@ -48,7 +40,6 @@ public class PeersMessage extends Message {
|
|||
throw new Error("PeersMessage: parsing for mal data");
|
||||
}
|
||||
|
||||
|
||||
for (int i = 1; i < paramsList.size(); ++i){
|
||||
|
||||
RLPList peerParams = (RLPList)paramsList.getElement(i);
|
||||
|
@ -83,7 +74,6 @@ public class PeersMessage extends Message {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
public List<PeerData> getPeers() {
|
||||
|
||||
if (!parsed){
|
||||
|
|
|
@ -65,8 +65,7 @@ public class StaticMessages {
|
|||
|
||||
byte[] peerIdBytes = Utils.hexStringToByteArr(peerId);
|
||||
|
||||
|
||||
HELLO_MESSAGE = new HelloMessage((byte)0x0C, (byte)0x00, "EthereumJ [v0.0.1] pure java [by Roman Mandeleil]",
|
||||
HELLO_MESSAGE = new HelloMessage((byte)0x0E, (byte)0x00, "EthereumJ [v0.0.1] pure java [by Roman Mandeleil]",
|
||||
(byte)0b00000111, (short)30303, peerIdBytes);
|
||||
|
||||
/*
|
||||
|
@ -76,6 +75,5 @@ public class StaticMessages {
|
|||
|
||||
}
|
||||
|
||||
|
||||
public static final HelloMessage HELLO_MESSAGE;
|
||||
}
|
||||
|
|
|
@ -1,24 +1,22 @@
|
|||
package org.ethereum.net.rlp;
|
||||
|
||||
import org.bouncycastle.util.Arrays;
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
* User: Roman Mandeleil
|
||||
* www.ethereumJ.com
|
||||
* User: Roman Mandeleil
|
||||
* Created on: 21/04/14 16:26
|
||||
*/
|
||||
public class RLPItem implements RLPElement{
|
||||
public class RLPItem implements RLPElement {
|
||||
|
||||
byte[] data;
|
||||
byte[] data;
|
||||
|
||||
public RLPItem(byte[] data) {
|
||||
this.data = data;
|
||||
}
|
||||
public RLPItem(byte[] data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
|
||||
if (data.length == 0) return null;
|
||||
return data;
|
||||
}
|
||||
public byte[] getData() {
|
||||
|
||||
if (data.length == 0)
|
||||
return null;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
package org.ethereum.net.rlp;
|
||||
|
||||
import org.bouncycastle.util.Arrays;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
import org.ethereum.util.Utils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.ethereum.util.Utils;
|
||||
|
||||
/**
|
||||
* www.ethereumJ.com
|
||||
* User: Roman Mandeleil
|
||||
|
@ -19,7 +15,6 @@ public class RLPList implements RLPElement{
|
|||
byte[] rlpData;
|
||||
List<RLPElement> list;
|
||||
|
||||
|
||||
public RLPList() {
|
||||
this.list = new ArrayList<RLPElement>();
|
||||
}
|
||||
|
@ -46,32 +41,29 @@ public class RLPList implements RLPElement{
|
|||
this.rlpData = rlpData;
|
||||
}
|
||||
|
||||
|
||||
public byte[] getRLPData(){
|
||||
|
||||
return rlpData;
|
||||
}
|
||||
|
||||
public static void recursivePrint(RLPElement element) {
|
||||
|
||||
public static void recursivePrint(RLPElement element){
|
||||
if (element == null)
|
||||
throw new Error("RLPElement object can't be null");
|
||||
if (element instanceof RLPList) {
|
||||
|
||||
if (element == null) throw new Error("RLPElement object can't be null");
|
||||
if (element instanceof RLPList){
|
||||
RLPList rlpList = (RLPList) element;
|
||||
|
||||
System.out.print("[");
|
||||
|
||||
for (RLPElement singleElement : rlpList.getList()) {
|
||||
recursivePrint(singleElement);
|
||||
}
|
||||
System.out.print("]");
|
||||
} else {
|
||||
|
||||
RLPList rlpList = (RLPList)element;
|
||||
System.out.print("[");
|
||||
for (RLPElement singleElement : rlpList.getList()){
|
||||
String hex = Utils.toHexString(((RLPItem) element).getData());
|
||||
|
||||
recursivePrint(singleElement);
|
||||
}
|
||||
System.out.print("]");
|
||||
} else {
|
||||
|
||||
String hex = Utils.toHexString(((RLPItem) element).getData());
|
||||
|
||||
System.out.print(hex + ", ");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
System.out.print(hex + ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,29 +15,27 @@ import java.io.FileReader;
|
|||
* User: Roman Mandeleil
|
||||
* Created on: 29/04/14 12:34
|
||||
*/
|
||||
public class SerpentCompiler{
|
||||
public class SerpentCompiler {
|
||||
|
||||
public static String compile(String code) throws FileNotFoundException, RecognitionException {
|
||||
public static String compile(String code) throws FileNotFoundException,
|
||||
RecognitionException {
|
||||
|
||||
CharStream stream =
|
||||
new ANTLRStringStream(code);
|
||||
CharStream stream = new ANTLRStringStream(code);
|
||||
|
||||
SerpentLexer lex = new SerpentLexer(stream);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lex);
|
||||
SerpentParser parser = new SerpentParser(tokens);
|
||||
SerpentLexer lex = new SerpentLexer(stream);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lex);
|
||||
SerpentParser parser = new SerpentParser(tokens);
|
||||
|
||||
String userDir = System.getProperty("user.dir");
|
||||
String templateFileName = userDir
|
||||
+ "\\src\\main\\java\\org\\ethereum\\serpent\\Serpent2Asm.stg";
|
||||
|
||||
String userDir = System.getProperty("user.dir");
|
||||
String templateFileName = userDir + "\\src\\main\\java\\org\\ethereum\\serpent\\Serpent2Asm.stg";
|
||||
StringTemplateGroup template = new StringTemplateGroup(new FileReader(
|
||||
templateFileName), AngleBracketTemplateLexer.class);
|
||||
parser.setTemplateLib(template);
|
||||
|
||||
StringTemplateGroup template = new StringTemplateGroup(new FileReader(templateFileName),
|
||||
AngleBracketTemplateLexer.class);
|
||||
parser.setTemplateLib(template);
|
||||
SerpentParser.program_return retVal = parser.program();
|
||||
|
||||
SerpentParser.program_return retVal = parser.program();
|
||||
|
||||
|
||||
|
||||
return retVal.getTemplate().toString().trim();
|
||||
}
|
||||
return retVal.getTemplate().toString().trim();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -127,8 +127,6 @@ public class BlockTest {
|
|||
System.out.println(Hex.toHexString(hash));
|
||||
|
||||
System.out.println("ab6b9a5613970faa771b12d449b2e9bb925ab7a369f0a4b86b286e9d540099cf");
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test /* got from go guy */
|
||||
|
@ -136,7 +134,6 @@ public class BlockTest {
|
|||
|
||||
byte[] goGenesisBytes = Hex.decode("f8a4f8a0a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794000000000000000000000000000000000000000080a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347834000008080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0");
|
||||
System.out.println( Hex.toHexString( Utils.sha3(goGenesisBytes) ) );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -155,8 +152,6 @@ public class BlockTest {
|
|||
RLPList.recursivePrint(rlpList);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,9 +22,6 @@ import static org.junit.Assert.assertEquals;
|
|||
*/
|
||||
public class RLPTest {
|
||||
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void test1() throws UnknownHostException {
|
||||
|
||||
|
@ -35,16 +32,11 @@ public class RLPTest {
|
|||
"E0 DE 49 98 33 4F 3B CF 73 FA 11 7E F2 13 F8 74 " +
|
||||
"17 08 9F EA F8 4C 21 B0";
|
||||
|
||||
|
||||
|
||||
byte[] payload = Utils.hexStringToByteArr(peersPacket);
|
||||
|
||||
|
||||
byte[] ip = RLP.decodeIP4Bytes(payload, 5);
|
||||
|
||||
assertEquals(InetAddress.getByAddress(ip).toString(),("/54.204.10.41"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -57,14 +49,10 @@ public class RLPTest {
|
|||
"E0 DE 49 98 33 4F 3B CF 73 FA 11 7E F2 13 F8 74 " +
|
||||
"17 08 9F EA F8 4C 21 B0";
|
||||
|
||||
|
||||
|
||||
byte[] payload = Utils.hexStringToByteArr(peersPacket);
|
||||
int oneInt = RLP.decodeInt(payload, 11);
|
||||
|
||||
assertEquals(oneInt, 30303);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -120,7 +108,6 @@ public class RLPTest {
|
|||
nextIndex = RLP.getNextElementIndex(payload, nextIndex);
|
||||
nextIndex = RLP.getFirstListElement(payload, nextIndex);
|
||||
assertEquals(-1, nextIndex);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -171,7 +158,6 @@ public class RLPTest {
|
|||
byte[] data = RLP.encodeString("");
|
||||
Assert.assertArrayEquals(new byte[]{(byte)0x80}, data);
|
||||
|
||||
|
||||
byte[] expected = { (byte)0x90, (byte)0x45, (byte)0x74, (byte)0x68, (byte)0x65, (byte)0x72, (byte)0x65,
|
||||
(byte)0x75, (byte)0x6D, (byte)0x4A, (byte)0x20, (byte)0x43, (byte)0x6C,
|
||||
(byte)0x69, (byte)0x65, (byte)0x6E, (byte)0x74};
|
||||
|
@ -221,7 +207,6 @@ public class RLPTest {
|
|||
@Test /** encode byte array */
|
||||
public void test7(){
|
||||
|
||||
|
||||
String byteArr = "CE 73 66 0A 06 62 6C 1B 3F DA 7B 18 EF 7B A3 CE " +
|
||||
"17 B6 BF 60 4F 95 41 D3 C6 C6 54 B7 AE 88 B2 39 " +
|
||||
"40 7F 65 9C 78 F4 19 02 5D 78 57 27 ED 01 7B 6A " +
|
||||
|
@ -233,20 +218,16 @@ public class RLPTest {
|
|||
|
||||
Assert.assertArrayEquals(Utils.hexStringToByteArr(expected),
|
||||
RLP.encodeElement(byteArray));
|
||||
|
||||
}
|
||||
|
||||
@Test /** encode list */
|
||||
public void test8(){
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test /** found bug encode list affects element value,
|
||||
hhh... not really at the end but keep the test */
|
||||
public void test9(){
|
||||
|
||||
|
||||
/* 2 */ byte[] prevHash =
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
@ -265,10 +246,8 @@ public class RLPTest {
|
|||
byte[] header = RLP.encodeList(
|
||||
prevHash, uncleList, coinbase);
|
||||
|
||||
|
||||
Assert.assertEquals("f856a000000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000",
|
||||
Hex.toHexString(header));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -28,30 +28,25 @@ public class TransactionTest {
|
|||
@Test /* sign transaction https://tools.ietf.org/html/rfc6979 */
|
||||
public void test1() throws NoSuchProviderException, NoSuchAlgorithmException, InvalidKeyException, IOException {
|
||||
|
||||
|
||||
//python taken exact data
|
||||
String txRLPRawData = "a9e880872386f26fc1000085e8d4a510008203e89413978aee95f38490e9769c39b2773ed763d9cd5f80";
|
||||
|
||||
|
||||
// String txRLPRawData = "f82804881bc16d674ec8000094cd2a3d9f938e13cd947ec05abc7fe734df8dd8268609184e72a0006480";
|
||||
String cowPrivKey = "c85ef7d79691fe79573b1a7064c19c1a9819ebdbd1faaab1a8ec92344438aaf4";
|
||||
|
||||
byte[] data = Hex.decode(txRLPRawData);
|
||||
byte[] privKey = Hex.decode(cowPrivKey);
|
||||
|
||||
|
||||
// step 1: serialize + RLP encode
|
||||
// step 2: hash = sha3(step1)
|
||||
byte[] txHash = Utils.sha3(data);
|
||||
|
||||
|
||||
X9ECParameters curvParams = SECNamedCurves.getByName("secp256k1");
|
||||
|
||||
// z = hash_to_int(msghash)
|
||||
// k = deterministic_generate_k(msghash,priv)
|
||||
BigInteger txHashInt = new BigInteger(1, txHash );
|
||||
|
||||
|
||||
/*
|
||||
v = '\x01' * 32
|
||||
k = '\x00' * 32
|
||||
|
@ -84,7 +79,6 @@ public class TransactionTest {
|
|||
hmac.init(secretKey);
|
||||
hmac.reset();
|
||||
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(v.length + 1 + privKey.length + txHash.length);
|
||||
baos.write(v);
|
||||
baos.write(new byte[]{00});
|
||||
|
@ -101,8 +95,6 @@ public class TransactionTest {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test /* achieve public key of the sender */
|
||||
public void test2(){
|
||||
|
||||
|
@ -118,11 +110,6 @@ public class TransactionTest {
|
|||
|
||||
String txHash = Hex.toHexString(Utils.sha3(rawTxBytes));
|
||||
System.out.println(txHash);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue