Skip to content

Commit e2e52e9

Browse files
author
CloudLobster
committed
feat: USDC Escrow for external email payments
- PaymentEscrow.sol: deposit/release/refund with 0.10 USDC minimum - Deployed to Base Mainnet: 0x220bdbd8fb5e908eb04b66f32bf6ecb29b92d60b - Worker: /api/claim/:id (GET info, POST claim with auth) - Worker: /api/send supports escrow_claim param for external emails - Frontend: /claim/:id page (connect wallet → register → claim → receipt) - DB: escrow_claims table with auto-migration - Claim flow: forces BaseMail account creation, delivers receipt as internal email - Rollback: all additive, git revert one commit
1 parent c3cec13 commit e2e52e9

19 files changed

+4881
-133
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122070cd9d4b8b8aad99c43184dc7fd3ca8240bff6535c86cbfd56943e4125eb44a564736f6c634300081a0033
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

contracts/build/contracts_PaymentEscrowFlat_sol_IERC20.bin

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs":[{"internalType":"address","name":"_usdc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"claimId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"claimId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"claimId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Released","type":"event"},{"inputs":[],"name":"MIN_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"claimId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"deposits","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"settled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"claimId","type":"bytes32"}],"name":"getDeposit","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"settled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"claimId","type":"bytes32"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"claimId","type":"bytes32"},{"internalType":"address","name":"claimer","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
60a060405234801561000f575f80fd5b5060405161194c38038061194c83398181016040528101906100319190610108565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610133565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100d7826100ae565b9050919050565b6100e7816100cd565b81146100f1575f80fd5b50565b5f81519050610102816100de565b92915050565b5f6020828403121561011d5761011c6100aa565b5b5f61012a848285016100f4565b91505092915050565b6080516117ec6101605f395f818161036e015281816105fe015281816106f2015261097e01526117ec5ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c80637249fbb6116100645780637249fbb61461011e5780637a86983f1461013a5780638da5cb5b1461016d578063ddbcb5fa1461018b578063f2fde38b146101a957610091565b80631bbdcfd314610095578063278f2ab8146100b15780633d4dff7b146100cd5780633e413bee14610100575b5f80fd5b6100af60048036038101906100aa9190610f90565b6101c5565b005b6100cb60048036038101906100c69190611001565b61040a565b005b6100e760048036038101906100e29190611051565b610699565b6040516100f794939291906110b4565b60405180910390f35b6101086106f0565b6040516101159190611152565b60405180910390f35b61013860048036038101906101339190611051565b610714565b005b610154600480360381019061014f9190611051565b610a3b565b60405161016494939291906110b4565b60405180910390f35b610175610b03565b604051610182919061116b565b60405180910390f35b610193610b26565b6040516101a09190611184565b60405180910390f35b6101c360048036038101906101be919061119d565b610b2d565b005b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024990611222565b60405180910390fd5b5f60015f8481526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036102f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ed9061128a565b60405180910390fd5b806003015f9054906101000a900460ff1615610347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033e906112f2565b60405180910390fd5b6001816003015f6101000a81548160ff0219169083151502179055506103b28282600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce39092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff16837fc8fa66dff4b9073528c3f1bf21a8dc9a18fdf09847e88e96188bc953aef519f083600101546040516103fd9190611184565b60405180910390a3505050565b620186a0821015610450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104479061135a565b60405180910390fd5b428111610492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610489906113c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660015f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105299061142a565b60405180910390fd5b60405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020015f151581525060015f8581526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055509050506106433330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d69909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff16837f2dcdaad87b561ba5a69835009b4c53ef9d3c41ca6cc9574049187659d6c6a715848460405161068c929190611448565b60405180910390a3505050565b6001602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015f9054906101000a900460ff16905084565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60015f8381526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af9061128a565b60405180910390fd5b806003015f9054906101000a900460ff1615610809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610800906112f2565b60405180910390fd5b8060020154421015610850576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610847906114b9565b60405180910390fd5b805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108f657505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90611521565b60405180910390fd5b6001816003015f6101000a81548160ff0219169083151502179055506109c2815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce39092919063ffffffff16565b805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16827ff552ca82e113ac3c539c3d617f29fcd19c172a0c75dad017555c9e109f7fe1838360010154604051610a2f9190611184565b60405180910390a35050565b5f805f805f60015f8781526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250509050805f01518160200151826040015183606001519450945094509450509193509193565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190611222565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90611589565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d648363a9059cbb60e01b8484604051602401610d029291906115a7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610df2565b505050565b610dec846323b872dd60e01b858585604051602401610d8a939291906115ce565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610df2565b50505050565b5f808373ffffffffffffffffffffffffffffffffffffffff1683604051610e199190611655565b5f604051808303815f865af19150503d805f8114610e52576040519150601f19603f3d011682016040523d82523d5f602084013e610e57565b606091505b509150915081610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906116b5565b60405180910390fd5b5f81511115610ef95780806020019051810190610eb991906116fd565b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90611798565b60405180910390fd5b5b50505050565b5f80fd5b5f819050919050565b610f1581610f03565b8114610f1f575f80fd5b50565b5f81359050610f3081610f0c565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f5f82610f36565b9050919050565b610f6f81610f55565b8114610f79575f80fd5b50565b5f81359050610f8a81610f66565b92915050565b5f8060408385031215610fa657610fa5610eff565b5b5f610fb385828601610f22565b9250506020610fc485828601610f7c565b9150509250929050565b5f819050919050565b610fe081610fce565b8114610fea575f80fd5b50565b5f81359050610ffb81610fd7565b92915050565b5f805f6060848603121561101857611017610eff565b5b5f61102586828701610f22565b935050602061103686828701610fed565b925050604061104786828701610fed565b9150509250925092565b5f6020828403121561106657611065610eff565b5b5f61107384828501610f22565b91505092915050565b61108581610f55565b82525050565b61109481610fce565b82525050565b5f8115159050919050565b6110ae8161109a565b82525050565b5f6080820190506110c75f83018761107c565b6110d4602083018661108b565b6110e1604083018561108b565b6110ee60608301846110a5565b95945050505050565b5f819050919050565b5f61111a61111561111084610f36565b6110f7565b610f36565b9050919050565b5f61112b82611100565b9050919050565b5f61113c82611121565b9050919050565b61114c81611132565b82525050565b5f6020820190506111655f830184611143565b92915050565b5f60208201905061117e5f83018461107c565b92915050565b5f6020820190506111975f83018461108b565b92915050565b5f602082840312156111b2576111b1610eff565b5b5f6111bf84828501610f7c565b91505092915050565b5f82825260208201905092915050565b7f4e6f74206f776e657200000000000000000000000000000000000000000000005f82015250565b5f61120c6009836111c8565b9150611217826111d8565b602082019050919050565b5f6020820190508181035f83015261123981611200565b9050919050565b7f4465706f736974206e6f7420666f756e640000000000000000000000000000005f82015250565b5f6112746011836111c8565b915061127f82611240565b602082019050919050565b5f6020820190508181035f8301526112a181611268565b9050919050565b7f416c726561647920736574746c656400000000000000000000000000000000005f82015250565b5f6112dc600f836111c8565b91506112e7826112a8565b602082019050919050565b5f6020820190508181035f830152611309816112d0565b9050919050565b7f42656c6f77206d696e696d756d20302e313020555344430000000000000000005f82015250565b5f6113446017836111c8565b915061134f82611310565b602082019050919050565b5f6020820190508181035f83015261137181611338565b9050919050565b7f457870697279206d75737420626520696e2074686520667574757265000000005f82015250565b5f6113ac601c836111c8565b91506113b782611378565b602082019050919050565b5f6020820190508181035f8301526113d9816113a0565b9050919050565b7f436c61696d20494420616c7265616479207573656400000000000000000000005f82015250565b5f6114146015836111c8565b915061141f826113e0565b602082019050919050565b5f6020820190508181035f83015261144181611408565b9050919050565b5f60408201905061145b5f83018561108b565b611468602083018461108b565b9392505050565b7f4e6f7420657870697265642079657400000000000000000000000000000000005f82015250565b5f6114a3600f836111c8565b91506114ae8261146f565b602082019050919050565b5f6020820190508181035f8301526114d081611497565b9050919050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f61150b600e836111c8565b9150611516826114d7565b602082019050919050565b5f6020820190508181035f830152611538816114ff565b9050919050565b7f5a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f611573600c836111c8565b915061157e8261153f565b602082019050919050565b5f6020820190508181035f8301526115a081611567565b9050919050565b5f6040820190506115ba5f83018561107c565b6115c7602083018461108b565b9392505050565b5f6060820190506115e15f83018661107c565b6115ee602083018561107c565b6115fb604083018461108b565b949350505050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61162f82611603565b611639818561160d565b9350611649818560208601611617565b80840191505092915050565b5f6116608284611625565b915081905092915050565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65645f82015250565b5f61169f6020836111c8565b91506116aa8261166b565b602082019050919050565b5f6020820190508181035f8301526116cc81611693565b9050919050565b6116dc8161109a565b81146116e6575f80fd5b50565b5f815190506116f7816116d3565b92915050565b5f6020828403121561171257611711610eff565b5b5f61171f848285016116e9565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f611782602a836111c8565b915061178d82611728565b604082019050919050565b5f6020820190508181035f8301526117af81611776565b905091905056fea26469706673582212208ebf9bc6402dbaee86a10fec2ff55450838bb353c1d3461c8b8a073ff2b0d97f64736f6c634300081a0033
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220b1e0ceb9f980b35d272e07d9f17fc20e1e4ed1876427f4246dd0d7ba360103a064736f6c634300081a0033

0 commit comments

Comments
 (0)