mirror of
https://github.com/sparrowwallet/drongo.git
synced 2024-12-26 01:56:44 +00:00
add block header serialization and output descriptor normalize functions
This commit is contained in:
parent
fa18ec9d45
commit
692f23e026
2 changed files with 51 additions and 0 deletions
|
@ -275,6 +275,10 @@ public class OutputDescriptor {
|
||||||
return wallet;
|
return wallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String toDescriptorString(Address address) {
|
||||||
|
return "addr(" + address + ")";
|
||||||
|
}
|
||||||
|
|
||||||
public static OutputDescriptor getOutputDescriptor(Wallet wallet) {
|
public static OutputDescriptor getOutputDescriptor(Wallet wallet) {
|
||||||
return getOutputDescriptor(wallet, null);
|
return getOutputDescriptor(wallet, null);
|
||||||
}
|
}
|
||||||
|
@ -392,6 +396,17 @@ public class OutputDescriptor {
|
||||||
return new OutputDescriptor(scriptType, multisigThreshold, keyDerivationMap, keyChildDerivationMap);
|
return new OutputDescriptor(scriptType, multisigThreshold, keyDerivationMap, keyChildDerivationMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String normalize(String descriptor) {
|
||||||
|
String normalized = descriptor.replaceAll("'", "h");
|
||||||
|
|
||||||
|
int checksumHash = normalized.lastIndexOf('#');
|
||||||
|
if(checksumHash > -1) {
|
||||||
|
normalized = normalized.substring(0, checksumHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalized + "#" + getChecksum(normalized);
|
||||||
|
}
|
||||||
|
|
||||||
private static String getChecksum(String descriptor) {
|
private static String getChecksum(String descriptor) {
|
||||||
BigInteger c = BigInteger.valueOf(1);
|
BigInteger c = BigInteger.valueOf(1);
|
||||||
int cls = 0;
|
int cls = 0;
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
package com.sparrowwallet.drongo.protocol;
|
package com.sparrowwallet.drongo.protocol;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static com.sparrowwallet.drongo.Utils.uint32ToByteStreamLE;
|
||||||
|
|
||||||
public class BlockHeader extends Message {
|
public class BlockHeader extends Message {
|
||||||
private long version;
|
private long version;
|
||||||
private Sha256Hash prevBlockHash;
|
private Sha256Hash prevBlockHash;
|
||||||
|
@ -14,6 +19,16 @@ public class BlockHeader extends Message {
|
||||||
super(rawheader, 0);
|
super(rawheader, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BlockHeader(long version, Sha256Hash prevBlockHash, Sha256Hash merkleRoot, Sha256Hash witnessRoot, long time, long difficultyTarget, long nonce) {
|
||||||
|
this.version = version;
|
||||||
|
this.prevBlockHash = prevBlockHash;
|
||||||
|
this.merkleRoot = merkleRoot;
|
||||||
|
this.witnessRoot = witnessRoot;
|
||||||
|
this.time = time;
|
||||||
|
this.difficultyTarget = difficultyTarget;
|
||||||
|
this.nonce = nonce;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void parse() throws ProtocolException {
|
protected void parse() throws ProtocolException {
|
||||||
version = readUint32();
|
version = readUint32();
|
||||||
|
@ -57,4 +72,25 @@ public class BlockHeader extends Message {
|
||||||
public long getNonce() {
|
public long getNonce() {
|
||||||
return nonce;
|
return nonce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte[] bitcoinSerialize() {
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
bitcoinSerializeToStream(outputStream);
|
||||||
|
return outputStream.toByteArray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
//can't happen
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void bitcoinSerializeToStream(OutputStream stream) throws IOException {
|
||||||
|
uint32ToByteStreamLE(version, stream);
|
||||||
|
stream.write(prevBlockHash.getReversedBytes());
|
||||||
|
stream.write(merkleRoot.getReversedBytes());
|
||||||
|
uint32ToByteStreamLE(time, stream);
|
||||||
|
uint32ToByteStreamLE(difficultyTarget, stream);
|
||||||
|
uint32ToByteStreamLE(nonce, stream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue