/** * @return bool */ public function isMultisig() { if (count($this->decoded) < 3) { return false; } $final = end($this->decoded); if (!$final || !$final->isPush()) { return false; } $script = new Script($final->getData()); $decoded = $script->getScriptParser()->decode(); $count = count($decoded); $mOp = $decoded[0]; $nOp = $decoded[$count - 2]; if ($mOp->isPush() || $nOp->isPush()) { return false; } if ($mOp->getOp() < Opcodes::OP_0 || $nOp->getOp() > Opcodes::OP_16) { return false; } /** @var Operation[] $keys */ $keys = array_slice($decoded, 1, -2); $keysValid = true; foreach ($keys as $key) { $keysValid &= $key->isPush() && PublicKey::isCompressedOrUncompressed($key->getData()); } return $keysValid; }
/** * @return bool */ public function isMultisig() { if (count($this->evalScript) < 3) { return false; } $final = end($this->evalScript); if (!$final || !$final instanceof Buffer) { return false; } $script = new Script($final); $parsed = $script->getScriptParser()->parse(); $count = count($parsed); $opCodes = $script->getOpCodes(); $mOp = $parsed[0]; $nOp = $parsed[$count - 2]; $keys = array_slice($parsed, 1, -2); $keysValid = true; foreach ($keys as $key) { $keysValid &= $key instanceof Buffer && PublicKey::isCompressedOrUncompressed($key); } return $opCodes->cmp($opCodes->getOpByName($mOp), 'OP_0') >= 0 && $opCodes->cmp($opCodes->getOpByName($nOp), 'OP_16') <= 0 && $keysValid; }