/** * @param CreateAddressCommand $command * @throws \Exception */ public function handle(CreateAddressCommand $command) { // DEBUG //var_dump($command); $walletId = $command->getWalletId(); $addressTag = $command->getTag(); $addressCallbackUrl = $command->getCallbackUrl(); // DEBUG: create a sample wallet //$wallet = $this->walletRepository->loadFixtures(); $wallet = $this->walletRepository->walletOfId(new WalletId($walletId)); // DEBUG //var_dump($wallet); //die(); if ($wallet === null) { // TODO: create domain exception throw new \Exception(sprintf("Wallet not found %s", $walletId)); } // 1.- Call BlockCypher API to generate new address $walletGenerateAddressResponse = $this->blockCypherWalletService->generateAddress($wallet->getId()->getValue(), $wallet->getCoinSymbol(), $wallet->getToken()); // 2.- Create new app Address $address = new Address($this->addressRepository->nextIdentity(), new WalletId($walletId), $walletGenerateAddressResponse->getAddress(), $addressTag, $walletGenerateAddressResponse->getPrivate(), $walletGenerateAddressResponse->getPublic(), $walletGenerateAddressResponse->getWif(), $addressCallbackUrl, $this->clock->now()); $this->addressRepository->insert($address); }
/** * @param $allInputsAddresses * @param $walletId * @return array * @throws \Exception */ private function getPrivateKeysFromRepository($allInputsAddresses, $walletId) { // TODO: Code Review. Support for multisign addresses. // PrivateKeys are stored in Address object. They should be stored in a new Key class. // Multisign addresses have more than one key pair. $privateKeys = array(); foreach ($allInputsAddresses as $addressInTransaction) { $address = $this->addressRepository->addressOfWalletId($addressInTransaction, new WalletId($walletId)); // DEBUG //echo "AddressInTransaction: $addressInTransaction"; //var_dump($address->getAddress()); if ($address === null) { throw new \Exception(sprintf("Address %s not found in wallet %s", $addressInTransaction, $walletId)); } if ($address !== null) { $privateKeys[$address->getAddress()] = $address->getPrivate(); } } return $privateKeys; }
/** * @param WalletId $walletId * @return Address[] */ public function listWalletAddresses(WalletId $walletId) { return $this->addressRepository->addressesOfWalletId($walletId); }