parse method

  1. @override
void parse(
  1. SVScript script
)
override

Implementation

@override
void parse(SVScript script) {
  if (script != null) {
    var chunkList = script.chunks;

    if (!chunkList[0].isPushData() && chunkList[1].opcodenum != OpCodes.OP_DROP) {
      throw ScriptException(ScriptError.SCRIPT_ERR_UNKNOWN_ERROR," - Script must start with PUSHDATA & DROP instruction.");
    }

    int chunkListOffset = 0;

    if (chunkList.length == 8) {
      chunkListOffset = 1;
    }

    if (chunkList[chunkListOffset + 4].opcodenum != 20) {
      throw ScriptException(ScriptError.SCRIPT_ERR_UNKNOWN_ERROR," - Signature and Public Key values are malformed");
    }

    if (!(chunkList[chunkListOffset + 2].opcodenum == OpCodes.OP_DUP &&
        chunkList[chunkListOffset + 3].opcodenum == OpCodes.OP_HASH160 &&
        chunkList[chunkListOffset + 5].opcodenum == OpCodes.OP_EQUALVERIFY &&
        chunkList[chunkListOffset + 6].opcodenum == OpCodes.OP_CHECKSIG)) {
      throw ScriptException(ScriptError.SCRIPT_ERR_UNKNOWN_ERROR," - Malformed script. Mismatched OP_CODES.");
    }

    _dataBuffer = chunkList[chunkListOffset].buf;
    _pubkeyHash = chunkList[chunkListOffset + 4].buf;
  } else {
    throw ScriptException(ScriptError.SCRIPT_ERR_UNKNOWN_ERROR,"- Invalid Script or Malformed Script.");
  }
}