Skip to main content

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

1

Trust dependency

You must trust Stripe with your card details and security
2

Centralization

Single point of failure - if Stripe goes down, payments stop
3

Censorship

Companies can deny service (e.g., sanctioned countries can’t use Stripe)
4

Lack of control

They can lock you out of the system at any time

The Ethereum Challenge

Ethereum has two account types, neither perfect for auto-payments:
Externally Owned Accounts ❌ Not programmable ❌ Require manual signature for every transaction ❌ Can’t automate recurring payments ✅ Can initiate transactions
The dilemma: We need programmability AND transaction initiation, but Ethereum accounts only offer one or the other.

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

1

Merchant requests payment

You identify the customer and set amount + period
2

Customer approves once

User accepts the subscription request in Shakesco app
3

Automated execution

System pulls payments on schedule without further approval
4

Service delivery

Check payment status and grant access accordingly

Key Features

One-Time Payments

For single pull requests:
period: 0;
start_period: 0;
User approves once, payment executes once. Status returns has_paid: true until you request again.

Supported Tokens

Native + ERC-20 tokens: | Token | Address | |-------|---------| | WETH | 0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619 | | WBTC | 0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6 | | USDT | 0xc2132D05D31c914a87C6611C10748AEb04B58e8F | | USDC | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | | DAI | 0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063 |
Token addresses must be checksummed. Use the addresses above exactly as shown.

Split Payments

Multiple users can share subscription costs: How it works:
  1. Set wantstosplit: true in SDK or should_split: true in API
  2. Provide split array (participant addresses)
  3. Provide splitamount array (amount per participant)
  4. Service granted only to “group leader” once all pay
Important rules:
  • Arrays must be same length
  • Group leader gets service, not individual participants
  • Set amounts yourself to avoid UX confusion
  • Verify all participants using isRequested before execution
  • No grace period for split participants
  • Switching from split to single requires full payment again

Updating Subscription Terms

Update freely. Users continue service until current period ends, then new amount applies.
Update freely. Users continue service until current period ends, then new period applies.

Important Parameters

Period

Must be in seconds:
IntervalSeconds
1 week604800
1 month (30 days)2592000
1 year31536000
Minimum period: 2 days (172800 seconds). System executes pulls every 2 days. Need daily intervals? Contact us.

Amount

Enter in base units (not wei):
amount: 20; // For $20 USD
Use parseUnits as shown in SDK docs.
SDK expects USD amounts. Convert from local currency first. API supports multiple currencies.

Fees

Check current rates at shakesco.com/charges under “Card Charges”.

Additional Features

Discount Period

Free trial configured during account deployment. Users get one free trial per account.

Grace Period

Time after payment due date before service is suspended. Can be edited after deployment.

Request & Payment Flow

1

Request subscription

Use requestUser / requestBusiness (SDK) or /request (API)
2

User approves

Customer accepts request in Shakesco app
3

Check payment status

Use hasPaid (SDK) or /has_paid (API) before granting service
Critical: Always check hasPaid before delivering service. This is your only verification method.

Technical Architecture Note

Shakesco uses Threshold Signature Scheme (TSS) to secure wallets. Private key shares are split between you and a remote server, which is why the request-approval flow exists instead of direct UI integration.

Get Started