UpgradeSequence() instead of seq.Upgrade() and correct behavior.

This commit is contained in:
fiatjaf
2023-10-02 19:45:27 -03:00
parent 57291497e6
commit 1b0ecd993e
2 changed files with 10 additions and 6 deletions

View File

@@ -16,8 +16,8 @@ func main () {
hash := sha256.Sum256([]byte{1,2,3,4,5,6}) hash := sha256.Sum256([]byte{1,2,3,4,5,6})
seq, _ := opentimestamps.Stamp(context.Background(), "https://alice.btc.calendar.opentimestamps.org/", hash) seq, _ := opentimestamps.Stamp(context.Background(), "https://alice.btc.calendar.opentimestamps.org/", hash)
// you can just call .Upgrade() to get the upgraded sequence (or an error if not yet available) // you can just call UpgradeSequence() to get the upgraded sequence (or an error if not yet available)
upgradedSeq, err := seq.Upgrade(context.Background(), hash[:]) upgradedSeq, err := opentimestamps.UpgradeSequence(context.Background(), seq, hash[:])
if err != nil { if err != nil {
fmt.Println("wait more") fmt.Println("wait more")
} }
@@ -43,7 +43,7 @@ func main () {
fmt.Println(hex.EncodeToString(seq[2].Argument)) // "c40fe258f9b828a0b5a7" fmt.Println(hex.EncodeToString(seq[2].Argument)) // "c40fe258f9b828a0b5a7"
// all these instructions can be executed in order, starting from the initial hash // all these instructions can be executed in order, starting from the initial hash
result := seq.Compute(hash) // this is the value we send to the calendar server in order to get the upgraded sequence on .Upgrade() result := seq.Compute(hash) // this is the value we send to the calendar server in order to get the upgraded sequence
finalResult := upgradedSeq.Compute(hash) // this should be the merkle root of a bitcoin block if this sequence is upgraded finalResult := upgradedSeq.Compute(hash) // this should be the merkle root of a bitcoin block if this sequence is upgraded
// each sequence always ends in an "attestation" // each sequence always ends in an "attestation"

View File

@@ -41,9 +41,9 @@ func ReadFromFile(data []byte) (*File, error) {
return parseOTSFile(newBuffer(data)) return parseOTSFile(newBuffer(data))
} }
func (seq Sequence) Upgrade(ctx context.Context, initial []byte) (Sequence, error) { func UpgradeSequence(ctx context.Context, seq Sequence, initial []byte) (Sequence, error) {
result := seq.Compute(initial) result := seq.Compute(initial)
attestation := seq[len(seq)-1] attestation := seq.GetAttestation()
url := fmt.Sprintf("%s/timestamp/%x", normalizeUrl(attestation.CalendarServerURL), result) url := fmt.Sprintf("%s/timestamp/%x", normalizeUrl(attestation.CalendarServerURL), result)
req, err := http.NewRequestWithContext(ctx, "GET", url, nil) req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
@@ -69,10 +69,14 @@ func (seq Sequence) Upgrade(ctx context.Context, initial []byte) (Sequence, erro
} }
resp.Body.Close() resp.Body.Close()
newSeq, err := parseCalendarServerResponse(newBuffer(body)) tail, err := parseCalendarServerResponse(newBuffer(body))
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to parse response from '%s': %w", attestation.CalendarServerURL, err) return nil, fmt.Errorf("failed to parse response from '%s': %w", attestation.CalendarServerURL, err)
} }
newSeq := make(Sequence, len(seq)+len(tail)-1)
copy(newSeq, seq[0:len(seq)-1])
copy(newSeq[len(seq)-1:], tail)
return newSeq, nil return newSeq, nil
} }