Esempio n. 1
0
 /**
  * @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;
 }