private function uniqueInput(Transaction $transaction, $acc) { $inputs = isset($acc['inputs']) ? $acc['inputs'] : []; $transactions = isset($acc['transactions']) ? $acc['transactions'] : []; $squashedTransaction = Signer::squash($transaction); $acc['transactions'][] = $squashedTransaction; if (in_array($squashedTransaction, $transactions)) { return $acc; } foreach ($transaction->getInputs() as $input) { $squashed = Signer::squash($input); if (in_array($squashed, $inputs)) { $this->errors[] = "Output already used"; } $inputs[] = $squashed; } $acc['inputs'] = $inputs; return $acc; }
/** * @return Binary */ public function hash() { return new Binary(hash('sha256', Signer::squash($this), true)); }
/** * @param Base[] $bases * @param Output $output * @param Transaction $confirmed * @param Signer $signer * @return Confirmation */ public static function signedConfirmation($bases, Output $output, Transaction $confirmed, Signer $signer) { $hash = self::hash(Signer::squash($confirmed)); return new Confirmation($bases, $output, $hash, $signer->sign([$bases, $output, $hash])); }