testnet
GitHub EN

NewAppAnteHandler

NewAppAnteHandler(existingHandler sdk.AnteHandler, decorators ...sdk.AnteDecorator) sdk.AnteHandler

일련의 AnteDecorator를 연결하여 새로운 애플리케이션 AnteHandler를 구성합니다. 이 함수는 마루 애플리케이션 설정 내에서 트랜잭션 검증 파이프라인을 구축하는 데 사용됩니다. 체인의 각 데코레이터는 다음 데코레이터를 감싸며, 서명 검증, 수수료 차감, 논스 확인과 같은 검증 로직에 대한 모듈식 접근을 가능하게 합니다.

파라미터

이름 타입 필수 설명
existingHandler sdk.AnteHandler 체인의 마지막 핸들러로, 종종 핵심 트랜잭션 실행 로직입니다.
decorators ...sdk.AnteDecorator 제공된 순서대로 함께 연결될 AnteDecorator 구현의 가변 인자 목록입니다.

반환값

타입: sdk.AnteHandler

전체 데코레이터 체인을 나타내는 단일 AnteHandler 함수입니다.

예제

기본 AnteHandler 체인 구성

이 예제는 커스텀 로깅 데코레이터와 최종 핸들러를 사용하여 간단한 AnteHandler 체인을 만드는 방법을 보여줍니다. `NewAppAnteHandler` 함수가 이들을 함께 연결합니다.

package main

import (
	"fmt"
	"github.com/cosmos/cosmos-sdk/types"
	ante "github.com/delight-labs/maroo/ante"
)

// A simple decorator that just logs a message	ype LoggingDecorator struct{}

func (ld LoggingDecorator) AnteHandle(ctx types.Context, tx types.Tx, simulate bool, next types.AnteHandler) (newCtx types.Context, err error) {
	fmt.Println("LoggingDecorator: processing transaction")
	return next(ctx, tx, simulate)
}

// A final handler that signifies the end of the chain
func finalHandler(ctx types.Context, tx types.Tx, simulate bool) (types.Context, error) {
	fmt.Println("Final handler reached.")
	return ctx, nil
}

func main() {
	// Create decorators
	logDecorator := LoggingDecorator{}

	// Construct the AnteHandler chain
	anteHandler := ante.NewAppAnteHandler(finalHandler, logDecorator)

	// In a real app, this handler would be set on the BaseApp instance.
	// Here we just call it to demonstrate the flow.
	anteHandler(types.Context{}, nil, false)
}
ESC
검색어를 입력하세요