go-blockchain/consensus/verify_test.go

96 lines
2.8 KiB
Go
Raw Permalink Normal View History

//go:build !integration
package consensus
import (
"testing"
"dappco.re/go/core/blockchain/config"
"dappco.re/go/core/blockchain/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestVerifyTransactionSignatures_Good_Coinbase(t *testing.T) {
// Coinbase transactions have no signatures to verify.
tx := validMinerTx(100)
err := VerifyTransactionSignatures(tx, config.MainnetForks, 100, nil, nil)
require.NoError(t, err)
}
func TestVerifyTransactionSignatures_Bad_MissingSigs(t *testing.T) {
tx := validV1Tx()
tx.Signatures = nil // no signatures
err := VerifyTransactionSignatures(tx, config.MainnetForks, 100, nil, nil)
assert.Error(t, err)
}
// --- HTLC signature verification tests (Task 9) ---
func TestVerifyV1Signatures_MixedHTLC_Good(t *testing.T) {
// Structural check only (getRingOutputs = nil).
tx := &types.Transaction{
Version: types.VersionPreHF4,
Vin: []types.TxInput{
types.TxInputToKey{Amount: 100, KeyImage: types.KeyImage{1}},
types.TxInputHTLC{Amount: 50, KeyImage: types.KeyImage{2}},
},
Signatures: [][]types.Signature{
{{1}}, // sig for TxInputToKey
{{2}}, // sig for TxInputHTLC
},
}
err := VerifyTransactionSignatures(tx, config.MainnetForks, 20000, nil, nil)
require.NoError(t, err)
}
func TestVerifyV1Signatures_MixedHTLC_Bad(t *testing.T) {
// Wrong signature count.
tx := &types.Transaction{
Version: types.VersionPreHF4,
Vin: []types.TxInput{
types.TxInputToKey{Amount: 100, KeyImage: types.KeyImage{1}},
types.TxInputHTLC{Amount: 50, KeyImage: types.KeyImage{2}},
},
Signatures: [][]types.Signature{
{{1}}, // only 1 sig for 2 ring inputs
},
}
err := VerifyTransactionSignatures(tx, config.MainnetForks, 20000, nil, nil)
assert.Error(t, err)
assert.Contains(t, err.Error(), "signature count")
}
func TestVerifyV1Signatures_HTLCOnly_Good(t *testing.T) {
// Transaction with only HTLC inputs.
tx := &types.Transaction{
Version: types.VersionPreHF4,
Vin: []types.TxInput{
types.TxInputHTLC{Amount: 50, KeyImage: types.KeyImage{1}},
types.TxInputHTLC{Amount: 30, KeyImage: types.KeyImage{2}},
},
Signatures: [][]types.Signature{
{{1}},
{{2}},
},
}
err := VerifyTransactionSignatures(tx, config.MainnetForks, 20000, nil, nil)
require.NoError(t, err)
}
func TestVerifyV1Signatures_MultisigSkipped_Good(t *testing.T) {
// Multisig inputs do not participate in NLSAG signatures.
tx := &types.Transaction{
Version: types.VersionPreHF4,
Vin: []types.TxInput{
types.TxInputToKey{Amount: 100, KeyImage: types.KeyImage{1}},
types.TxInputMultisig{Amount: 50},
},
Signatures: [][]types.Signature{
{{1}}, // only 1 sig, multisig is not counted
},
}
err := VerifyTransactionSignatures(tx, config.MainnetForks, 20000, nil, nil)
require.NoError(t, err)
}