UpgradeSequence() instead of seq.Upgrade() and correct behavior.
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
10
stamp.go
10
stamp.go
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user