Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .gas-profile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
new MockERC20: 39792163
new Payments: 109908523
setOperatorApproval: 10674805
createRail: 15093806
mint: 7360324
approve: 5547544
deposit: 24339260
modifyRailPayment: 18930731
modifyRailLockup: 20798017
modifyRailPayment: 24776330
settleRail: 13521016
withdraw: 27428591
withdrawTo: 27519980
settleRail: 16984893
terminateRail: 20247937
burnForFees: 24477208
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ out/
# Ignores development broadcast logs
!/broadcast
/broadcast/*/31337/
/broadcast/*/31415926/
/broadcast/**/dry-run/

# Dotenv file
Expand Down
88 changes: 88 additions & 0 deletions tools/Profile.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
pragma solidity ^0.8.30;

import "forge-std/Script.sol";

import "../src/Payments.sol";
import "../test/mocks/MockERC20.sol";

contract Profile is Script {
function createRail(address sender) public {
vm.deal(sender, 2000 * 10 ** 18);

vm.startBroadcast();

MockERC20 token = new MockERC20("MockToken", "MOCK");

Payments payments = new Payments();

address from = sender;
address to = sender;
address operator = sender;
address validator = address(0);

uint256 commissionRateBps = 0;
address serviceFeeRecipient = sender;

uint256 rateAllowance = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
uint256 lockupAllowance = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
uint256 maxLockupPeriod = 0x00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;

payments.setOperatorApproval(token, operator, true, rateAllowance, lockupAllowance, maxLockupPeriod);

uint256 railId = payments.createRail(token, from, to, validator, commissionRateBps, serviceFeeRecipient);

uint256 amount = 10**18;
token.mint(from, amount);
token.approve(address(payments), amount);
payments.deposit(token, from, amount);

// TODO depositWithPermit
// TODO depositWithPermitAndApproveOperator
// TODO depositWithPermitAndIncreaseOperatorApproval
// TODO increaseOperatorApproval


payments.modifyRailPayment(railId, 10**6, 0);

payments.modifyRailLockup(railId, 5, 10**6);

payments.modifyRailPayment(railId, 10**3, 10**6);

payments.settleRail(railId, block.number);

payments.withdraw(token, 10**6);

payments.withdrawTo(token, to, 10**6);
}

function settleRail(address sender, Payments payments, uint256 railId) public {
vm.deal(sender, 2000 * 10 ** 18);
vm.startBroadcast();

payments.settleRail(railId, block.number);
}

function terminateRail(address sender, Payments payments, uint256 railId) public {
vm.deal(sender, 2000 * 10 ** 18);
vm.startBroadcast();

payments.terminateRail(railId);

// TODO settleTerminatedRailWithoutValidation
}

function endAuction(address sender, Payments payments, uint256 railId) public {
vm.deal(sender, 2000 * 10 ** 18);

Payments.RailView memory railView = payments.getRail(railId);
IERC20 token = railView.token;

(uint256 fullAmount,,,) = payments.accounts(token, address(payments));

address recipient = address(0x4a6f6B9fF1fc974096f9063a45Fd12bD5B928AD1);

vm.startBroadcast();

payments.burnForFees{value: FIRST_AUCTION_START_PRICE}(token, recipient, fullAmount);
}
}
27 changes: 27 additions & 0 deletions tools/profile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash

set -e

pushd ../localnet
bash ./reset.sh
source ./local_lotus.sh
popd

TOKEN_ADDRESS=0xe9ae74e0c182aab11bddb483227cc1f6600b3625
RAIL_ADDRESS=0xf6990c51dc94b36c5d5184bf60107efe99dde592

forge script -vvv -g 49400 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "createRail(address)" tools/Profile.s.sol:Profile $SENDER_ADDRESS
[[ "$(../forge-script-gas-report/forge_script_block_numbers ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | wc -l)" -eq 1 ]] || (echo possible nondeterminism detected && exit 1)
../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile

forge script -vvv -g 49400 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "settleRail(address,address,uint256)" tools/Profile.s.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1
[[ "$(../forge-script-gas-report/forge_script_block_numbers ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | wc -l)" -eq 1 ]] || (echo possible nondeterminism detected && exit 1)
../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile

forge script -vvv -g 49400 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "terminateRail(address,address,uint256)" tools/Profile.s.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1
[[ "$(../forge-script-gas-report/forge_script_block_numbers ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | wc -l)" -eq 1 ]] || (echo possible nondeterminism detected && exit 1)
../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/terminateRail-latest.json | tee -a .gas-profile

forge script -vvv -g 49400 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "endAuction(address,address,uint256)" tools/Profile.s.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1
[[ "$(../forge-script-gas-report/forge_script_block_numbers ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | wc -l)" -eq 1 ]] || (echo possible nondeterminism detected && exit 1)
../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/endAuction-latest.json | tee -a .gas-profile
6 changes: 6 additions & 0 deletions tools/retry_profile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash

# retry tools/profile.sh until it succeeds


until ./tools/profile.sh ; do {} ; done