GenerateAnswer will select specified record for proving. In order to generate a unique answer which is different with other nodes' answer, we hash(record + nodeID) as the answer.
(answers []Answer, previousBlock StorageProofBlock, node proto.Node)
| 99 | // In order to generate a unique answer which is different with other nodes' answer, |
| 100 | // we hash(record + nodeID) as the answer. |
| 101 | func GenerateAnswer(answers []Answer, previousBlock StorageProofBlock, node proto.Node) (*Answer, error) { |
| 102 | sqlIndex, err := getNextPuzzle(answers, previousBlock) |
| 103 | if err != nil { |
| 104 | return nil, err |
| 105 | } |
| 106 | record := []byte(selectRecord(sqlIndex)) |
| 107 | // check if node is valid |
| 108 | if len(node.ID) <= 0 { |
| 109 | return nil, errors.New("invalid node format") |
| 110 | } |
| 111 | answer := append(record, []byte(node.ID)...) |
| 112 | |
| 113 | answerHash := hash.HashH(answer) |
| 114 | return NewAnswer(previousBlock.ID, node.ID, answerHash), nil |
| 115 | } |