Skip to content

Commit 8dbea61

Browse files
committed
remove unused raw scan function, simplify address extract from tx output
1 parent 1e1a7ea commit 8dbea61

7 files changed

Lines changed: 33 additions & 90 deletions

File tree

api/src/main/java/com/bitsofproof/supernode/api/BCSAPI.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.bitsofproof.supernode.api;
1717

18-
import java.util.Collection;
1918
import java.util.Set;
2019

2120
import com.bitsofproof.supernode.common.BloomFilter.UpdateMode;
@@ -138,15 +137,6 @@ public interface BCSAPI
138137
public void scanTransactionsForAddresses (Set<Address> addresses, UpdateMode mode, long after, TransactionListener listener)
139138
throws BCSAPIException;
140139

141-
/**
142-
* Scan transactions using generic binary match.
143-
*
144-
* @param match
145-
* @param listener
146-
* @throws BCSAPIException
147-
*/
148-
public void scanTransactions (Collection<byte[]> match, UpdateMode mode, long after, TransactionListener listener) throws BCSAPIException;
149-
150140
/**
151141
* Scan transactions for an account
152142
*
@@ -166,15 +156,6 @@ public void scanTransactionsForAddresses (Set<Address> addresses, UpdateMode mod
166156
*/
167157
public void scanUTXOForAddresses (Set<Address> addresses, UpdateMode mode, long after, TransactionListener listener) throws BCSAPIException;
168158

