From e72fabcc26c76329d04eaf8a064df2d3504e7386 Mon Sep 17 00:00:00 2001 From: Aurora Gaffney Date: Tue, 14 May 2024 09:08:58 -0500 Subject: [PATCH] feat: TX total collateral support (#622) This provides a method for returning the total collateral of a transaction Fixes #341 --- ledger/allegra.go | 4 ++++ ledger/alonzo.go | 4 ++++ ledger/babbage.go | 10 +++++++++- ledger/babbage_test.go | 2 +- ledger/byron.go | 5 +++++ ledger/conway.go | 4 ++++ ledger/mary.go | 4 ++++ ledger/shelley.go | 9 +++++++++ ledger/tx.go | 1 + 9 files changed, 41 insertions(+), 2 deletions(-) diff --git a/ledger/allegra.go b/ledger/allegra.go index 19e18e2b..244dcc56 100644 --- a/ledger/allegra.go +++ b/ledger/allegra.go @@ -166,6 +166,10 @@ func (t AllegraTransaction) CollateralReturn() TransactionOutput { return t.Body.CollateralReturn() } +func (t AllegraTransaction) TotalCollateral() uint64 { + return t.Body.TotalCollateral() +} + func (t AllegraTransaction) Certificates() []Certificate { return t.Body.Certificates() } diff --git a/ledger/alonzo.go b/ledger/alonzo.go index 1b04e52d..fd0089e6 100644 --- a/ledger/alonzo.go +++ b/ledger/alonzo.go @@ -276,6 +276,10 @@ func (t AlonzoTransaction) CollateralReturn() TransactionOutput { return t.Body.CollateralReturn() } +func (t AlonzoTransaction) TotalCollateral() uint64 { + return t.Body.TotalCollateral() +} + func (t AlonzoTransaction) Certificates() []Certificate { return t.Body.Certificates() } diff --git a/ledger/babbage.go b/ledger/babbage.go index d4b781c0..9c242b77 100644 --- a/ledger/babbage.go +++ b/ledger/babbage.go @@ -182,7 +182,7 @@ type BabbageTransactionBody struct { Epoch uint64 } `cbor:"6,keyasint,omitempty"` TxCollateralReturn *BabbageTransactionOutput `cbor:"16,keyasint,omitempty"` - TotalCollateral uint64 `cbor:"17,keyasint,omitempty"` + TxTotalCollateral uint64 `cbor:"17,keyasint,omitempty"` TxReferenceInputs []ShelleyTransactionInput `cbor:"18,keyasint,omitempty"` } @@ -218,6 +218,10 @@ func (b *BabbageTransactionBody) CollateralReturn() TransactionOutput { return b.TxCollateralReturn } +func (b *BabbageTransactionBody) TotalCollateral() uint64 { + return b.TxTotalCollateral +} + func (b *BabbageTransactionBody) Utxorpc() *utxorpc.Tx { var txi, txri []*utxorpc.TxInput var txo []*utxorpc.TxOutput @@ -448,6 +452,10 @@ func (t BabbageTransaction) CollateralReturn() TransactionOutput { return t.Body.CollateralReturn() } +func (t BabbageTransaction) TotalCollateral() uint64 { + return t.Body.TotalCollateral() +} + func (t BabbageTransaction) Certificates() []Certificate { return t.Body.Certificates() } diff --git a/ledger/babbage_test.go b/ledger/babbage_test.go index a14295dd..f0817421 100644 --- a/ledger/babbage_test.go +++ b/ledger/babbage_test.go @@ -19,7 +19,7 @@ func TestBabbageBlockTransactions(t *testing.T) { for i := 0; i < txsCount; i++ { b.TransactionBodies[i] = BabbageTransactionBody{ - TotalCollateral: 1 << i, + TxTotalCollateral: 1 << i, } b.TransactionWitnessSets[i] = BabbageTransactionWitnessSet{ AlonzoTransactionWitnessSet: AlonzoTransactionWitnessSet{ diff --git a/ledger/byron.go b/ledger/byron.go index cd451ba9..1f4463c7 100644 --- a/ledger/byron.go +++ b/ledger/byron.go @@ -185,6 +185,11 @@ func (t *ByronTransaction) CollateralReturn() TransactionOutput { return nil } +func (t *ByronTransaction) TotalCollateral() uint64 { + // No collateral in Byron + return 0 +} + func (t *ByronTransaction) Certificates() []Certificate { // No certificates in Byron return nil diff --git a/ledger/conway.go b/ledger/conway.go index b2c70d9d..b7f6e5cb 100644 --- a/ledger/conway.go +++ b/ledger/conway.go @@ -172,6 +172,10 @@ func (t ConwayTransaction) CollateralReturn() TransactionOutput { return t.Body.CollateralReturn() } +func (t ConwayTransaction) TotalCollateral() uint64 { + return t.Body.TotalCollateral() +} + func (t ConwayTransaction) Certificates() []Certificate { return t.Body.Certificates() } diff --git a/ledger/mary.go b/ledger/mary.go index 94d71c24..d4591fd6 100644 --- a/ledger/mary.go +++ b/ledger/mary.go @@ -183,6 +183,10 @@ func (t MaryTransaction) CollateralReturn() TransactionOutput { return t.Body.CollateralReturn() } +func (t MaryTransaction) TotalCollateral() uint64 { + return t.Body.TotalCollateral() +} + func (t MaryTransaction) Certificates() []Certificate { return t.Body.Certificates() } diff --git a/ledger/shelley.go b/ledger/shelley.go index c8af6166..f812b6dd 100644 --- a/ledger/shelley.go +++ b/ledger/shelley.go @@ -230,6 +230,11 @@ func (b *ShelleyTransactionBody) CollateralReturn() TransactionOutput { return nil } +func (b *ShelleyTransactionBody) TotalCollateral() uint64 { + // No collateral in Shelley + return 0 +} + func (b *ShelleyTransactionBody) Certificates() []Certificate { ret := make([]Certificate, len(b.TxCertificates)) for i, cert := range b.TxCertificates { @@ -384,6 +389,10 @@ func (t ShelleyTransaction) CollateralReturn() TransactionOutput { return t.Body.CollateralReturn() } +func (t ShelleyTransaction) TotalCollateral() uint64 { + return t.Body.TotalCollateral() +} + func (t ShelleyTransaction) Certificates() []Certificate { return t.Body.Certificates() } diff --git a/ledger/tx.go b/ledger/tx.go index 43434ca6..5c5e05b2 100644 --- a/ledger/tx.go +++ b/ledger/tx.go @@ -43,6 +43,7 @@ type TransactionBody interface { ReferenceInputs() []TransactionInput Collateral() []TransactionInput CollateralReturn() TransactionOutput + TotalCollateral() uint64 Certificates() []Certificate Utxorpc() *utxorpc.Tx }