namespace Google\Site_Kit_Dependencies\GuzzleHttp\Promise; /** * Get the global task queue used for promise resolution. * * This task queue MUST be run in an event loop in order for promises to be * settled asynchronously. It will be automatically run when synchronously * waiting on a promise. * * * while ($eventLoop->isRunning()) { * GuzzleHttp\Promise\queue()->run(); * } * * * @param TaskQueueInterface $assign Optionally specify a new queue instance. * * @return TaskQueueInterface * * @deprecated queue will be removed in guzzlehttp/promises:2.0. Use Utils::queue instead. */ function queue(\Google\Site_Kit_Dependencies\GuzzleHttp\Promise\TaskQueueInterface $assign = null) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::queue($assign); } /** * Adds a function to run in the task queue when it is next `run()` and returns * a promise that is fulfilled or rejected with the result. * * @param callable $task Task function to run. * * @return PromiseInterface * * @deprecated task will be removed in guzzlehttp/promises:2.0. Use Utils::task instead. */ function task(callable $task) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::task($task); } /** * Creates a promise for a value if the value is not a promise. * * @param mixed $value Promise or value. * * @return PromiseInterface * * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead. */ function promise_for($value) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Create::promiseFor($value); } /** * Creates a rejected promise for a reason if the reason is not a promise. If * the provided reason is a promise, then it is returned as-is. * * @param mixed $reason Promise or reason. * * @return PromiseInterface * * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead. */ function rejection_for($reason) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Create::rejectionFor($reason); } /** * Create an exception for a rejected promise value. * * @param mixed $reason * * @return \Exception|\Throwable * * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead. */ function exception_for($reason) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Create::exceptionFor($reason); } /** * Returns an iterator for the given value. * * @param mixed $value * * @return \Iterator * * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead. */ function iter_for($value) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Create::iterFor($value); } /** * Synchronously waits on a promise to resolve and returns an inspection state * array. * * Returns a state associative array containing a "state" key mapping to a * valid promise state. If the state of the promise is "fulfilled", the array * will contain a "value" key mapping to the fulfilled value of the promise. If * the promise is rejected, the array will contain a "reason" key mapping to * the rejection reason of the promise. * * @param PromiseInterface $promise Promise or value. * * @return array * * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead. */ function inspect(\Google\Site_Kit_Dependencies\GuzzleHttp\Promise\PromiseInterface $promise) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::inspect($promise); } /** * Waits on all of the provided promises, but does not unwrap rejected promises * as thrown exception. * * Returns an array of inspection state arrays. * * @see inspect for the inspection state array format. * * @param PromiseInterface[] $promises Traversable of promises to wait upon. * * @return array * * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead. */ function inspect_all($promises) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::inspectAll($promises); } /** * Waits on all of the provided promises and returns the fulfilled values. * * Returns an array that contains the value of each promise (in the same order * the promises were provided). An exception is thrown if any of the promises * are rejected. * * @param iterable $promises Iterable of PromiseInterface objects to wait on. * * @return array * * @throws \Exception on error * @throws \Throwable on error in PHP >=7 * * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead. */ function unwrap($promises) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::unwrap($promises); } /** * Given an array of promises, return a promise that is fulfilled when all the * items in the array are fulfilled. * * The promise's fulfillment value is an array with fulfillment values at * respective positions to the original array. If any promise in the array * rejects, the returned promise is rejected with the rejection reason. * * @param mixed $promises Promises or values. * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. * * @return PromiseInterface * * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead. */ function all($promises, $recursive = \false) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::all($promises, $recursive); } /** * Initiate a competitive race between multiple promises or values (values will * become immediately fulfilled promises). * * When count amount of promises have been fulfilled, the returned promise is * fulfilled with an array that contains the fulfillment values of the winners * in order of resolution. * * This promise is rejected with a {@see AggregateException} if the number of * fulfilled promises is less than the desired $count. * * @param int $count Total number of promises. * @param mixed $promises Promises or values. * * @return PromiseInterface * * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead. */ function some($count, $promises) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::some($count, $promises); } /** * Like some(), with 1 as count. However, if the promise fulfills, the * fulfillment value is not an array of 1 but the value directly. * * @param mixed $promises Promises or values. * * @return PromiseInterface * * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead. */ function any($promises) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::any($promises); } /** * Returns a promise that is fulfilled when all of the provided promises have * been fulfilled or rejected. * * The returned promise is fulfilled with an array of inspection state arrays. * * @see inspect for the inspection state array format. * * @param mixed $promises Promises or values. * * @return PromiseInterface * * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead. */ function settle($promises) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Utils::settle($promises); } /** * Given an iterator that yields promises or values, returns a promise that is * fulfilled with a null value when the iterator has been consumed or the * aggregate promise has been fulfilled or rejected. * * $onFulfilled is a function that accepts the fulfilled value, iterator index, * and the aggregate promise. The callback can invoke any necessary side * effects and choose to resolve or reject the aggregate if needed. * * $onRejected is a function that accepts the rejection reason, iterator index, * and the aggregate promise. The callback can invoke any necessary side * effects and choose to resolve or reject the aggregate if needed. * * @param mixed $iterable Iterator or array to iterate over. * @param callable $onFulfilled * @param callable $onRejected * * @return PromiseInterface * * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead. */ function each($iterable, callable $onFulfilled = null, callable $onRejected = null) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Each::of($iterable, $onFulfilled, $onRejected); } /** * Like each, but only allows a certain number of outstanding promises at any * given time. * * $concurrency may be an integer or a function that accepts the number of * pending promises and returns a numeric concurrency limit value to allow for * dynamic a concurrency size. * * @param mixed $iterable * @param int|callable $concurrency * @param callable $onFulfilled * @param callable $onRejected * * @return PromiseInterface * * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead. */ function each_limit($iterable, $concurrency, callable $onFulfilled = null, callable $onRejected = null) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected); } /** * Like each_limit, but ensures that no promise in the given $iterable argument * is rejected. If any promise is rejected, then the aggregate promise is * rejected with the encountered rejection. * * @param mixed $iterable * @param int|callable $concurrency * @param callable $onFulfilled * * @return PromiseInterface * * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead. */ function each_limit_all($iterable, $concurrency, callable $onFulfilled = null) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Each::ofLimitAll($iterable, $concurrency, $onFulfilled); } /** * Returns true if a promise is fulfilled. * * @return bool * * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead. */ function is_fulfilled(\Google\Site_Kit_Dependencies\GuzzleHttp\Promise\PromiseInterface $promise) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Is::fulfilled($promise); } /** * Returns true if a promise is rejected. * * @return bool * * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead. */ function is_rejected(\Google\Site_Kit_Dependencies\GuzzleHttp\Promise\PromiseInterface $promise) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Is::rejected($promise); } /** * Returns true if a promise is fulfilled or rejected. * * @return bool * * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead. */ function is_settled(\Google\Site_Kit_Dependencies\GuzzleHttp\Promise\PromiseInterface $promise) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Is::settled($promise); } /** * Create a new coroutine. * * @see Coroutine * * @return PromiseInterface * * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead. */ function coroutine(callable $generatorFn) { return \Google\Site_Kit_Dependencies\GuzzleHttp\Promise\Coroutine::of($generatorFn); } Trezor einrichten: Echt, praktisch und ohne Schnickschnack – Guitar Shred