169-
/**
170-
* Scan unspent transactions using and address or outpoint in match.
171-
*
172-
* @param match
173-
* @param listener
174-
* @throws BCSAPIException
175-
*/
176-
public void scanUTXO (Collection<byte[]> match, UpdateMode mode, long after, TransactionListener listener) throws BCSAPIException;
177-
178159
/**
179160
* Scan unspent transactions for an account
180161
*

api/src/main/java/com/bitsofproof/supernode/api/JMSServerConnector.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,6 @@ public void scanUTXOForAddresses (Set<Address> addresses, UpdateMode mode, long
335335
scanUTXO (al, mode, after, listener);
336336
}
337337

338-
@Override
339338
public void scanUTXO (Collection<byte[]> match, UpdateMode mode, long after, TransactionListener listener) throws BCSAPIException
340339
{
341340
scanRequest (match, mode, after, listener, "utxoMatchRequest");
@@ -347,7 +346,6 @@ public void scanUTXO (ExtendedKey master, int firstIndex, int lookAhead, long af
347346
scanRequest (master, firstIndex, lookAhead, after, listener, "utxoAccountRequest");
348347
}
349348

350-
@Override
351349
public void scanTransactions (Collection<byte[]> match, UpdateMode mode, long after, final TransactionListener listener) throws BCSAPIException
352350
{
353351
scanRequest (match, mode, after, listener, "matchRequest");

api/src/main/java/com/bitsofproof/supernode/api/TransactionOutput.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,9 @@
1616
package com.bitsofproof.supernode.api;
1717

1818
import java.io.Serializable;
19-
import java.util.List;
2019

21-
import com.bitsofproof.supernode.api.Address.Type;
2220
import com.bitsofproof.supernode.common.Hash;
2321
import com.bitsofproof.supernode.common.ScriptFormat;
24-
import com.bitsofproof.supernode.common.ScriptFormat.Token;
25-
import com.bitsofproof.supernode.common.ValidationException;
2622
import com.bitsofproof.supernode.common.WireFormat;
2723
import com.google.protobuf.ByteString;
2824

@@ -106,31 +102,7 @@ public static TransactionOutput fromWire (WireFormat.Reader reader)
106102

107103
public Address getOutputAddress ()
108104
{
109-
if ( ScriptFormat.isPayToAddress (script) )
110-
{
111-
List<Token> tokens;
112-
try
113-
{
114-
tokens = ScriptFormat.parse (script);
115-
return new Address (Type.COMMON, tokens.get (2).data);
116-
}
117-
catch ( ValidationException e )
118-
{
119-
}
120-
}
121-
else if ( ScriptFormat.isPayToScriptHash (script) )
122-
{
123-
List<Token> tokens;
124-
try
125-
{
126-
tokens = ScriptFormat.parse (script);
127-
return new Address (Type.P2SH, tokens.get (1).data);
128-
}
129-
catch ( ValidationException e )
130-
{
131-
}
132-
}
133-
return null;
105+
return ScriptFormat.getAddress (script);
134106
}
135107

136108
@Override

api/src/main/java/com/bitsofproof/supernode/common/BloomFilter.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,6 @@ public BloomFilter (byte[] data, long hashFunctions, long tweak, UpdateMode upda
6666
this.update = update;
6767
}
6868

69-
public void addAddress (String address, int addressFlag) throws ValidationException
70-
{
71-
add (Address.fromSatoshiStyle (address, addressFlag));
72-
}
73-
7469
public static byte[] serializedOutpoint (String hash, long ix)
7570
{
7671
WireFormat.Writer writer = new WireFormat.Writer ();
@@ -79,9 +74,11 @@ public static byte[] serializedOutpoint (String hash, long ix)
7974
return writer.toByteArray ();
8075
}
8176

82-
public void addOutpoint (String hash, long ix)
77+
public int addOutpoint (String hash, long ix)
8378
{
84-
add (serializedOutpoint (hash, ix));
79+
byte[] point = serializedOutpoint (hash, ix);
80+
add (point);
81+
return Arrays.hashCode (point);
8582
}
8683

8784
public boolean containsOutpoint (String hash, long ix)
@@ -104,12 +101,13 @@ private boolean testBit (int n)
104101
return (filter[n >>> 3] & 1 << (7 & n)) != 0;
105102
}
106103

107-
public void add (byte[] data)
104+
public int add (byte[] data)
108105
{
109106
for ( int i = 0; i < hashFunctions; ++i )
110107
{
111108
setBit ((int) ((murmurhash3bit (i, data, tweak) & 0xFFFFFFFFL) % (filter.length * 8)));
112109
}
110+
return Arrays.hashCode (data);
113111
}
114112

115113
public boolean contains (byte[] data)

api/src/main/java/com/bitsofproof/supernode/common/ScriptFormat.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
import java.util.List;
2323
import java.util.StringTokenizer;
2424

25+
import com.bitsofproof.supernode.api.Address;
26+
import com.bitsofproof.supernode.api.Address.Type;
27+
2528
public class ScriptFormat
2629
{
2730
// unfortunatelly unused: https://bitcointalk.org/index.php?topic=120836.0
@@ -718,6 +721,29 @@ public static boolean isPayToAddress (byte[] script)
718721
}
719722
}
720723

724+
public static Address getAddress (byte[] script)
725+
{
726+
try
727+
{
728+
List<ScriptFormat.Token> parsed = parse (script);
729+
if ( parsed.size () == 5 && parsed.get (0).op == ScriptFormat.Opcode.OP_DUP && parsed.get (1).op == ScriptFormat.Opcode.OP_HASH160
730+
&& parsed.get (2).data != null && parsed.get (2).data.length == 20 && parsed.get (3).op == ScriptFormat.Opcode.OP_EQUALVERIFY
731+
&& parsed.get (4).op == ScriptFormat.Opcode.OP_CHECKSIG )
732+
{
733+
return new Address (Type.COMMON, parsed.get (2).data);
734+
}
735+
if ( parsed.size () == 3 && parsed.get (0).op == ScriptFormat.Opcode.OP_HASH160 && (parsed.get (1).data != null && parsed.get (1).op.o <= 75)
736+
&& parsed.get (1).data.length == 20 && parsed.get (2).op == ScriptFormat.Opcode.OP_EQUAL )
737+
{
738+
return new Address (Type.P2SH, parsed.get (1).data);
739+
}
740+
}
741+
catch ( Exception e )
742+
{
743+
}
744+
return null;
745+
}
746+
721747
public static boolean isMultiSig (byte[] script)
722748
{
723749
try

server/src/main/java/com/bitsofproof/supernode/core/BlockStore.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.List;
1919
import java.util.Set;
2020

21-
import com.bitsofproof.supernode.common.BloomFilter;
2221
import com.bitsofproof.supernode.common.BloomFilter.UpdateMode;
2322
import com.bitsofproof.supernode.common.ByteVector;
2423
import com.bitsofproof.supernode.common.ExtendedKey;
@@ -74,8 +73,6 @@ public interface TransactionProcessor
7473

7574
public List<String> getInventory (List<String> locator, String last, int limit);
7675

77-
public void scan (BloomFilter filter, TransactionProcessor processor) throws ValidationException;
78-
7976
public void filterTransactions (boolean utxo, Set<ByteVector> match, UpdateMode update, long after, TransactionProcessor processor)
8077
throws ValidationException;
8178

server/src/main/java/com/bitsofproof/supernode/model/LvlStore.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.slf4j.Logger;
2828
import org.slf4j.LoggerFactory;
2929

30-
import com.bitsofproof.supernode.common.BloomFilter;
3130
import com.bitsofproof.supernode.common.Hash;
3231
import com.bitsofproof.supernode.common.ValidationException;
3332
import com.bitsofproof.supernode.common.WireFormat;
@@ -420,34 +419,6 @@ protected Blk retrieveBlockHeader (CachedBlock cached) throws ValidationExceptio
420419
return readBlk (cached.getHash (), false);
421420
}
422421

423-
@Override
424-
public void scan (final BloomFilter filter, final TransactionProcessor processor)
425-
{
426-
store.forAll (KeyType.TX, new DataProcessor ()
427-
{
428-
@Override
429-
public boolean process (byte[] key, byte[] data)
430-
{
431-
Tx t;
432-
try
433-
{
434-
t = Tx.fromLevelDB (data);
435-
if ( t.passesFilter (filter) && isOnTrunk (t.getBlockHash ()) )
436-
{
437-
processor.process (t);
438-
}
439-
}
440-
catch ( ValidationException e )
441-
{
442-
log.error ("Can not read transaction ", e);
443-
return false;
444-
}
445-
return true;
446-
}
447-
});
448-
processor.process (null);
449-
}
450-
451422
@Override
452423
public boolean isEmpty ()
453424
{

0 commit comments

Comments
 (0)