The Pull-vs-Push Problem
Traditional payment systems like Stripe work through permission-based pulls. When you give Stripe your card details, you’re authorizing them to pull funds from your account.What Users See
Appears as if you’re pushing payment
What Actually Happens
Stripe pulls funds from your account
Traditional System Issues
The Ethereum Challenge
Ethereum has two account types, neither perfect for auto-payments:- EOAs (Regular Wallets)
- Contract Accounts
Externally Owned Accounts ❌ Not programmable ❌ Require manual
signature for every transaction ❌ Can’t automate recurring payments ✅ Can
initiate transactions
The Solution: Account Abstraction
Account Abstraction (ERC-4337) transforms every Ethereum account into a programmable smart contract. Key innovation: Contracts can now verify who (address) is making a transaction without requiring how (signature) every time.What This Enables
Permissionless
Anyone with internet can use it
Censorship-Resistant
No central authority to block you
Self-Custody
Users keep their private keys
Decentralized
Multiple entities can trigger payments
How Shakesco Works
Basic Flow
Key Features
One-Time Payments
For single pull requests:has_paid: true until you request again.
Supported Tokens
- Polygon
- Ethereum
Native + ERC-20 tokens: | Token | Address | |-------|---------| | WETH |
0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619 | | WBTC |
0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6 | | USDT |
0xc2132D05D31c914a87C6611C10748AEb04B58e8F | | USDC |
0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | | DAI |
0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063 |Split Payments
Multiple users can share subscription costs: How it works:- Set
wantstosplit: truein SDK orshould_split: truein API - Provide
splitarray (participant addresses) - Provide
splitamountarray (amount per participant) - Service granted only to “group leader” once all pay
- Arrays must be same length
- Group leader gets service, not individual participants
- Set amounts yourself to avoid UX confusion
- Verify all participants using
isRequestedbefore execution - No grace period for split participants
- Switching from split to single requires full payment again
Updating Subscription Terms
Changing amount
Changing amount
Update freely. Users continue service until current period ends, then new
amount applies.
Changing period
Changing period
Update freely. Users continue service until current period ends, then new
period applies.
Important Parameters
Period
Must be in seconds:| Interval | Seconds |
|---|---|
| 1 week | 604800 |
| 1 month (30 days) | 2592000 |
| 1 year | 31536000 |
Amount
Enter in base units (not wei):parseUnits as shown in SDK docs.