x402-rack 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +4 -4
- data/docs/ecosystem.md +1 -1
- data/docs/index.md +2 -2
- data/docs/operations/deployment.md +5 -6
- data/docs/operations/performance.md +1 -1
- data/docs/schemes/brc-121.md +1 -1
- data/lib/x402/configuration.rb +4 -6
- data/lib/x402/middleware.rb +3 -8
- data/lib/x402/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0b58759f4b9e4fa2eebbfbe0c683818760b1ca132e4777659f09937699fb0f49
|
|
4
|
+
data.tar.gz: eb918aae9181e4eeef958e722d9a016eae243a50961a1aa505d9b952c93ac355
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 57d226beb1d421defa3993bb744947edd021f9c4e1abf435b6b2246aa43bc7f94755dc1548753bf3d894b6a415ff6fced35c97f7df9eb31210503d004c44a2c6
|
|
7
|
+
data.tar.gz: 9f00ac229e58c2f7c12436760e640de4ffd15767fbb9ee7498bc5a68142d72e5b6ece910701095156694dc73d7fce0d0400ace264582fb105139c025c4334128
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.9.1] - 2026-04-13
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Replace deprecated TAAL ARC endpoints with ARCADE (`arcade.gorillapool.io`, `testnet.arcade.gorillapool.io`) across all e2e specs, docs, and configuration examples (#139)
|
|
13
|
+
|
|
8
14
|
## [0.9.0] - 2026-04-13
|
|
9
15
|
|
|
10
16
|
### Added
|
data/README.md
CHANGED
|
@@ -31,7 +31,7 @@ end
|
|
|
31
31
|
use X402::Middleware
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
ARC defaults to
|
|
34
|
+
ARC defaults to ARCADE. The server holds no private keys — it derives unique payment addresses from the remote wallet's public key, broadcasts via ARC, then relays the settlement to the wallet for UTXO tracking.
|
|
35
35
|
|
|
36
36
|
### With a local wallet (enables BRC-121)
|
|
37
37
|
|
|
@@ -60,7 +60,7 @@ end
|
|
|
60
60
|
use X402::Middleware
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
Both PayGateway and BRC121Gateway are auto-enabled. ARC defaults to
|
|
63
|
+
Both PayGateway and BRC121Gateway are auto-enabled. ARC defaults to ARCADE.
|
|
64
64
|
|
|
65
65
|
### With a remote wallet for all gateways
|
|
66
66
|
|
|
@@ -93,7 +93,7 @@ Clients can pay using whichever protocol they support; the middleware dispatches
|
|
|
93
93
|
| `BRC105Gateway` (BRC-105) | Yes (local or remote) | `config.enable :brc105_gateway` | Transitional |
|
|
94
94
|
| `ProofGateway` (merkleworks) | No | `config.enable :proof_gateway` | Experimental |
|
|
95
95
|
|
|
96
|
-
PayGateway is the only gateway that works without a wallet — it derives payment addresses from the operator's public key and relays settlement after broadcast. BRC-121 and BRC-105 require a wallet for `internalize_action`. ARC defaults to
|
|
96
|
+
PayGateway is the only gateway that works without a wallet — it derives payment addresses from the operator's public key and relays settlement after broadcast. BRC-121 and BRC-105 require a wallet for `internalize_action`. ARC defaults to ARCADE when no explicit `arc_url` is configured.
|
|
97
97
|
|
|
98
98
|
## Advanced configuration
|
|
99
99
|
|
|
@@ -159,7 +159,7 @@ Backwards-compat alternatives still work: `config.server_wif = ENV["SERVER_WIF"]
|
|
|
159
159
|
|
|
160
160
|
Four BSV settlement schemes are supported:
|
|
161
161
|
|
|
162
|
-
- **BSV-pay** (Coinbase v2 headers) — server broadcasts via ARC (defaults to
|
|
162
|
+
- **BSV-pay** (Coinbase v2 headers) — server broadcasts via ARC (defaults to ARCADE). Partial transaction template, unique derived addresses per payment. Works without a wallet via `operator_wallet_url`.
|
|
163
163
|
- **BRC-121** (BSV Association simple) — stateless, BRC-100 wallet-native, zero config.
|
|
164
164
|
- **BRC-105** (BSV Association authenticated) — settlement via `wallet.internalize_action`. Transitional; requires BRC-103 for spec compliance.
|
|
165
165
|
- **BSV-proof** (merkleworks) — experimental; client broadcasts, server checks mempool.
|
data/docs/ecosystem.md
CHANGED
|
@@ -56,7 +56,7 @@ These namespaces must not overlap. When designing new headers or gateway types,
|
|
|
56
56
|
|
|
57
57
|
**x402-rack is a payment gate, not a wallet.** It verifies payments, broadcasts when required, and relays settlement events to the operator's wallet. It should never hold funds or require private key material on the server.
|
|
58
58
|
|
|
59
|
-
**PayGateway** implements the Coinbase v2 header spec with BSV as the settlement network — BSV as a first-class citizen in the broader x402 ecosystem. It is the only gateway that works without a wallet: `operator_wallet_url` enables a keyless relay mode where the server derives unique payment addresses from the remote wallet's public key, broadcasts via ARC (defaulting to
|
|
59
|
+
**PayGateway** implements the Coinbase v2 header spec with BSV as the settlement network — BSV as a first-class citizen in the broader x402 ecosystem. It is the only gateway that works without a wallet: `operator_wallet_url` enables a keyless relay mode where the server derives unique payment addresses from the remote wallet's public key, broadcasts via ARC (defaulting to ARCADE), and relays settlement to the wallet for UTXO tracking. With a wallet, PayGateway converges to the same `internalize_action` settlement engine as BRC-121 and BRC-105.
|
|
60
60
|
|
|
61
61
|
**BRC121Gateway** implements the BSV Association's simple HTTP payment protocol — stateless, BRC-100 wallet-native, zero config. The most direct path to a working BSV-native x402 server.
|
|
62
62
|
|
data/docs/index.md
CHANGED
|
@@ -38,7 +38,7 @@ end
|
|
|
38
38
|
use X402::Middleware
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
PayGateway is auto-enabled. ARC defaults to
|
|
41
|
+
PayGateway is auto-enabled. ARC defaults to ARCADE. The server holds no private keys.
|
|
42
42
|
|
|
43
43
|
### With a local wallet (enables BRC-121)
|
|
44
44
|
|
|
@@ -56,7 +56,7 @@ end
|
|
|
56
56
|
use X402::Middleware
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Both PayGateway and BRC121Gateway are auto-enabled. ARC defaults to
|
|
59
|
+
Both PayGateway and BRC121Gateway are auto-enabled. ARC defaults to ARCADE.
|
|
60
60
|
|
|
61
61
|
### With a remote wallet for all gateways
|
|
62
62
|
|
|
@@ -13,7 +13,7 @@ X402.configure do |config|
|
|
|
13
13
|
|
|
14
14
|
config.gateways = [
|
|
15
15
|
X402::BSV::PayGateway.new(
|
|
16
|
-
arc_client: BSV::Network::ARC.new("https://
|
|
16
|
+
arc_client: BSV::Network::ARC.new("https://arcade.gorillapool.io", api_key: "..."),
|
|
17
17
|
payee_locking_script_hex: "76a914...88ac"
|
|
18
18
|
)
|
|
19
19
|
]
|
|
@@ -30,14 +30,13 @@ Both gateways need an ARC endpoint. The `bsv-sdk` provides `BSV::Network::ARC`:
|
|
|
30
30
|
|
|
31
31
|
```ruby
|
|
32
32
|
arc = BSV::Network::ARC.new(
|
|
33
|
-
"https://
|
|
33
|
+
"https://arcade.gorillapool.io",
|
|
34
34
|
api_key: "your-api-key"
|
|
35
35
|
)
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
- **Testnet**: `https://
|
|
39
|
-
- **Mainnet**: `https://
|
|
40
|
-
- **API key**: free for low volume at https://console.taal.com
|
|
38
|
+
- **Testnet**: `https://testnet.arcade.gorillapool.io`
|
|
39
|
+
- **Mainnet**: `https://arcade.gorillapool.io`
|
|
41
40
|
|
|
42
41
|
## Rate Limiting
|
|
43
42
|
|
|
@@ -90,5 +89,5 @@ arc = BSV::Network::ARC.new(
|
|
|
90
89
|
| Variable | Required | Description |
|
|
91
90
|
|----------|----------|-------------|
|
|
92
91
|
| `ARC_URL` | Yes | ARC broadcast endpoint |
|
|
93
|
-
| `ARC_API_KEY` |
|
|
92
|
+
| `ARC_API_KEY` | Optional | ARCADE API key (if required by provider) |
|
|
94
93
|
| `PAYEE_SCRIPT` | Yes | Payee locking script hex |
|
|
@@ -71,7 +71,7 @@ For high-traffic PayGateway deployments, consider HTTP connection pooling to ARC
|
|
|
71
71
|
```ruby
|
|
72
72
|
# Use a persistent HTTP client
|
|
73
73
|
http_client = Net::HTTP::Persistent.new
|
|
74
|
-
arc = BSV::Network::ARC.new("https://
|
|
74
|
+
arc = BSV::Network::ARC.new("https://arcade.gorillapool.io",
|
|
75
75
|
api_key: "...",
|
|
76
76
|
http_client: http_client)
|
|
77
77
|
```
|
data/docs/schemes/brc-121.md
CHANGED
|
@@ -80,7 +80,7 @@ The minimal zero-config setup:
|
|
|
80
80
|
X402.configure do |c|
|
|
81
81
|
c.domain = "api.example.com"
|
|
82
82
|
c.wallet = X402::Wallet.load # reads ~/.bsv-wallet/wallet.key
|
|
83
|
-
c.arc_url = "https://
|
|
83
|
+
c.arc_url = "https://arcade.gorillapool.io"
|
|
84
84
|
c.protect method: :GET, path: "/api/expensive", amount_sats: 100
|
|
85
85
|
end
|
|
86
86
|
|
data/lib/x402/configuration.rb
CHANGED
|
@@ -6,12 +6,10 @@ require_relative "remote_wallet"
|
|
|
6
6
|
module X402
|
|
7
7
|
# DSL for configuring X402 middleware, gateways, and protected routes.
|
|
8
8
|
#
|
|
9
|
-
# @example Minimal configuration
|
|
9
|
+
# @example Minimal configuration (relay mode — no keys on server)
|
|
10
10
|
# X402.configure do |config|
|
|
11
11
|
# config.domain = "api.example.com"
|
|
12
|
-
# config.
|
|
13
|
-
# config.arc_url = "https://arc.taal.com"
|
|
14
|
-
# config.enable :pay_gateway
|
|
12
|
+
# config.operator_wallet_url = "https://my-wallet.example.com/api/server-wallet"
|
|
15
13
|
# config.protect method: :GET, path: "/api/expensive", amount_sats: 100
|
|
16
14
|
# end
|
|
17
15
|
class Configuration
|
|
@@ -396,7 +394,7 @@ module X402
|
|
|
396
394
|
enable(:pay_gateway) if arc_available?
|
|
397
395
|
end
|
|
398
396
|
|
|
399
|
-
# Always true — ARC.default (
|
|
397
|
+
# Always true — ARC.default (ARCADE) is available even
|
|
400
398
|
# when no explicit arc_url is configured. PayGateway is auto-enabled
|
|
401
399
|
# whenever a wallet is present.
|
|
402
400
|
def arc_available?
|
|
@@ -407,7 +405,7 @@ module X402
|
|
|
407
405
|
if arc_url && !arc_url.empty?
|
|
408
406
|
::BSV::Network::ARC.new(arc_url, api_key: arc_api_key)
|
|
409
407
|
else
|
|
410
|
-
logger.info "[x402] using default ARC broadcaster (
|
|
408
|
+
logger.info "[x402] using default ARC broadcaster (ARCADE)"
|
|
411
409
|
::BSV::Network::ARC.default(testnet: @network == "bsv:testnet")
|
|
412
410
|
end
|
|
413
411
|
end
|
data/lib/x402/middleware.rb
CHANGED
|
@@ -12,15 +12,10 @@ module X402
|
|
|
12
12
|
# to the matching gateway for settlement.
|
|
13
13
|
#
|
|
14
14
|
# @example config.ru
|
|
15
|
-
# X402.configure
|
|
16
|
-
# config.domain = "api.example.com"
|
|
17
|
-
# config.server_wif = ENV["SERVER_WIF"]
|
|
18
|
-
# config.arc_url = "https://arc.taal.com"
|
|
19
|
-
# config.enable :pay_gateway
|
|
20
|
-
# config.protect method: :GET, path: "/api/expensive", amount_sats: 100
|
|
21
|
-
# end
|
|
22
|
-
#
|
|
15
|
+
# X402.configure { |c| c.operator_wallet_url = "https://..." }
|
|
23
16
|
# use X402::Middleware
|
|
17
|
+
#
|
|
18
|
+
# @see X402::Configuration for full configuration options
|
|
24
19
|
class Middleware
|
|
25
20
|
# @param app [#call] next Rack app in the middleware stack
|
|
26
21
|
def initialize(app)
|
data/lib/x402/version.rb
CHANGED