mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-11 17:55:53 +00:00
Added util class for processing name transactions.
This commit is contained in:
parent
a9fa671988
commit
7f873b69a6
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright 2016 Jeremy Rand.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.libdohj.names;
|
||||
|
||||
import org.libdohj.script.NameScript;
|
||||
|
||||
import org.bitcoinj.core.ScriptException;
|
||||
import org.bitcoinj.core.Transaction;
|
||||
import org.bitcoinj.core.TransactionOutput;
|
||||
import org.bitcoinj.script.Script;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
// TODO: document this
|
||||
|
||||
// TODO: look into allowing name and value to be ArrayList<byte> as an alternative to String.
|
||||
|
||||
public class NameTransactionUtils {
|
||||
|
||||
// Providing the name is, in theory, superfluous, since only 1 name output can exist per transaction.
|
||||
// However, this might be changed in the future, to allow atomic updates of multiple names.
|
||||
// This could enable things like CoinJoin for names.
|
||||
public static TransactionOutput getNameAnyUpdateOutput(Transaction tx, String name) {
|
||||
for (TransactionOutput output : tx.getOutputs()) {
|
||||
try {
|
||||
Script scriptPubKey = output.getScriptPubKey();
|
||||
NameScript ns = new NameScript(scriptPubKey);
|
||||
if(ns.isNameOp() && ns.isAnyUpdate() && new String(ns.getOpName().data, "ISO-8859-1").equals(name)) {
|
||||
return output;
|
||||
}
|
||||
} catch (ScriptException e) {
|
||||
continue;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// No such output was found.
|
||||
return null;
|
||||
}
|
||||
|
||||
public static NameScript getNameAnyUpdateScript(Transaction tx, String name) {
|
||||
TransactionOutput output = getNameAnyUpdateOutput(tx, name);
|
||||
|
||||
if (output == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Script scriptPubKey = output.getScriptPubKey();
|
||||
return new NameScript(scriptPubKey);
|
||||
}
|
||||
|
||||
public static String getNameValueAsString(Transaction tx, String name) throws UnsupportedEncodingException {
|
||||
NameScript ns = getNameAnyUpdateScript(tx, name);
|
||||
|
||||
if (ns == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new String(ns.getOpValue().data, "ISO-8859-1");
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user