Trezor einrichten: Echt, praktisch und ohne Schnickschnack

Okay, also: Ich hab das Trezor schon unzählige Male eingerichtet. Wirklich. Wow!

Erstmal: dieses Gefühl, wenn man die Box öffnet — klein, wertig, ruhig. Meine erste Reaktion war: “Ohne Anleitung kriegt das jeder hin.” Hmm… doch dann merkte ich, dass viele übersiehten wie wichtig die Anfangsschritte sind. Etwas fühlte sich off an bei Leuten, die die Seed-Phase nur schnell durchklicken. Seriously?

Kurzfassung für Ungeduldige: steck das Gerät an, lade die passende Software, erstelle eine neue Wallet, schreibe die Wiederherstellungsphrase sorgfältig auf. Nicht fotografieren. Nicht in der Cloud. Nicht mal kurz per Messenger senden. Meine Intuition sagt: das ist die eine Sache, die viele sehr sehr wichtig unterschätzen.

Ich gehe jetzt Schritt für Schritt durch, ohne zu sehr zu moralinsäuern. Auf dem Weg plaudere ich ein bisschen. (Oh, und by the way: die trezor suite ist der Ort, wo die meisten anfangen — ladet sie von dort.)

Trezor Gerät neben Notizbuch mit Wiederherstellungsworten

