Skip to content
Snippets Groups Projects
Unverified Commit face4ace authored by Silas Davis's avatar Silas Davis
Browse files

Check ChainID in Verify!


Signed-off-by: default avatarSilas Davis <silas@monax.io>
parent 07746593
No related branches found
No related tags found
No related merge requests found
......@@ -184,7 +184,7 @@ func (exe *executor) Execute(txEnv *txs.Envelope) (txe *exec.TxExecution, err er
logger.TraceMsg("Executing transaction", "tx", txEnv.String())
// Verify transaction signature against inputs
err = txEnv.Verify(exe.stateCache)
err = txEnv.Verify(exe.stateCache, exe.blockchain.ChainID())
if err != nil {
return nil, err
}
......
......@@ -77,12 +77,16 @@ func (txEnv *Envelope) Validate() error {
// Verifies the validity of the Signatories' Signatures in the Envelope. The Signatories must
// appear in the same order as the inputs as returned by Tx.GetInputs().
func (txEnv *Envelope) Verify(getter state.AccountGetter) error {
func (txEnv *Envelope) Verify(getter state.AccountGetter, chainID string) error {
err := txEnv.Validate()
if err != nil {
return err
}
errPrefix := fmt.Sprintf("could not verify transaction %X", txEnv.Tx.Hash())
if txEnv.Tx.ChainID != chainID {
return fmt.Errorf("%s: ChainID in envelope is %s but receiving chain has ID %s",
errPrefix, txEnv.Tx.ChainID, chainID)
}
inputs := txEnv.Tx.GetInputs()
if len(inputs) != len(txEnv.Signatories) {
return fmt.Errorf("%s: number of inputs (= %v) should equal number of signatories (= %v)",
......
......@@ -216,5 +216,5 @@ func testTxSignVerify(t *testing.T, tx payload.Payload) {
}
txEnv := Enclose(chainID, tx)
require.NoError(t, txEnv.Sign(signers...), "Error signing tx: %s", debug.Stack())
require.NoError(t, txEnv.Verify(nil), "Error verifying tx: %s", debug.Stack())
require.NoError(t, txEnv.Verify(nil, chainID), "Error verifying tx: %s", debug.Stack())
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment