/** * Execute the console command. * * @return mixed */ public function fire() { $this->comment('Sweeping account'); $address_sender = app('App\\Blockchain\\Sender\\PaymentAddressSender'); $payment_address_repo = app('App\\Repositories\\PaymentAddressRepository'); $payment_address = $payment_address_repo->findByUuid($this->input->getArgument('payment-address-id')); if (!$payment_address) { throw new Exception("Payment address not found", 1); } $destination = $this->input->getArgument('destination-address'); if (!AddressValidator::isValid($destination)) { throw new Exception("The destination address was invalid", 1); } $float_fee = $this->input->getOption('fee'); $api_call = app('App\\Repositories\\APICallRepository')->create(['user_id' => $this->getConsoleUser()['id'], 'details' => ['command' => 'xchain:sweep-address', 'args' => ['payment_address' => $payment_address['uuid'], 'destination' => $destination, 'fee' => $float_fee]]]); // get lock $lock_acquired = AccountHandler::acquirePaymentAddressLock($payment_address); // do the send list($txid, $float_balance_sent) = $address_sender->sweepAllAssets($payment_address, $destination, $float_fee); // clear all balances from all accounts AccountHandler::zeroAllBalances($payment_address, $api_call); // release the account lock if ($lock_acquired) { AccountHandler::releasePaymentAddressLock($payment_address); } $this->comment('done'); }
public function getValidatorInstance() { $validator = parent::getValidatorInstance(); $validator->after(function () use($validator) { // validate destinations $destinations = $this->json('destinations'); if ($destinations) { if (is_array($destinations)) { $offset = 0; foreach ($destinations as $destination) { if (!isset($destination['address']) or !isset($destination['amount'])) { $validator->errors()->add('destinations', 'Missing address or amount for destination ' . ($offset + 1) . '.'); continue; } if (!AddressValidator::isValid($destination['address'])) { $validator->errors()->add('destinations', 'The address for destination ' . ($offset + 1) . ' was invalid.'); } if (!is_numeric($destination['amount']) or CurrencyUtil::valueToSatoshis($destination['amount']) <= 0) { $validator->errors()->add('destinations', 'The amount for destination ' . ($offset + 1) . ' was invalid.'); } ++$offset; } } else { $validator->errors()->add('destinations', 'The destinations were invalid.'); } } }); return $validator; }
public function getValidatorInstance() { $validator = parent::getValidatorInstance(); $validator->after(function () use($validator) { // validate destination $destination = $this->json('destination'); if (!AddressValidator::isValid($destination)) { $validator->errors()->add('destination', 'The destination was invalid.'); } }); return $validator; }
public function getValidatorInstance() { $validator = parent::getValidatorInstance(); $validator->after(function () use($validator) { // validate address $address = $this->json('address'); Log::info("\$address={$address} AddressValidator::isValid({$address})=" . AddressValidator::isValid($address)); if (!AddressValidator::isValid($address)) { $validator->errors()->add('address', 'The address was invalid.'); } }); return $validator; }
/** * Get all balances for an address * * @param int $id * @return Response */ public function show(Client $xcpd_client, BitcoinPayer $bitcoin_payer, Cache $asset_info_cache, $address) { if (!AddressValidator::isValid($address)) { $message = "The address {$address} was not valid"; EventLog::logError('error.getBalance', ['address' => $address, 'message' => $message]); return new JsonResponse(['message' => $message], 500); } $balances = $xcpd_client->get_balances(['filters' => ['field' => 'address', 'op' => '==', 'value' => $address]]); // and get BTC balance too $btc_float_balance = $bitcoin_payer->getBalance($address); $balances = array_merge([['asset' => 'BTC', 'quantity' => $btc_float_balance]], $balances); $out = ['balances' => [], 'balancesSat' => []]; foreach ($balances as $balance) { $asset_name = $balance['asset']; if ($asset_name == 'BTC') { // BTC quantity is a float $quantity_float = floatval($balance['quantity']); $quantity_sat = CurrencyUtil::valueToSatoshis($balance['quantity']); } else { // determine quantity based on asset info $is_divisible = $asset_info_cache->isDivisible($asset_name); if ($is_divisible) { $quantity_float = CurrencyUtil::satoshisToValue($balance['quantity']); $quantity_sat = intval($balance['quantity']); } else { // non-divisible assets don't use satoshis $quantity_float = floatval($balance['quantity']); $quantity_sat = CurrencyUtil::valueToSatoshis($balance['quantity']); } } $out['balances'][$asset_name] = $quantity_float; $out['balancesSat'][$asset_name] = $quantity_sat; } ksort($out['balances']); ksort($out['balancesSat']); return json_encode($out); }
public function sampleData_validate($address) { Log::debug("\$address=" . json_encode($address, 192)); return ['result' => \LinusU\Bitcoin\AddressValidator::isValid($address), 'is_mine' => false]; }