Il m'a fallu cinq fois la lecture de réaliser ce que vous entendez par "[...] la clé privée est générée sur la TREZOR, puis cryptés avant d'être envoyés à TREZOR[...]". J'ai édité votre question légèrement pour le rendre un peu plus clair. J'espère que j'ai bien compris votre intention correctement. Je viens de regarder à travers "tx_verify.cpp" pour trouver une règle qui permettrait de rejeter toute `vout` valeur `0`, mais ne pouvais pas trouver toutes. Quelqu'un peut-il point à l'endroit où Bitcoin Core à rejeter une telle opération? Je pense que vous êtes susceptible de droite. J'espérais juste que quelqu'un ici peut savoir quelque chose sur le manga ou le producteur des états. Je ne sais rien de ces sources. 4 des 8 connu vivre (selon mes calculs) qui pourraient reproduire le regard des femmes et de 1 la naissance est plus proche de celle du roi que d'être un soldat.

Les Méthodes Existantes

Le client Bitcoin a un moyen de détecter si elle n'est pas suffisamment synchronisé. Cependant, à ma connaissance, il n'est pas vraiment exposé à la RPC dans une belle façon.

Il est appelé IsInitialBlockDownload(), et il se considère pas synchronisés si les conditions suivantes sont remplies:

  • Le client est l'importateur du bootstrap.dat ou de réindexation les blocs dont il dispose.
  • Le client n'a pas atteint tous ses blocs de points de contrôle.
  • Le client a reçu et vérifié un bloc dans les 10 dernières secondes ET que le bloc a un horodatage de plus de 24 heures.

Vous pouvez appeler getblocktemplate, et si IsInitialBlockDownload() est vrai, il va revenir avec une erreur de RPC_CLIENT_IN_INITIAL_DOWNLOAD (ou -10).

Inconvénients

  • Si votre Bitcoin nœud est arrêté depuis moins de 24 heures, ce qui ne les détecte pas quelque chose de mal quand il s'agit de sauvegarder.
  • C'est un peu moche.
  • Lorsque votre client obtient dans les 24 heures du bloc courant, il pense que c'est jusqu'à ce jour, quand il a probablement besoin d'obtenir ~144 blocs.
  • Si votre client s'arrête le téléchargement bloque pendant qu'il est encore en cours de synchronisation, ce ne sera pas en mesure de détecter quelque chose de mal.

Nouvel appel RPC

Supposons que nous sommes en train de concevoir un nouvel appel RPC à partir de zéro. Comme d'autres affiches ont noté, il n'est pas possible de déterminer parfaitement cet état de fait en présence des acteurs malveillants. Quels sont les facteurs qui nous permettraient de faire une supposition éclairée?

  • Nœud de disponibilité. A le nœud été en place pendant au moins cinq minutes?
  • Nœud d'arrêt. A le nœud été récemment? Si oui, prenez la quantité de temps qu'il était en bas, et de le diviser un millier. Si le noeud n'a pas été au moins aussi longtemps, alors il n'est pas synchronisé.
  • Bloc horodateur. Le réseau est assez libéral sur l'application de cette règle, mais ma non-scientifique pense qu'il est généralement à l'intérieur d'une demi-heure ou ainsi. Vous pouvez utiliser cette information d'une manière similaire à la façon dont IsInitialBlockDownload() n'.
  • Bloc hauteur du nœud central. C'est le "Look at blockheight de blockexplorer," solution mentionnée dans la question.
  • Votre méthode serait probablement travailler. La seule question que je peux penser est que si vous vous êtes connecté à un autre nœud qui était encore syncronizing, vous feriez échec à l'échec.