/** * @param PublicKeyInterface $publicKey * @return Buffer */ public function serialize(PublicKeyInterface $publicKey) { $point = $publicKey->getPoint(); $parser = new Parser(); $parser->writeBytes(1, $this->getPrefix($publicKey->isCompressed(), $point)); $math = $this->ecAdapter->getMath(); $publicKey->isCompressed() ? $parser->writeBytes(32, $math->decHex($point->getX())) : $parser->writeBytes(32, $math->decHex($point->getX()))->writeBytes(32, $math->decHex($point->getY())); return $parser->getBuffer(); }
/** * @param \BitWasp\Bitcoin\Signature\TransactionSignature $signature * @param PublicKeyInterface $publicKey * @return Script */ public function payToPubKeyHash(TransactionSignature $signature, PublicKeyInterface $publicKey) { return ScriptFactory::create()->push($signature->getBuffer())->push($publicKey->getBuffer()); }
/** * @param int|string $sequence * @param bool $change * @return PrivateKeyInterface|PublicKeyInterface */ public function deriveChild($sequence, $change = false) { return $this->publicKey->tweakAdd($this->getSequenceOffset($sequence, $change)); }
/** * @param PublicKeyInterface $publicKey * @param int|string $integer * @return \BitWasp\Bitcoin\Key\PublicKey * @throws \Exception */ public function publicKeyMul(PublicKeyInterface $publicKey, $integer) { $pubKey = $publicKey->getBuffer()->getBinary(); $ret = (bool) \secp256k1_ec_pubkey_tweak_mul($pubKey, $this->getBinaryScalar($integer)); if ($ret === false) { throw new \Exception('Secp256k1 pubkey tweak mul: failed'); } return $this->getRelatedPublicKey($publicKey, $pubKey); }
/** * Create a P2PKH output script * * @param PublicKeyInterface $public_key * @return Script */ public function payToPubKeyHash(PublicKeyInterface $public_key) { return ScriptFactory::create()->op('OP_DUP')->op('OP_HASH160')->push($public_key->getPubKeyHash())->op('OP_EQUALVERIFY')->op('OP_CHECKSIG'); }
/** * @param PublicKeyInterface $publicKey * @param $integer * @return \BitWasp\Bitcoin\Key\PublicKey */ public function publicKeyMul(PublicKeyInterface $publicKey, $integer) { $newPoint = $publicKey->getPoint()->mul($integer); return $this->getRelatedPublicKey($publicKey, $newPoint); }