OSDN Git Service

refactor
authorshenao78 <shenao.78@163.com>
Thu, 21 Mar 2019 06:27:21 +0000 (14:27 +0800)
committershenao78 <shenao.78@163.com>
Thu, 21 Mar 2019 06:27:21 +0000 (14:27 +0800)
tx-signer/src/main/java/io/bytom/api/BaseInput.java
tx-signer/src/main/java/io/bytom/api/IssuanceInput.java
tx-signer/src/main/java/io/bytom/api/Output.java
tx-signer/src/main/java/io/bytom/api/SpendInput.java
tx-signer/src/main/java/io/bytom/api/Transaction.java
tx-signer/src/main/java/io/bytom/api/WitnessComponent.java
tx-signer/src/main/java/io/bytom/common/Configuration.java [deleted file]
tx-signer/src/main/java/io/bytom/common/SuccessRespon.java [deleted file]
tx-signer/src/main/java/io/bytom/common/Utils.java

index 9d3d2ad..0332177 100644 (file)
@@ -1,6 +1,9 @@
 package io.bytom.api;
 
+import io.bytom.common.Utils;
 import io.bytom.types.*;
+
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.Map;
 
@@ -42,9 +45,20 @@ public abstract class BaseInput {
 
     public BaseInput() {}
 
-    public abstract InputEntry convertInputEntry(Map<Hash, Entry> entryMap, int index);
-    public abstract byte[] serializeInput() throws IOException;
+    public abstract InputEntry toInputEntry(Map<Hash, Entry> entryMap, int index);
     public abstract void buildWitness(String txID) throws Exception;
+    public abstract byte[] serializeInputCommitment() throws IOException;
+    public abstract byte[] serializeInputWitness() throws IOException;
+
+    public byte[] serializeInput() throws IOException {
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        // assert version
+        Utils.writeVarint(1, stream);
+        Utils.writeExtensibleString(serializeInputCommitment(), stream);
+        Utils.writeExtensibleString(serializeInputWitness(), stream);
+        return stream.toByteArray();
+    }
+
 
     public void validate() {
         if (assetId == null) {
index 7beb753..5d97da9 100644 (file)
@@ -33,7 +33,7 @@ public class IssuanceInput extends BaseInput {
     }
 
     @Override
-    public InputEntry convertInputEntry(Map<Hash, Entry> entryMap, int index) {
+    public InputEntry toInputEntry(Map<Hash, Entry> entryMap, int index) {
         if (this.nonce == null) {
             SecureRandom sr = new SecureRandom();
             byte[] randBytes = new byte[8];
@@ -45,45 +45,8 @@ public class IssuanceInput extends BaseInput {
         Hash assetDefHash = new Hash(this.rawAssetDefinition);
         AssetAmount value = this.getAssetAmount();
 
-        Program pro = new Program(this.getVmVersion(), Hex.decode(this.getProgram()));
-        return new Issue(nonceHash, value, index, new AssetDefinition(assetDefHash, pro));
-    }
-
-    @Override
-    public byte[] serializeInput() throws IOException {
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        //assetVersion
-        Utils.writeVarint(1, stream);
-
-        ByteArrayOutputStream issueInfo = new ByteArrayOutputStream();
-        Utils.writeVarint(ISSUANCE_INPUT_TYPE, issueInfo);
-        Utils.writeVarStr(Hex.decode(nonce), issueInfo);
-        issueInfo.write(Hex.decode(getAssetId()));
-        Utils.writeVarint(getAmount(), issueInfo);
-        stream.write(issueInfo.toByteArray().length);
-        stream.write(issueInfo.toByteArray());
-
-        ByteArrayOutputStream issueInfo1 = new ByteArrayOutputStream();
-        Utils.writeVarint(1, issueInfo1);
-        Utils.writeVarStr(Hex.decode(rawAssetDefinition), issueInfo1);
-        // vm version
-        Utils.writeVarint(1, issueInfo1);
-        Utils.writeVarStr(Hex.decode(getProgram()), issueInfo1);
-
-        //inputWitness
-        ByteArrayOutputStream witnessStream = new ByteArrayOutputStream();
-        //arguments
-        int witnessSize = witnessComponent.size();
-        //arguments的length
-        Utils.writeVarint(witnessSize, witnessStream);
-        for (int i = 0; i < witnessSize; i++) {
-            String witness = witnessComponent.getWitness(i);
-            Utils.writeVarStr(Hex.decode(witness), witnessStream);
-        }
-        issueInfo1.write(witnessStream.toByteArray());
-        stream.write(issueInfo1.toByteArray().length - 1);
-        stream.write(issueInfo1.toByteArray());
-        return stream.toByteArray();
+        Program program = new Program(this.getVmVersion(), Hex.decode(this.getProgram()));
+        return new Issue(nonceHash, value, index, new AssetDefinition(assetDefHash, program));
     }
 
     @Override
@@ -99,6 +62,27 @@ public class IssuanceInput extends BaseInput {
     }
 
     @Override
+    public byte[] serializeInputCommitment() throws IOException {
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        Utils.writeVarint(ISSUANCE_INPUT_TYPE, stream);
+        Utils.writeVarStr(Hex.decode(nonce), stream);
+        stream.write(Hex.decode(getAssetId()));
+        Utils.writeVarint(getAmount(), stream);
+        return stream.toByteArray();
+    }
+
+    @Override
+    public byte[] serializeInputWitness() throws IOException {
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        Utils.writeVarStr(Hex.decode(rawAssetDefinition), stream);
+        // vm version
+        Utils.writeVarint(1, stream);
+        Utils.writeVarStr(Hex.decode(getProgram()), stream);
+        Utils.writeVarList(witnessComponent.toByteArray(), stream);
+        return new byte[0];
+    }
+
+    @Override
     public void validate() {
         super.validate();
         if (nonce == null) {
index b48d23d..47770b7 100644 (file)
@@ -54,10 +54,7 @@ public class Output {
         //controlProgram
         Utils.writeVarStr(Hex.decode(controlProgram), outputCommitSteam);
 
-        byte[] dataOutputCommit = outputCommitSteam.toByteArray();
-        //outputCommit的length
-        Utils.writeVarint(dataOutputCommit.length, stream);
-        stream.write(dataOutputCommit);
+        Utils.writeExtensibleString(outputCommitSteam.toByteArray(), stream);
 
         //outputWitness
         Utils.writeVarint(0, stream);
index e6f407c..76afadf 100644 (file)
@@ -34,67 +34,19 @@ public class SpendInput extends BaseInput {
     }
 
     @Override
-    public InputEntry convertInputEntry(Map<Hash, Entry> entryMap, int index) {
+    public InputEntry toInputEntry(Map<Hash, Entry> entryMap, int index) {
         Program pro = new Program(this.getVmVersion(), Hex.decode(this.getProgram()));
         AssetAmount assetAmount = this.getAssetAmount();
         Hash sourceID = new Hash(this.sourceID);
         ValueSource src = new ValueSource(sourceID, assetAmount, this.sourcePosition);
 
-        OutputEntry prevout = new OutputEntry(src, pro, 0);
-        Hash prevOutID = prevout.entryID();
-        entryMap.put(prevOutID, prevout);
+        OutputEntry prevOut = new OutputEntry(src, pro, 0);
+        Hash prevOutID = prevOut.entryID();
+        entryMap.put(prevOutID, prevOut);
         return new Spend(prevOutID, index);
     }
 
     @Override
-    public byte[] serializeInput() throws IOException {
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        //assetVersion
-        Utils.writeVarint(1, stream); //AssetVersion是否默认为1
-
-        //inputCommitment
-        ByteArrayOutputStream inputCommitStream = new ByteArrayOutputStream();
-        //spend type flag
-        Utils.writeVarint(SPEND_INPUT_TYPE, inputCommitStream);
-        //spendCommitment
-        ByteArrayOutputStream spendCommitSteam = new ByteArrayOutputStream();
-        spendCommitSteam.write(Hex.decode(sourceID)); //计算muxID
-        spendCommitSteam.write(Hex.decode(getAssetId()));
-        Utils.writeVarint(getAmount(), spendCommitSteam);
-        //sourcePosition
-        Utils.writeVarint(sourcePosition, spendCommitSteam); //db中获取position
-        //vmVersion
-        Utils.writeVarint(1, spendCommitSteam); //db中获取vm_version
-        //controlProgram
-        Utils.writeVarStr(Hex.decode(getProgram()), spendCommitSteam);
-
-        byte[] dataSpendCommit = spendCommitSteam.toByteArray();
-
-        Utils.writeVarint(dataSpendCommit.length, inputCommitStream);
-        inputCommitStream.write(dataSpendCommit);
-        byte[] dataInputCommit = inputCommitStream.toByteArray();
-        //inputCommit的length
-        Utils.writeVarint(dataInputCommit.length, stream);
-        stream.write(dataInputCommit);
-
-        //inputWitness
-        ByteArrayOutputStream witnessStream = new ByteArrayOutputStream();
-        //arguments
-        int witnessSize = witnessComponent.size();
-        //arguments的length
-        Utils.writeVarint(witnessSize, witnessStream);
-        for (int i = 0; i < witnessSize; i++) {
-            String witness = witnessComponent.getWitness(i);
-            Utils.writeVarStr(Hex.decode(witness), witnessStream);
-        }
-        byte[] dataWitnessComponents = witnessStream.toByteArray();
-        //witness的length
-        Utils.writeVarint(dataWitnessComponents.length, stream);
-        stream.write(dataWitnessComponents);
-        return stream.toByteArray();
-    }
-
-    @Override
     public void buildWitness(String txID) throws Exception {
         String rootPrvKey = witnessComponent.getRootPrivateKey();
 
@@ -118,6 +70,30 @@ public class SpendInput extends BaseInput {
     }
 
     @Override
+    public byte[] serializeInputCommitment() throws IOException {
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        Utils.writeVarint(SPEND_INPUT_TYPE, stream);
+
+        ByteArrayOutputStream spendCommitSteam = new ByteArrayOutputStream();
+        spendCommitSteam.write(Hex.decode(sourceID));
+        spendCommitSteam.write(Hex.decode(getAssetId()));
+        Utils.writeVarint(getAmount(), spendCommitSteam);
+        Utils.writeVarint(sourcePosition, spendCommitSteam);
+        // vm version
+        Utils.writeVarint(1, spendCommitSteam);
+        Utils.writeVarStr(Hex.decode(getProgram()), spendCommitSteam);
+        Utils.writeExtensibleString(spendCommitSteam.toByteArray(), stream);
+        return stream.toByteArray();
+    }
+
+    @Override
+    public byte[] serializeInputWitness() throws IOException {
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        Utils.writeVarList(witnessComponent.toByteArray(), stream);
+        return stream.toByteArray();
+    }
+
+    @Override
     public void validate() {
         super.validate();
         if (sourceID == null) {
index d1de055..5ec2d55 100755 (executable)
@@ -151,7 +151,7 @@ public class Transaction {
         try {\r
             for (int i = 0; i < inputs.size(); i++) {\r
                 BaseInput input = inputs.get(i);\r
-                InputEntry inputEntry =  input.convertInputEntry(entryMap, i);\r
+                InputEntry inputEntry =  input.toInputEntry(entryMap, i);\r
                 Hash spendID = addEntry(entryMap, inputEntry);\r
                 input.setInputID(spendID.toString());\r
 \r
index 2d25a48..0862e39 100644 (file)
@@ -1,5 +1,7 @@
 package io.bytom.api;
 
+import org.bouncycastle.util.encoders.Hex;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -21,8 +23,12 @@ public class WitnessComponent {
         witnesses = new ArrayList<>();
     }
 
-    public int size() {
-        return witnesses.size();
+    public byte[][] toByteArray() {
+        byte[][] byteArray = new byte[witnesses.size()][];
+        for (int i = 0; i < witnesses.size(); i++) {
+            byteArray[i] = Hex.decode(witnesses.get(i));
+        }
+        return byteArray;
     }
 
     public String getWitness(int index) {
diff --git a/tx-signer/src/main/java/io/bytom/common/Configuration.java b/tx-signer/src/main/java/io/bytom/common/Configuration.java
deleted file mode 100755 (executable)
index 890f35d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-package io.bytom.common;\r
-\r
-import java.io.FileNotFoundException;\r
-import java.io.IOException;\r
-import java.util.Properties;\r
-\r
-public class Configuration {\r
-\r
-    private static Properties props = new Properties();\r
-\r
-    static {\r
-        try {\r
-            props.load(Thread.currentThread().getContextClassLoader()\r
-                    .getResourceAsStream("config.properties"));\r
-        } catch (FileNotFoundException e) {\r
-            e.printStackTrace();\r
-        } catch (IOException e) {\r
-            e.printStackTrace();\r
-        }\r
-    }\r
-\r
-    public static String getValue(String key) {\r
-        return props.getProperty(key);\r
-    }\r
-\r
-    public static void updateProperties(String key, String value) {\r
-        props.setProperty(key, value);\r
-    }\r
-\r
-}\r
diff --git a/tx-signer/src/main/java/io/bytom/common/SuccessRespon.java b/tx-signer/src/main/java/io/bytom/common/SuccessRespon.java
deleted file mode 100755 (executable)
index 9dea6a9..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package io.bytom.common;\r
-\r
-import com.google.gson.annotations.SerializedName;\r
-\r
-public class SuccessRespon<T> {\r
-    public String status;\r
-    @SerializedName("data")\r
-    public T dataObject;\r
-}\r
index 0d7eaef..49a3596 100755 (executable)
@@ -36,6 +36,20 @@ public class Utils {
         return n + (buf.length);\r
     }\r
 \r
+    public static int writeVarList(byte[][] list, ByteArrayOutputStream stream) throws IOException {\r
+        int n = writeVarint(list.length, stream);\r
+        for (byte[] bytes : list) {\r
+            n += writeVarStr(bytes, stream);\r
+        }\r
+        return n;\r
+    }\r
+\r
+    public static int writeExtensibleString(byte[] bytes, ByteArrayOutputStream stream) throws IOException {\r
+        int n = writeVarint(bytes.length, stream);\r
+        stream.write(bytes);\r
+        return n + bytes.length;\r
+    }\r
+\r
     public static int getLengthVarInt(long x) {\r
         byte[] varint = new byte[9];\r
         int n = putUvarint(varint, x);\r