Vorbereitung — was du vorher wissen musst

Erstmal: atmen. Dann planen. Ich bin biased, aber Sicherheit kostet ein paar Minuten. Deine Hardware, dein Geld — das sind zwei Dinge, die sich nicht ersetzen lassen. Meine erste Annahme war, dass jeder Backup-Wörter rollen lässt; falsch gedacht. Viele denken: “Ach, ich notier das schnell.” Nope.

Also, was brauchst du? Trezor Model One oder Model T, ein PC/Mac/Linux (Tablets funktionieren, aber sind fummeliger), ein Schreibgerät, sauberes Papier oder ein Metall-Backup (z. B. Cryptosteel). Und Geduld. Hmm, Geduld fehlt oft — das nervt mich ein bisschen.

Was du nicht brauchst: dein Foto der Seed, Cloud-Backups, SMS-Backup oder irgendeine App, die Seed-Wörter speichert. Wirklich nicht.

Schritt 1 — Trezor anschließen und erstes Boot

Steck das Gerät an. Kurz warten. Das Display zeigt ein Logo. Meine erste Reaktion war: “Aha, simpel.” Dann kommt die Sicherheitsbestätigung am Gerät — wichtig! Prüfe das, bevor du irgendwas auf dem PC bestätigst.

Wenn du das erste Mal anschließt, fordert das Gerät dich auf, die Firmware zu prüfen oder zu installieren. Tu das. On one hand ist das lästig, though actually: es ist genau der Moment, der Attacken verhindert. Initially dachte ich: Firmwareupdates dauern ewig — aber meist sind’s nur Minuten.

Schritt 2 — Trezor Suite herunterladen und starten

Okay, check this out—die trezor suite ist die offizielle Desktop-App. Lade sie runter, installiere sie, öffne sie. Meine Empfehlung: immer von der offiziellen Quelle laden. Ja, manche denken: “Ach, das ist übertrieben.” Mein Instinkt sagt: besser übertrieben als kompromittiert.

Beim ersten Start verbindet die Suite dein Gerät und führt dich durch den Setup-Assistenten. Folge den Anweisungen auf dem Computer und bestätige alles auf dem Gerät. Wichtig: die Suite zeigt die Adresse nicht zum ersten Mal an, bevor du auf DEM Gerät bestätigt hast — das ist kein Zufall.

Schritt 3 — Wallet erstellen & Wiederherstellungsphrase

Hier wird’s ernst. Du wählst “neue Wallet erstellen”. Das Gerät erzeugt eine 12- oder 24-Wort-Seed. Schreib die Wörter genau so auf, wie sie erscheinen. Punkt. Ich wiederhole: aufschreiben. Nicht tippen. Nicht abfotografieren. Nicht in irgendwas kopieren.

