Module: Mpp::Methods::Evm

Defined in:
lib/mpp/methods/evm.rb,
lib/mpp/methods/evm/assets.rb,
lib/mpp/methods/evm/evm_method.rb,
lib/mpp/methods/evm/authorization.rb,
lib/mpp/methods/evm/charge_intent.rb

Defined Under Namespace

Modules: Assets, Authorization Classes: ChargeIntent, EvmMethod

Class Method Summary collapse

Class Method Details

.charge(currency:, recipient:, x402:, authorization: nil, chain_id: nil, decimals: nil) ⇒ Object

Factory for a server-side EVM charge method with inline x402 exact support.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/mpp/methods/evm.rb', line 13

def self.charge(currency:, recipient:, x402:, authorization: nil, chain_id: nil, decimals: nil)
  resolved = Assets.resolve(
    currency,
    authorization: authorization,
    chain_id: chain_id,
    decimals: decimals
  )
  x402_options = normalize_x402(x402)

  charge_intent = ChargeIntent.new(
    authorization: resolved.fetch(:authorization),
    facilitator: X402::Facilitator.resolve(x402_options.fetch(:facilitator)),
    max_timeout_seconds: x402_options.fetch(:max_timeout_seconds),
    route_binding: x402_options.fetch(:route_binding)
  )

  method = EvmMethod.new(
    currency: resolved.fetch(:address),
    recipient: recipient,
    decimals: resolved.fetch(:decimals),
    chain_id: resolved.fetch(:chain_id),
    authorization: resolved.fetch(:authorization),
    x402: x402_options
  )
  method.intents = {"charge" => charge_intent}
  method
end