function singleTransaction() { $base = $this->lib->issueCoin(new Binary('issuer key'), new Binary('coin'), 'I promise', new Output(new Binary('bart'), new Fraction(1))); $one = $this->lib->transferCoins(new Binary('bart key'), [$base], [new Output(new Binary('lisa'), new Fraction(1))]); $confirmed = $this->lib->confirmCoin(new Binary('bart key'), $one[0]); $this->assert->equals($confirmed->getOwner(), new Binary('lisa')); $this->assert->equals($confirmed->getValue(), new Fraction(1)); /** @var Confirmation $confirmation */ $confirmation = $confirmed->getInput()->getTransaction(); $this->assert->isInstanceOf($confirmation, Confirmation::class); $this->assert->equals($confirmation->getHash(), Confirmation::hash('coin' . "" . 'I promise' . "" . 'bart' . "" . '1|1' . "" . '0' . "" . 'lisa' . "" . '1|1')); }
private function ConfirmationToArray(Confirmation $confirmation, Transcoder $transcoder) { return ['hash' => $transcoder->encode($confirmation->getHash()->getData()), 'bases' => array_map(function (Base $base) use($transcoder) { return $this->BaseToArray($base, $transcoder); }, $confirmation->getBases()), 'out' => $this->OutputToArray($confirmation->getOutput(), $transcoder), 'sig' => $confirmation->getSignature()]; }
/** * @param Binary $backer * @param Signer $signer * @return Coin * @throws \Exception */ public function confirm(Binary $backer, Signer $signer) { $allBases = $this->getBases(); $myBases = array_values(array_filter($allBases, function (Base $base) use($backer) { return $base->getOutput()->getTarget() == $backer; })); if (!$myBases) { throw new \Exception('Not a backer'); } $output = new Output($this->getOwner(), $this->getValue()->times($this->baseSum($myBases))->dividedBy($this->baseSum($allBases))); $confirmed = $this->input->getTransaction(); return new Coin(new Input(Confirmation::signedConfirmation($myBases, $output, $confirmed, $signer), 0)); }