mechanisms/evm/upto/facilitator
import "github.com/x402-foundation/x402/go/v2/mechanisms/evm/upto/facilitator"
Constants
Upto-specific error constants.
Source: mechanisms/evm/upto/facilitator/errors.go:7
const (
ErrUptoInvalidScheme = "invalid_upto_evm_scheme"
ErrUptoNetworkMismatch = "invalid_upto_evm_network_mismatch"
ErrUptoInvalidPayload = "invalid_upto_evm_payload"
ErrUptoSettlementExceedsAmount = "invalid_upto_evm_payload_settlement_exceeds_amount"
ErrUptoAmountExceedsPermitted = "upto_amount_exceeds_permitted"
ErrUptoUnauthorizedFacilitator = "upto_unauthorized_facilitator"
ErrUptoFacilitatorMismatch = "upto_facilitator_mismatch"
ErrUptoVerificationFailed = "invalid_upto_evm_verification_failed"
ErrUptoFailedToGetNetworkConfig = "invalid_upto_evm_failed_to_get_network_config"
ErrUptoFailedToGetReceipt = "invalid_upto_evm_failed_to_get_receipt"
ErrUptoTransactionFailed = "invalid_upto_evm_transaction_failed"
// Shared Permit2 error constants - canonical values live in evm.ErrPermit2*
ErrPermit2InvalidSpender = evm.ErrPermit2InvalidSpender
ErrPermit2RecipientMismatch = evm.ErrPermit2RecipientMismatch
ErrPermit2DeadlineExpired = evm.ErrPermit2DeadlineExpired
ErrPermit2NotYetValid = evm.ErrPermit2NotYetValid
ErrPermit2AmountMismatch = evm.ErrPermit2AmountMismatch
ErrPermit2TokenMismatch = evm.ErrPermit2TokenMismatch
ErrPermit2InvalidSignature = evm.ErrPermit2InvalidSignature
ErrPermit2InvalidAmount = evm.ErrPermit2InvalidAmount
ErrPermit2InvalidDestination = evm.ErrPermit2InvalidDestination
ErrPermit2InvalidOwner = evm.ErrPermit2InvalidOwner
ErrPermit2PaymentTooEarly = evm.ErrPermit2PaymentTooEarly
ErrPermit2InvalidNonce = evm.ErrPermit2InvalidNonce
ErrPermit2612AmountMismatch = evm.ErrPermit2612AmountMismatch
ErrPermit2SimulationFailed = evm.ErrPermit2SimulationFailed
ErrPermit2InsufficientBalance = evm.ErrPermit2InsufficientBalance
ErrPermit2ProxyNotDeployed = evm.ErrPermit2ProxyNotDeployed
ErrPermit2AllowanceRequired = evm.ErrPermit2AllowanceRequired
ErrErc20ApprovalInsufficientEth = evm.ErrErc20ApprovalInsufficientEth
ErrErc20ApprovalBroadcastFailed = evm.ErrErc20ApprovalBroadcastFailed
ErrInvalidSignatureFormat = "invalid_upto_evm_signature_format"
ErrInvalidRequiredAmount = "invalid_upto_evm_required_amount"
)Functions
func BuildUptoPermit2SettleArgs(permit2Payload *evm.UptoPermit2Payload, settlementAmount *big.Int) (*UptoPermit2SettleArgs, error)
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:44
BuildUptoPermit2SettleArgs converts a raw UptoPermit2Payload into typed contract-call arguments.
func CheckUptoPermit2Prerequisites( ctx context.Context, signer evm.FacilitatorEvmSigner, tokenAddress string, payer string, amountRequired string, ) *x402.VerifyResponse
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:277
CheckUptoPermit2Prerequisites checks proxy deployment, payer token balance and payer ETH balance for gas.
func DiagnoseUptoPermit2SimulationFailure( ctx context.Context, signer evm.FacilitatorEvmSigner, tokenAddress string, permit2Payload *evm.UptoPermit2Payload, amountRequired string, ) *x402.VerifyResponse
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:234
DiagnoseUptoPermit2SimulationFailure runs a multicall diagnostic to return the most specific error reason after an upto simulation failure.
func NewUptoEvmScheme(signer evm.FacilitatorEvmSigner, config *UptoEvmSchemeConfig) *UptoEvmScheme
func SettleUptoPermit2( ctx context.Context, signer evm.FacilitatorEvmSigner, payload types.PaymentPayload, requirements types.PaymentRequirements, permit2Payload *evm.UptoPermit2Payload, facilCtx *x402.FacilitatorContext, simulateInSettle bool, ) (*x402.SettleResponse, error)
Source: mechanisms/evm/upto/facilitator/permit2.go:193
SettleUptoPermit2 settles an upto Permit2 payment by calling x402UptoPermit2Proxy.settle(). simulateInSettle controls whether to run an eth_call simulation as part of pre-settle verification.
func SimulateUptoPermit2Settle( ctx context.Context, signer evm.FacilitatorEvmSigner, permit2Payload *evm.UptoPermit2Payload, settlementAmount *big.Int, ) (bool, error)
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:118
SimulateUptoPermit2Settle runs settle() via eth_call (ReadContract) on the upto proxy.
func SimulateUptoPermit2SettleWithPermit( ctx context.Context, signer evm.FacilitatorEvmSigner, permit2Payload *evm.UptoPermit2Payload, settlementAmount *big.Int, eip2612Signature, eip2612Amount, eip2612DeadlineStr string, ) (bool, error)
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:147
SimulateUptoPermit2SettleWithPermit runs settleWithPermit() via eth_call on the upto proxy.
func VerifyUptoPermit2( ctx context.Context, signer evm.FacilitatorEvmSigner, payload types.PaymentPayload, requirements types.PaymentRequirements, permit2Payload *evm.UptoPermit2Payload, facilCtx *x402.FacilitatorContext, simulate bool, ) (*x402.VerifyResponse, error)
Source: mechanisms/evm/upto/facilitator/permit2.go:21
VerifyUptoPermit2 verifies an upto Permit2 payment payload against the given requirements. simulate controls whether to run an eth_call simulation as part of verification.
Types
type EIP2612PermitData
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:14
EIP2612PermitData holds the parsed EIP-2612 permit fields for settleWithPermit() calls.
type EIP2612PermitData struct {
Value *big.Int
Deadline *big.Int
R [32]byte
S [32]byte
V uint8
}Fields
Value *big.IntDeadline *big.IntR [32]byteS [32]byteV uint8
type UptoEvmScheme
Source: mechanisms/evm/upto/facilitator/scheme.go:19
UptoEvmScheme implements the SchemeNetworkFacilitator interface for EVM upto payments (V2). Only supports Permit2 (no EIP-3009 path).
type UptoEvmScheme struct {
// contains filtered or unexported fields
}func CaipFamily() string
Source: mechanisms/evm/upto/facilitator/scheme.go:40
CaipFamily returns the CAIP family pattern this facilitator supports
func GetExtra(_ x402.Network) map[string]interface{}
Source: mechanisms/evm/upto/facilitator/scheme.go:46
GetExtra returns mechanism-specific extra data for the supported kinds endpoint. For upto, returns the facilitatorAddress so clients include it in their signed witness.
func GetSigners(_ x402.Network) []string
Source: mechanisms/evm/upto/facilitator/scheme.go:57
GetSigners returns signer addresses used by this facilitator.
func Scheme) Scheme() string
func Settle( ctx context.Context, payload types.PaymentPayload, requirements types.PaymentRequirements, fctx *x402.FacilitatorContext, ) (*x402.SettleResponse, error)
Source: mechanisms/evm/upto/facilitator/scheme.go:81
Settle settles a V2 upto payment on-chain.
func Verify( ctx context.Context, payload types.PaymentPayload, requirements types.PaymentRequirements, fctx *x402.FacilitatorContext, ) (*x402.VerifyResponse, error)
Source: mechanisms/evm/upto/facilitator/scheme.go:62
Verify verifies a V2 upto payment payload against requirements.
type UptoEvmSchemeConfig
Source: mechanisms/evm/upto/facilitator/scheme.go:13
type UptoEvmSchemeConfig struct {
SimulateInSettle bool
}Fields
SimulateInSettle bool
type UptoPermit2SettleArgs
Source: mechanisms/evm/upto/facilitator/permit2_helpers.go:24
UptoPermit2SettleArgs holds the parsed and typed arguments for upto settle()/settleWithPermit(). Differs from exact: witness includes Facilitator, and settle takes a separate Amount.
type UptoPermit2SettleArgs struct {
Permit struct {
Permitted struct {
Token common.Address
Amount *big.Int
}
Nonce *big.Int
Deadline *big.Int
}
SettlementAmount *big.Int
Owner common.Address
Witness struct {
To common.Address
Facilitator common.Address
ValidAfter *big.Int
}
Signature []byte
}Fields
Permit struct { Permitted struct { Token common.Address Amount *big.Int } Nonce *big.Int Deadline *big.Int }SettlementAmount *big.IntOwner common.AddressWitness struct { To common.Address Facilitator common.Address ValidAfter *big.Int }Signature []byte
