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)
}