diff --git a/transaction_id.go b/transaction_id.go index 3b39a1495..bca8f34b1 100644 --- a/transaction_id.go +++ b/transaction_id.go @@ -13,6 +13,8 @@ import ( type TransactionID struct { AccountID AccountID ValidStart time.Time + Nonce []byte + scheduled bool } // NewTransactionID constructs a new Transaction id struct with the provided AccountID and the valid start time set @@ -21,13 +23,17 @@ func NewTransactionID(accountID AccountID) TransactionID { allowance := -(time.Duration(rand.Intn(5*int(time.Second))) + (8 * time.Second)) validStart := time.Now().UTC().Add(allowance) - return TransactionID{accountID, validStart} + return TransactionID{accountID, validStart, nil, false} } // NewTransactionIDWithValidStart constructs a new Transaction id struct with the provided AccountID and the valid start // time set to a provided time. func NewTransactionIDWithValidStart(accountID AccountID, validStart time.Time) TransactionID { - return TransactionID{accountID, validStart} + return TransactionID{accountID, validStart, nil, false} +} + +func NewTransactionIDWithNonce(byte []byte) TransactionID { + return TransactionID{AccountID{}, time.Time{}, byte, false} } // GetReceipt queries the network for a receipt corresponding to the TransactionID's transaction. If the status of the @@ -66,6 +72,7 @@ func (id TransactionID) GetRecord(client *Client) (TransactionRecord, error) { // String returns a string representation of the TransactionID in `AccountID@ValidStartSeconds.ValidStartNanos` format func (id TransactionID) String() string { pb := timeToProto(id.ValidStart) + return fmt.Sprintf("%v@%v.%v", id.AccountID, pb.Seconds, pb.Nanos) } @@ -73,12 +80,21 @@ func (id TransactionID) toProto() *proto.TransactionID { return &proto.TransactionID{ TransactionValidStart: timeToProto(id.ValidStart), AccountID: id.AccountID.toProto(), + Nonce: id.Nonce, + Scheduled: id.scheduled, } } func transactionIDFromProto(pb *proto.TransactionID) TransactionID { - validStart := timeFromProto(pb.TransactionValidStart) - accountID := accountIDFromProto(pb.AccountID) + var validStart time.Time + if pb.TransactionValidStart != nil { + validStart = timeFromProto(pb.TransactionValidStart) + } + + var accountID AccountID + if pb.AccountID != nil { + accountID = accountIDFromProto(pb.AccountID) + } - return TransactionID{accountID, validStart} + return TransactionID{accountID, validStart, pb.Nonce, pb.Scheduled} }