aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/types/receipt.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/core/types/receipt.go b/core/types/receipt.go
index 9c49648b4..b54bd7b4f 100644
--- a/core/types/receipt.go
+++ b/core/types/receipt.go
@@ -108,14 +108,21 @@ func (r *Receipt) DecodeRLP(s *rlp.Stream) error {
}
// Deserialize based on the first component type.
switch {
- case kind == rlp.Byte || kind == rlp.String && len(cnt) == 0:
- // The first component of metropolis receipts is Byte
- // or empty String(byte with 0x00 value).
+ case kind == rlp.Byte || (kind == rlp.String && len(cnt) == 0):
+ // The first component of metropolis receipts is Byte (0x01), or the empty
+ // string (0x80, decoded as a byte with 0x00 value).
var metro metropolisReceiptRLP
if err := rlp.DecodeBytes(raw, &metro); err != nil {
return err
}
- r.Failed = metro.Status == receiptStatusFailed
+ switch metro.Status {
+ case receiptStatusSuccessful:
+ r.Failed = false
+ case receiptStatusFailed:
+ r.Failed = true
+ default:
+ return fmt.Errorf("invalid status byte: 0x%x", metro.Status)
+ }
r.CumulativeGasUsed = metro.CumulativeGasUsed
r.Bloom = metro.Bloom
r.Logs = metro.Logs