Ein Tipp aus der Praxis: benutze Kugelschreiber, keine Bleistifte (verblasst). Und wenn du wirklich paranoid bist, präge die Worte in Metall. Ich hab mal eins verloren — long story — also: Backup an mehreren Orten ist sinnvoll. Nicht alle an einem Ort. On the other hand, zu viele Kopien sind auch wieder riskant.

Was mir anfangs auffiel: Leute glauben, ihre Phrase sei anonym. Falsch. Wer die Seed hat, hat vollen Zugriff. Das ist ein simples, aber oft ignoriertes Prinzip.

Schritt 4 — PIN setzen und zusätzliche Sicherheit

Das Gerät fordert dich auf, eine PIN zu setzen. Wähle eine, die du dir merken kannst, aber die nicht offensichtlich ist. Keine Geburtstage. Kein “1234”. Meine Faustregel: 6+ Ziffern, keine Muster, nicht wiederverwendet.

Hidden Wallets / Passphrase: Fortgeschrittene nutzen eine Passphrase obendrauf. Das erzeugt quasi mehrere Wallets aus einer Seed. Super mächtig, aber gefährlich, wenn du sie verlierst. Mein Tipp: nur nutzen, wenn du weißt, was du tust. Ich bin nicht 100% sicher, ob Einsteiger das brauchen — und das ist okay.

Die ersten Transaktionen — sicher empfangen und senden

Empfangen: lass dir die Adresse auf dem Gerät anzeigen und vergleiche sie mit der Adresse in der Suite. Wenn beide übereinstimmen, ist alles gut. Das ist der Moment, wo viele nachlässig werden. Really?

Senden: immer zuerst kleine Beträge testen. Erst wenn der Testtransfer korrekt ankommt, schick größere Summen. Das klingt banal, aber es spart schlaflose Nächte.

Fehler und Stolpersteine

1) Backup verloren — passiert. Wenn du die Seed nicht hast, ist Geld weg. Harte Wahrheit.
2) Firmware-Update abgebrochen — das kann bricken, selten aber möglich. Ruhe bewahren, Support kontaktieren.
3) Phishing-Links — du wirst versucht sein, Software von Dritten zu laden. Mach das nicht.

Ich erinnere mich an einen Fall: Jemand lud eine vermeintliche Suite aus einem Forum. Ergebnis: Seed wurde abgegriffen. Traurig, aber lehrreich. Mein Instinkt sagte damals: “Das riecht nach Trouble.” Und er hatte Recht.

Praktische Tipps für den Alltag

– Trenne das Gerät physisch, wenn du es nicht benutzt. Einfach ausstecken.
– Nutze nur sichere, aktuelle Betriebssysteme.
– Halte den PIN im Kopf. Kein Notizzettel neben dem Gerät.
– Bewahre Backups an mindestens zwei sicheren Orten. Bankenfach? Safe? Du entscheidest.

Ich hab eine Schwäche für Metaphern: Denk an dein Trezor wie an den Schlüssel zu einem Bankschließfach — du würdest den nicht mit einem Foto in deiner Cloud speichern, oder? Eben.

Häufige Fragen

Kann ich die Trezor Suite auf mehreren Geräten nutzen?

Ja. Du kannst die Suite auf mehreren Computern installieren und dein Trezor verbinden. Die Seed bleibt auf dem Gerät. Aber lade die Suite immer von der offiziellen Quelle: trezor suite. Einfacher gesagt: benutze keine fremden Downloads.

Was passiert, wenn ich die PIN vergesse?

Nach einigen Fehlversuchen setzt sich das Gerät zurück. Dann brauchst du die Seed, um die Wallet wiederherzustellen. Ohne Seed ist das Geld verloren. Deshalb: Seed sicher aufbewahren.

Sollte ich eine Passphrase verwenden?

Nur wenn du weißt, was du tust. Eine Passphrase erhöht die Sicherheit, macht das Recovery aber komplexer. Ich nutze sie manchmal, bin aber vorsichtig — und meistens empfehle ich Einsteigern erstmal ohne.

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *