Skip to content

Commit

Permalink
perf(wip): applying change of lowering L1->L2 message size in SN
Browse files Browse the repository at this point in the history
  • Loading branch information
uri-99 committed Mar 15, 2024
1 parent 45de628 commit 444259d
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 22 deletions.
42 changes: 29 additions & 13 deletions contracts/ethereum/src/PaymentRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -66,22 +66,38 @@ contract PaymentRegistry is Initializable, OwnableUpgradeable, UUPSUpgradeable {
emit Transfer(orderId, msg.sender, destAddress, msg.value, chainId); //3000 gas (todo verify gas)
}

// //TODO change name to claimPaymentStarknet
// TODO apply keccak optimization
//old
//TODO change name to claimPaymentStarknet
// function claimPayment(uint256 orderId, address destAddress, uint256 amount) external payable onlyOwnerOrMM {
// bytes32 index = keccak256(abi.encodePacked(orderId, destAddress, amount, Chain.Starknet));
// require(transfers[index] == true, "Transfer not found.");
// transfers[index] = false; //this transfer has been claimed
// uint256 destAddres_uint256 = uint256(uint160(destAddress));

// //TODO apply optimization developed in branch optimization-for-SN
// uint256[] memory payload = new uint256[](5);
// payload[0] = uint128(orderId); // low
// payload[1] = uint128(orderId >> 128); // high
// payload[2] = destAddres_uint256;
// payload[3] = uint128(amount); // low
// payload[4] = uint128(amount >> 128); // high

// _snMessaging.sendMessageToL2{value: msg.value}(
// StarknetEscrowAddress,
// StarknetEscrowClaimPaymentSelector,
// payload);
// }

function claimPayment(uint256 orderId, address destAddress, uint256 amount) external payable onlyOwnerOrMM {
bytes32 index = keccak256(abi.encodePacked(orderId, destAddress, amount, Chain.Starknet));
require(transfers[index] == true, "Transfer not found.");
transfers[index] = false; //this transfer has been claimed
uint256 destAddres_uint256 = uint256(uint160(destAddress));

//TODO apply optimization developed in branch optimization-for-SN
uint256[] memory payload = new uint256[](5);
payload[0] = uint128(orderId); // low
payload[1] = uint128(orderId >> 128); // high
payload[2] = destAddres_uint256;
payload[3] = uint128(amount); // low
payload[4] = uint128(amount >> 128); // high


//changed now only uint256[3];
uint256[] memory payload = new uint256[](3);
payload[0] = uint256(orderId);
payload[1] = uint256(uint160(destAddress)); //?
payload[2] = uint256(amount);

_snMessaging.sendMessageToL2{value: msg.value}(
StarknetEscrowAddress,
StarknetEscrowClaimPaymentSelector,
Expand Down
50 changes: 41 additions & 9 deletions contracts/starknet/src/escrow.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -232,29 +232,61 @@ mod Escrow {
}
}

// old:
// #[l1_handler]
// fn claim_payment(
// ref self: ContractState,
// from_address: felt252,
// order_id: u256,
// recipient_address: EthAddress,
// amount: u256
// ) {
// self.pausable.assert_not_paused();
// let eth_transfer_contract_felt: felt252 = self.eth_transfer_contract.read().into();
// assert(from_address == eth_transfer_contract_felt, 'Only PAYMENT_REGISTRY_CONTRACT');
// assert(self.orders_pending.read(order_id), 'Order claimed or nonexistent');

// let order = self.orders.read(order_id);
// assert(order.recipient_address == recipient_address, 'recipient_address not match L1');
// assert(order.amount == amount, 'amount not match L1');

// self.orders_pending.write(order_id, false);
// let payment_amount = order.amount + order.fee;

// IERC20Dispatcher { contract_address: self.native_token_eth_starknet.read() }
// .transfer(self.mm_starknet_wallet.read(), payment_amount);

// self.emit(ClaimPayment { order_id, address: self.mm_starknet_wallet.read(), amount });
// }

#[l1_handler]
fn claim_payment(
ref self: ContractState,
from_address: felt252,
order_id: u256,
recipient_address: EthAddress,
amount: u256
order_id: felt252,
recipient_address: felt252,
amount: felt252
) {
self.pausable.assert_not_paused();

let order_id_u256: u256 = order_id.into();
let recipient_address_ethaddress: EthAddress = recipient_address.try_into().unwrap();
let amount_u256: u256 = amount.into();

let eth_transfer_contract_felt: felt252 = self.eth_transfer_contract.read().into();
assert(from_address == eth_transfer_contract_felt, 'Only PAYMENT_REGISTRY_CONTRACT');
assert(self.orders_pending.read(order_id), 'Order claimed or nonexistent');
assert(self.orders_pending.read(order_id_u256), 'Order claimed or nonexistent');

let order = self.orders.read(order_id);
assert(order.recipient_address == recipient_address, 'recipient_address not match L1');
assert(order.amount == amount, 'amount not match L1');
let order = self.orders.read(order_id_u256);
assert(order.recipient_address == recipient_address_ethaddress, 'recipient_address not match L1');
assert(order.amount == amount_u256, 'amount not match L1');

self.orders_pending.write(order_id, false);
self.orders_pending.write(order_id_u256, false);
let payment_amount = order.amount + order.fee;

IERC20Dispatcher { contract_address: self.native_token_eth_starknet.read() }
.transfer(self.mm_starknet_wallet.read(), payment_amount);

self.emit(ClaimPayment { order_id, address: self.mm_starknet_wallet.read(), amount });
self.emit(ClaimPayment { order_id: order_id_u256, address: self.mm_starknet_wallet.read(), amount: amount_u256 });
}
}

0 comments on commit 444259d

Please sign in to comment.