Commit fff702b5 authored by OptimismBot's avatar OptimismBot Committed by GitHub

Merge pull request #6352 from ethereum-optimism/refcell/resolve-tx

feat(op-challenger): Responder Resolve Function
parents 2ae5877f 7a943032
...@@ -55,6 +55,11 @@ func (r *faultResponder) buildFaultAttackData(parentContractIndex int, pivot [32 ...@@ -55,6 +55,11 @@ func (r *faultResponder) buildFaultAttackData(parentContractIndex int, pivot [32
) )
} }
// buildResolveData creates the transaction data for the Resolve function.
func (r *faultResponder) buildResolveData() ([]byte, error) {
return r.fdgAbi.Pack("resolve")
}
// BuildTx builds the transaction for the [faultResponder]. // BuildTx builds the transaction for the [faultResponder].
func (r *faultResponder) BuildTx(ctx context.Context, response Claim) ([]byte, error) { func (r *faultResponder) BuildTx(ctx context.Context, response Claim) ([]byte, error) {
if response.DefendsParent() { if response.DefendsParent() {
...@@ -72,6 +77,16 @@ func (r *faultResponder) BuildTx(ctx context.Context, response Claim) ([]byte, e ...@@ -72,6 +77,16 @@ func (r *faultResponder) BuildTx(ctx context.Context, response Claim) ([]byte, e
} }
} }
// Resolve executes a resolve transaction to resolve a fault dispute game.
func (r *faultResponder) Resolve(ctx context.Context) error {
txData, err := r.buildResolveData()
if err != nil {
return err
}
return r.sendTxAndWait(ctx, txData)
}
// Respond takes a [Claim] and executes the response action. // Respond takes a [Claim] and executes the response action.
func (r *faultResponder) Respond(ctx context.Context, response Claim) error { func (r *faultResponder) Respond(ctx context.Context, response Claim) error {
txData, err := r.BuildTx(ctx, response) txData, err := r.BuildTx(ctx, response)
......
...@@ -57,6 +57,24 @@ func newTestFaultResponder(t *testing.T, sendFails bool) (*faultResponder, *mock ...@@ -57,6 +57,24 @@ func newTestFaultResponder(t *testing.T, sendFails bool) (*faultResponder, *mock
return responder, mockTxMgr return responder, mockTxMgr
} }
// TestResponder_Resolve_SendFails tests the [Responder.Resolve] method
// bubbles up the error returned by the [txmgr.Send] method.
func TestResponder_Resolve_SendFails(t *testing.T) {
responder, mockTxMgr := newTestFaultResponder(t, true)
err := responder.Resolve(context.Background())
require.ErrorIs(t, err, mockSendError)
require.Equal(t, 0, mockTxMgr.sends)
}
// TestResponder_Resolve_Success tests the [Responder.Resolve] method
// succeeds when the tx candidate is successfully sent through the txmgr.
func TestResponder_Resolve_Success(t *testing.T) {
responder, mockTxMgr := newTestFaultResponder(t, false)
err := responder.Resolve(context.Background())
require.NoError(t, err)
require.Equal(t, 1, mockTxMgr.sends)
}
// TestResponder_Respond_SendFails tests the [Responder.Respond] method // TestResponder_Respond_SendFails tests the [Responder.Respond] method
// bubbles up the error returned by the [txmgr.Send] method. // bubbles up the error returned by the [txmgr.Send] method.
func TestResponder_Respond_SendFails(t *testing.T) { func TestResponder_Respond_SendFails(t *testing.T) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment