3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-01-31 23:32:16 +00:00

Script: Use Guava ImmutableMap for the opcodes. This is more memory efficient. They could also be lazy initialized later if we need to.

This commit is contained in:
Mike Hearn 2013-04-29 14:16:48 +02:00
parent 69537c0bf0
commit dddf02d6a1

View File

@ -16,6 +16,8 @@
package com.google.bitcoin.script;
import com.google.common.collect.ImmutableMap;
import java.util.HashMap;
import java.util.Map;
@ -154,233 +156,231 @@ public class ScriptOpCodes {
public static final int OP_NOP10 = 0xb9;
public static final int OP_INVALIDOPCODE = 0xff;
private static final HashMap<Integer, String> opCodeMap = new HashMap<Integer, String>() {{
put(OP_0, "0");
put(OP_PUSHDATA1, "PUSHDATA1");
put(OP_PUSHDATA2, "PUSHDATA2");
put(OP_PUSHDATA4, "PUSHDATA4");
put(OP_1NEGATE, "1NEGATE");
put(OP_RESERVED, "RESERVED");
put(OP_1, "1");
put(OP_2, "2");
put(OP_3, "3");
put(OP_4, "4");
put(OP_5, "5");
put(OP_6, "6");
put(OP_7, "7");
put(OP_8, "8");
put(OP_9, "9");
put(OP_10, "10");
put(OP_11, "11");
put(OP_12, "12");
put(OP_13, "13");
put(OP_14, "14");
put(OP_15, "15");
put(OP_16, "16");
put(OP_NOP, "NOP");
put(OP_VER, "VER");
put(OP_IF, "IF");
put(OP_NOTIF, "NOTIF");
put(OP_VERIF, "VERIF");
put(OP_VERNOTIF, "VERNOTIF");
put(OP_ELSE, "ELSE");
put(OP_ENDIF, "ENDIF");
put(OP_VERIFY, "VERIFY");
put(OP_RETURN, "RETURN");
put(OP_TOALTSTACK, "TOALTSTACK");
put(OP_FROMALTSTACK, "FROMALTSTACK");
put(OP_2DROP, "2DROP");
put(OP_2DUP, "2DUP");
put(OP_3DUP, "3DUP");
put(OP_2OVER, "2OVER");
put(OP_2ROT, "2ROT");
put(OP_2SWAP, "2SWAP");
put(OP_IFDUP, "IFDUP");
put(OP_DEPTH, "DEPTH");
put(OP_DROP, "DROP");
put(OP_DUP, "DUP");
put(OP_NIP, "NIP");
put(OP_OVER, "OVER");
put(OP_PICK, "PICK");
put(OP_ROLL, "ROLL");
put(OP_ROT, "ROT");
put(OP_SWAP, "SWAP");
put(OP_TUCK, "TUCK");
put(OP_CAT, "CAT");
put(OP_SUBSTR, "SUBSTR");
put(OP_LEFT, "LEFT");
put(OP_RIGHT, "RIGHT");
put(OP_SIZE, "SIZE");
put(OP_INVERT, "INVERT");
put(OP_AND, "AND");
put(OP_OR, "OR");
put(OP_XOR, "XOR");
put(OP_EQUAL, "EQUAL");
put(OP_EQUALVERIFY, "EQUALVERIFY");
put(OP_RESERVED1, "RESERVED1");
put(OP_RESERVED2, "RESERVED2");
put(OP_1ADD, "1ADD");
put(OP_1SUB, "1SUB");
put(OP_2MUL, "2MUL");
put(OP_2DIV, "2DIV");
put(OP_NEGATE, "NEGATE");
put(OP_ABS, "ABS");
put(OP_NOT, "NOT");
put(OP_0NOTEQUAL, "0NOTEQUAL");
put(OP_ADD, "ADD");
put(OP_SUB, "SUB");
put(OP_MUL, "MUL");
put(OP_DIV, "DIV");
put(OP_MOD, "MOD");
put(OP_LSHIFT, "LSHIFT");
put(OP_RSHIFT, "RSHIFT");
put(OP_BOOLAND, "BOOLAND");
put(OP_BOOLOR, "BOOLOR");
put(OP_NUMEQUAL, "NUMEQUAL");
put(OP_NUMEQUALVERIFY, "NUMEQUALVERIFY");
put(OP_NUMNOTEQUAL, "NUMNOTEQUAL");
put(OP_LESSTHAN, "LESSTHAN");
put(OP_GREATERTHAN, "GREATERTHAN");
put(OP_LESSTHANOREQUAL, "LESSTHANOREQUAL");
put(OP_GREATERTHANOREQUAL, "GREATERTHANOREQUAL");
put(OP_MIN, "MIN");
put(OP_MAX, "MAX");
put(OP_WITHIN, "WITHIN");
put(OP_RIPEMD160, "RIPEMD160");
put(OP_SHA1, "SHA1");
put(OP_SHA256, "SHA256");
put(OP_HASH160, "HASH160");
put(OP_HASH256, "HASH256");
put(OP_CODESEPARATOR, "CODESEPARATOR");
put(OP_CHECKSIG, "CHECKSIG");
put(OP_CHECKSIGVERIFY, "CHECKSIGVERIFY");
put(OP_CHECKMULTISIG, "CHECKMULTISIG");
put(OP_CHECKMULTISIGVERIFY, "CHECKMULTISIGVERIFY");
put(OP_NOP1, "NOP1");
put(OP_NOP2, "NOP2");
put(OP_NOP3, "NOP3");
put(OP_NOP4, "NOP4");
put(OP_NOP5, "NOP5");
put(OP_NOP6, "NOP6");
put(OP_NOP7, "NOP7");
put(OP_NOP8, "NOP8");
put(OP_NOP9, "NOP9");
put(OP_NOP10, "NOP10");
}};
private static final Map<Integer, String> opCodeMap = ImmutableMap.<Integer, String>builder()
.put(OP_0, "0")
.put(OP_PUSHDATA1, "PUSHDATA1")
.put(OP_PUSHDATA2, "PUSHDATA2")
.put(OP_PUSHDATA4, "PUSHDATA4")
.put(OP_1NEGATE, "1NEGATE")
.put(OP_RESERVED, "RESERVED")
.put(OP_1, "1")
.put(OP_2, "2")
.put(OP_3, "3")
.put(OP_4, "4")
.put(OP_5, "5")
.put(OP_6, "6")
.put(OP_7, "7")
.put(OP_8, "8")
.put(OP_9, "9")
.put(OP_10, "10")
.put(OP_11, "11")
.put(OP_12, "12")
.put(OP_13, "13")
.put(OP_14, "14")
.put(OP_15, "15")
.put(OP_16, "16")
.put(OP_NOP, "NOP")
.put(OP_VER, "VER")
.put(OP_IF, "IF")
.put(OP_NOTIF, "NOTIF")
.put(OP_VERIF, "VERIF")
.put(OP_VERNOTIF, "VERNOTIF")
.put(OP_ELSE, "ELSE")
.put(OP_ENDIF, "ENDIF")
.put(OP_VERIFY, "VERIFY")
.put(OP_RETURN, "RETURN")
.put(OP_TOALTSTACK, "TOALTSTACK")
.put(OP_FROMALTSTACK, "FROMALTSTACK")
.put(OP_2DROP, "2DROP")
.put(OP_2DUP, "2DUP")
.put(OP_3DUP, "3DUP")
.put(OP_2OVER, "2OVER")
.put(OP_2ROT, "2ROT")
.put(OP_2SWAP, "2SWAP")
.put(OP_IFDUP, "IFDUP")
.put(OP_DEPTH, "DEPTH")
.put(OP_DROP, "DROP")
.put(OP_DUP, "DUP")
.put(OP_NIP, "NIP")
.put(OP_OVER, "OVER")
.put(OP_PICK, "PICK")
.put(OP_ROLL, "ROLL")
.put(OP_ROT, "ROT")
.put(OP_SWAP, "SWAP")
.put(OP_TUCK, "TUCK")
.put(OP_CAT, "CAT")
.put(OP_SUBSTR, "SUBSTR")
.put(OP_LEFT, "LEFT")
.put(OP_RIGHT, "RIGHT")
.put(OP_SIZE, "SIZE")
.put(OP_INVERT, "INVERT")
.put(OP_AND, "AND")
.put(OP_OR, "OR")
.put(OP_XOR, "XOR")
.put(OP_EQUAL, "EQUAL")
.put(OP_EQUALVERIFY, "EQUALVERIFY")
.put(OP_RESERVED1, "RESERVED1")
.put(OP_RESERVED2, "RESERVED2")
.put(OP_1ADD, "1ADD")
.put(OP_1SUB, "1SUB")
.put(OP_2MUL, "2MUL")
.put(OP_2DIV, "2DIV")
.put(OP_NEGATE, "NEGATE")
.put(OP_ABS, "ABS")
.put(OP_NOT, "NOT")
.put(OP_0NOTEQUAL, "0NOTEQUAL")
.put(OP_ADD, "ADD")
.put(OP_SUB, "SUB")
.put(OP_MUL, "MUL")
.put(OP_DIV, "DIV")
.put(OP_MOD, "MOD")
.put(OP_LSHIFT, "LSHIFT")
.put(OP_RSHIFT, "RSHIFT")
.put(OP_BOOLAND, "BOOLAND")
.put(OP_BOOLOR, "BOOLOR")
.put(OP_NUMEQUAL, "NUMEQUAL")
.put(OP_NUMEQUALVERIFY, "NUMEQUALVERIFY")
.put(OP_NUMNOTEQUAL, "NUMNOTEQUAL")
.put(OP_LESSTHAN, "LESSTHAN")
.put(OP_GREATERTHAN, "GREATERTHAN")
.put(OP_LESSTHANOREQUAL, "LESSTHANOREQUAL")
.put(OP_GREATERTHANOREQUAL, "GREATERTHANOREQUAL")
.put(OP_MIN, "MIN")
.put(OP_MAX, "MAX")
.put(OP_WITHIN, "WITHIN")
.put(OP_RIPEMD160, "RIPEMD160")
.put(OP_SHA1, "SHA1")
.put(OP_SHA256, "SHA256")
.put(OP_HASH160, "HASH160")
.put(OP_HASH256, "HASH256")
.put(OP_CODESEPARATOR, "CODESEPARATOR")
.put(OP_CHECKSIG, "CHECKSIG")
.put(OP_CHECKSIGVERIFY, "CHECKSIGVERIFY")
.put(OP_CHECKMULTISIG, "CHECKMULTISIG")
.put(OP_CHECKMULTISIGVERIFY, "CHECKMULTISIGVERIFY")
.put(OP_NOP1, "NOP1")
.put(OP_NOP2, "NOP2")
.put(OP_NOP3, "NOP3")
.put(OP_NOP4, "NOP4")
.put(OP_NOP5, "NOP5")
.put(OP_NOP6, "NOP6")
.put(OP_NOP7, "NOP7")
.put(OP_NOP8, "NOP8")
.put(OP_NOP9, "NOP9")
.put(OP_NOP10, "NOP10").build();
private static final HashMap<String, Integer> opCodeNameMap = new HashMap<String, Integer>() {{
put("0", OP_0);
put("PUSHDATA1", OP_PUSHDATA1);
put("PUSHDATA2", OP_PUSHDATA2);
put("PUSHDATA4", OP_PUSHDATA4);
put("1NEGATE", OP_1NEGATE);
put("RESERVED", OP_RESERVED);
put("1", OP_1);
put("2", OP_2);
put("3", OP_3);
put("4", OP_4);
put("5", OP_5);
put("6", OP_6);
put("7", OP_7);
put("8", OP_8);
put("9", OP_9);
put("10", OP_10);
put("11", OP_11);
put("12", OP_12);
put("13", OP_13);
put("14", OP_14);
put("15", OP_15);
put("16", OP_16);
put("NOP", OP_NOP);
put("VER", OP_VER);
put("IF", OP_IF);
put("NOTIF", OP_NOTIF);
put("VERIF", OP_VERIF);
put("VERNOTIF", OP_VERNOTIF);
put("ELSE", OP_ELSE);
put("ENDIF", OP_ENDIF);
put("VERIFY", OP_VERIFY);
put("RETURN", OP_RETURN);
put("TOALTSTACK", OP_TOALTSTACK);
put("FROMALTSTACK", OP_FROMALTSTACK);
put("2DROP", OP_2DROP);
put("2DUP", OP_2DUP);
put("3DUP", OP_3DUP);
put("2OVER", OP_2OVER);
put("2ROT", OP_2ROT);
put("2SWAP", OP_2SWAP);
put("IFDUP", OP_IFDUP);
put("DEPTH", OP_DEPTH);
put("DROP", OP_DROP);
put("DUP", OP_DUP);
put("NIP", OP_NIP);
put("OVER", OP_OVER);
put("PICK", OP_PICK);
put("ROLL", OP_ROLL);
put("ROT", OP_ROT);
put("SWAP", OP_SWAP);
put("TUCK", OP_TUCK);
put("CAT", OP_CAT);
put("SUBSTR", OP_SUBSTR);
put("LEFT", OP_LEFT);
put("RIGHT", OP_RIGHT);
put("SIZE", OP_SIZE);
put("INVERT", OP_INVERT);
put("AND", OP_AND);
put("OR", OP_OR);
put("XOR", OP_XOR);
put("EQUAL", OP_EQUAL);
put("EQUALVERIFY", OP_EQUALVERIFY);
put("RESERVED1", OP_RESERVED1);
put("RESERVED2", OP_RESERVED2);
put("1ADD", OP_1ADD);
put("1SUB", OP_1SUB);
put("2MUL", OP_2MUL);
put("2DIV", OP_2DIV);
put("NEGATE", OP_NEGATE);
put("ABS", OP_ABS);
put("NOT", OP_NOT);
put("0NOTEQUAL", OP_0NOTEQUAL);
put("ADD", OP_ADD);
put("SUB", OP_SUB);
put("MUL", OP_MUL);
put("DIV", OP_DIV);
put("MOD", OP_MOD);
put("LSHIFT", OP_LSHIFT);
put("RSHIFT", OP_RSHIFT);
put("BOOLAND", OP_BOOLAND);
put("BOOLOR", OP_BOOLOR);
put("NUMEQUAL", OP_NUMEQUAL);
put("NUMEQUALVERIFY", OP_NUMEQUALVERIFY);
put("NUMNOTEQUAL", OP_NUMNOTEQUAL);
put("LESSTHAN", OP_LESSTHAN);
put("GREATERTHAN", OP_GREATERTHAN);
put("LESSTHANOREQUAL", OP_LESSTHANOREQUAL);
put("GREATERTHANOREQUAL", OP_GREATERTHANOREQUAL);
put("MIN", OP_MIN);
put("MAX", OP_MAX);
put("WITHIN", OP_WITHIN);
put("RIPEMD160", OP_RIPEMD160);
put("SHA1", OP_SHA1);
put("SHA256", OP_SHA256);
put("HASH160", OP_HASH160);
put("HASH256", OP_HASH256);
put("CODESEPARATOR", OP_CODESEPARATOR);
put("CHECKSIG", OP_CHECKSIG);
put("CHECKSIGVERIFY", OP_CHECKSIGVERIFY);
put("CHECKMULTISIG", OP_CHECKMULTISIG);
put("CHECKMULTISIGVERIFY", OP_CHECKMULTISIGVERIFY);
put("NOP1", OP_NOP1);
put("NOP2", OP_NOP2);
put("NOP3", OP_NOP3);
put("NOP4", OP_NOP4);
put("NOP5", OP_NOP5);
put("NOP6", OP_NOP6);
put("NOP7", OP_NOP7);
put("NOP8", OP_NOP8);
put("NOP9", OP_NOP9);
put("NOP10", OP_NOP10);
}};
private static final Map<String, Integer> opCodeNameMap = ImmutableMap.<String, Integer>builder()
.put("0", OP_0)
.put("PUSHDATA1", OP_PUSHDATA1)
.put("PUSHDATA2", OP_PUSHDATA2)
.put("PUSHDATA4", OP_PUSHDATA4)
.put("1NEGATE", OP_1NEGATE)
.put("RESERVED", OP_RESERVED)
.put("1", OP_1)
.put("2", OP_2)
.put("3", OP_3)
.put("4", OP_4)
.put("5", OP_5)
.put("6", OP_6)
.put("7", OP_7)
.put("8", OP_8)
.put("9", OP_9)
.put("10", OP_10)
.put("11", OP_11)
.put("12", OP_12)
.put("13", OP_13)
.put("14", OP_14)
.put("15", OP_15)
.put("16", OP_16)
.put("NOP", OP_NOP)
.put("VER", OP_VER)
.put("IF", OP_IF)
.put("NOTIF", OP_NOTIF)
.put("VERIF", OP_VERIF)
.put("VERNOTIF", OP_VERNOTIF)
.put("ELSE", OP_ELSE)
.put("ENDIF", OP_ENDIF)
.put("VERIFY", OP_VERIFY)
.put("RETURN", OP_RETURN)
.put("TOALTSTACK", OP_TOALTSTACK)
.put("FROMALTSTACK", OP_FROMALTSTACK)
.put("2DROP", OP_2DROP)
.put("2DUP", OP_2DUP)
.put("3DUP", OP_3DUP)
.put("2OVER", OP_2OVER)
.put("2ROT", OP_2ROT)
.put("2SWAP", OP_2SWAP)
.put("IFDUP", OP_IFDUP)
.put("DEPTH", OP_DEPTH)
.put("DROP", OP_DROP)
.put("DUP", OP_DUP)
.put("NIP", OP_NIP)
.put("OVER", OP_OVER)
.put("PICK", OP_PICK)
.put("ROLL", OP_ROLL)
.put("ROT", OP_ROT)
.put("SWAP", OP_SWAP)
.put("TUCK", OP_TUCK)
.put("CAT", OP_CAT)
.put("SUBSTR", OP_SUBSTR)
.put("LEFT", OP_LEFT)
.put("RIGHT", OP_RIGHT)
.put("SIZE", OP_SIZE)
.put("INVERT", OP_INVERT)
.put("AND", OP_AND)
.put("OR", OP_OR)
.put("XOR", OP_XOR)
.put("EQUAL", OP_EQUAL)
.put("EQUALVERIFY", OP_EQUALVERIFY)
.put("RESERVED1", OP_RESERVED1)
.put("RESERVED2", OP_RESERVED2)
.put("1ADD", OP_1ADD)
.put("1SUB", OP_1SUB)
.put("2MUL", OP_2MUL)
.put("2DIV", OP_2DIV)
.put("NEGATE", OP_NEGATE)
.put("ABS", OP_ABS)
.put("NOT", OP_NOT)
.put("0NOTEQUAL", OP_0NOTEQUAL)
.put("ADD", OP_ADD)
.put("SUB", OP_SUB)
.put("MUL", OP_MUL)
.put("DIV", OP_DIV)
.put("MOD", OP_MOD)
.put("LSHIFT", OP_LSHIFT)
.put("RSHIFT", OP_RSHIFT)
.put("BOOLAND", OP_BOOLAND)
.put("BOOLOR", OP_BOOLOR)
.put("NUMEQUAL", OP_NUMEQUAL)
.put("NUMEQUALVERIFY", OP_NUMEQUALVERIFY)
.put("NUMNOTEQUAL", OP_NUMNOTEQUAL)
.put("LESSTHAN", OP_LESSTHAN)
.put("GREATERTHAN", OP_GREATERTHAN)
.put("LESSTHANOREQUAL", OP_LESSTHANOREQUAL)
.put("GREATERTHANOREQUAL", OP_GREATERTHANOREQUAL)
.put("MIN", OP_MIN)
.put("MAX", OP_MAX)
.put("WITHIN", OP_WITHIN)
.put("RIPEMD160", OP_RIPEMD160)
.put("SHA1", OP_SHA1)
.put("SHA256", OP_SHA256)
.put("HASH160", OP_HASH160)
.put("HASH256", OP_HASH256)
.put("CODESEPARATOR", OP_CODESEPARATOR)
.put("CHECKSIG", OP_CHECKSIG)
.put("CHECKSIGVERIFY", OP_CHECKSIGVERIFY)
.put("CHECKMULTISIG", OP_CHECKMULTISIG)
.put("CHECKMULTISIGVERIFY", OP_CHECKMULTISIGVERIFY)
.put("NOP1", OP_NOP1)
.put("NOP2", OP_NOP2)
.put("NOP3", OP_NOP3)
.put("NOP4", OP_NOP4)
.put("NOP5", OP_NOP5)
.put("NOP6", OP_NOP6)
.put("NOP7", OP_NOP7)
.put("NOP8", OP_NOP8)
.put("NOP9", OP_NOP9)
.put("NOP10", OP_NOP10).build();
/**
* Converts the given OpCode into a string (eg "0", "PUSHDATA", or "NON_OP(10)")