From 05dddf080deba6f38cc2df79059e9f612b8840f4 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Mon, 4 Aug 2025 18:42:07 -0500 Subject: [PATCH 01/18] wip using forge script --- tools/Profile.sol | 27 +++++++++++++++++++++++++++ tools/profile.sh | 8 ++++++++ 2 files changed, 35 insertions(+) create mode 100644 tools/Profile.sol create mode 100644 tools/profile.sh diff --git a/tools/Profile.sol b/tools/Profile.sol new file mode 100644 index 00000000..a7ce9912 --- /dev/null +++ b/tools/Profile.sol @@ -0,0 +1,27 @@ +pragma solidity ^0.8.30; + +import "forge-std/Script.sol"; + +import "../src/Payments.sol"; +import "../test/mocks/MockERC20.sol"; + +contract Profile is Script { + function run() public { + vm.startBroadcast(); + + ERC20 token = new MockERC20("MockToken", "MOCK"); + + Payments payments = new Payments(); + + address from = address(this); + address to = address(this); + address validator = address(this); + + uint256 commissionRateBps = 0; + address serviceFeeRecipient = address(this); + + //payments.createRail(address(token), from, to, validator, commissionRateBps, serviceFeeRecipient); + + vm.stopBroadcast(); + } +} diff --git a/tools/profile.sh b/tools/profile.sh new file mode 100644 index 00000000..ef863728 --- /dev/null +++ b/tools/profile.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +pushd ../localnet +source ./local_lotus.sh +popd + +forge script -vvv -g 20000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 tools/Profile.sol:Profile + From a4fba2dd60b10c35cd5e32773e4dbaae3d3eb23b Mon Sep 17 00:00:00 2001 From: William Morriss Date: Tue, 5 Aug 2025 15:52:27 -0500 Subject: [PATCH 02/18] create gas profile --- .gas-profile | 4 ++++ tools/Profile.sol | 33 +++++++++++++++++++++++++++------ tools/profile.sh | 5 ++++- 3 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 .gas-profile diff --git a/.gas-profile b/.gas-profile new file mode 100644 index 00000000..cb0906c3 --- /dev/null +++ b/.gas-profile @@ -0,0 +1,4 @@ +new MockERC20: 32066080 +new Payments: 94015205 +setOperatorApproval: 10407013 +createRail: 14238123 diff --git a/tools/Profile.sol b/tools/Profile.sol index a7ce9912..d1dfdaaf 100644 --- a/tools/Profile.sol +++ b/tools/Profile.sol @@ -6,21 +6,42 @@ import "../src/Payments.sol"; import "../test/mocks/MockERC20.sol"; contract Profile is Script { - function run() public { + function run(address sender) public { vm.startBroadcast(); ERC20 token = new MockERC20("MockToken", "MOCK"); Payments payments = new Payments(); - address from = address(this); - address to = address(this); - address validator = address(this); + address from = sender; + address to = sender; + address operator = sender; + address validator = sender; uint256 commissionRateBps = 0; - address serviceFeeRecipient = address(this); + address serviceFeeRecipient = sender; - //payments.createRail(address(token), from, to, validator, commissionRateBps, serviceFeeRecipient); + uint256 rateAllowance = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; + uint256 lockupAllowance = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; + uint256 maxLockupPeriod = 0x00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; + + payments.setOperatorApproval(address(token), operator, true, rateAllowance, lockupAllowance, maxLockupPeriod); + + payments.createRail(address(token), from, to, validator, commissionRateBps, serviceFeeRecipient); + + + // deposit + // depositWithPermit + // depositWithPermitAndApproveOperator + // depositWithPermitAndIncreaseOperatorApproval + // modifyRailPayment + // modifyRailLockup + // increaseOperatorApproval + // settleRail + // withdraw + // withdrawTo + // terminateRail + // settleTerminatedRailWithoutValidation vm.stopBroadcast(); } diff --git a/tools/profile.sh b/tools/profile.sh index ef863728..28f353d2 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -4,5 +4,8 @@ pushd ../localnet source ./local_lotus.sh popd -forge script -vvv -g 20000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 tools/Profile.sol:Profile +forge script -vvv -g 20000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "run(address)" tools/Profile.sol:Profile $SENDER_ADDRESS + + +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.sol/$CHAIN_ID/run-latest.json | tee .gas-profile From 062a772429cee75abd3b42889f6e94057b6d2e31 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Wed, 6 Aug 2025 11:21:58 -0500 Subject: [PATCH 03/18] the deterministic result --- .gas-profile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gas-profile b/.gas-profile index cb0906c3..ac46cafc 100644 --- a/.gas-profile +++ b/.gas-profile @@ -1,4 +1,4 @@ -new MockERC20: 32066080 -new Payments: 94015205 -setOperatorApproval: 10407013 -createRail: 14238123 +new MockERC20: 30134813 +new Payments: 92086771 +setOperatorApproval: 10405259 +createRail: 14976886 From 0415590700d7cb7fd416b4f50e05ed5d75865f76 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Wed, 6 Aug 2025 11:36:22 -0500 Subject: [PATCH 04/18] must reset --- tools/profile.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/profile.sh b/tools/profile.sh index 28f353d2..44b4c565 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -1,6 +1,7 @@ #!/bin/bash pushd ../localnet +bash ./reset.sh source ./local_lotus.sh popd From 44ba53fc8c91ec89511ef00c84d903244562d940 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Wed, 6 Aug 2025 17:33:18 -0500 Subject: [PATCH 05/18] measure additional functions without passing time --- .gas-profile | 12 ++++++++++-- tools/Profile.sol | 31 +++++++++++++++++++++++-------- tools/profile.sh | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.gas-profile b/.gas-profile index ac46cafc..f89c8acf 100644 --- a/.gas-profile +++ b/.gas-profile @@ -1,4 +1,12 @@ -new MockERC20: 30134813 -new Payments: 92086771 +new MockERC20: 30138346 +new Payments: 92082344 setOperatorApproval: 10405259 createRail: 14976886 +mint: 7205888 +approve: 5403823 +deposit: 23613974 +modifyRailPayment: 19595194 +modifyRailLockup: 20768123 +modifyRailPayment: 21378356 +settleRail: 17421622 +withdraw: 20514313 diff --git a/tools/Profile.sol b/tools/Profile.sol index d1dfdaaf..343a6961 100644 --- a/tools/Profile.sol +++ b/tools/Profile.sol @@ -7,9 +7,11 @@ import "../test/mocks/MockERC20.sol"; contract Profile is Script { function run(address sender) public { + vm.deal(sender, 2000 * 10 ** 18); + vm.startBroadcast(); - ERC20 token = new MockERC20("MockToken", "MOCK"); + MockERC20 token = new MockERC20("MockToken", "MOCK"); Payments payments = new Payments(); @@ -27,15 +29,28 @@ contract Profile is Script { payments.setOperatorApproval(address(token), operator, true, rateAllowance, lockupAllowance, maxLockupPeriod); - payments.createRail(address(token), from, to, validator, commissionRateBps, serviceFeeRecipient); + uint256 railId = payments.createRail(address(token), from, to, validator, commissionRateBps, serviceFeeRecipient); + + uint256 amount = 10**18; + token.mint(from, amount); + token.approve(address(payments), amount); + payments.deposit(address(token), from, amount); + + // TODO depositWithPermit + // TODO depositWithPermitAndApproveOperator + // TODO depositWithPermitAndIncreaseOperatorApproval + + + payments.modifyRailPayment(railId, 10**6, 0); + + payments.modifyRailLockup(railId, 5, 10**6); + + payments.modifyRailPayment(railId, 0, 10**6); + + payments.settleRail{value:payments.NETWORK_FEE()}(railId, block.number); + payments.withdraw(address(token), 10**6); - // deposit - // depositWithPermit - // depositWithPermitAndApproveOperator - // depositWithPermitAndIncreaseOperatorApproval - // modifyRailPayment - // modifyRailLockup // increaseOperatorApproval // settleRail // withdraw diff --git a/tools/profile.sh b/tools/profile.sh index 44b4c565..b4975d0a 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -5,7 +5,7 @@ bash ./reset.sh source ./local_lotus.sh popd -forge script -vvv -g 20000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "run(address)" tools/Profile.sol:Profile $SENDER_ADDRESS +forge script -vvv -g 30000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "run(address)" tools/Profile.sol:Profile $SENDER_ADDRESS From 690d67f23bf30085e45c302eb1d8618b09d96232 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 13:20:47 -0500 Subject: [PATCH 06/18] measure settleRail after time passed --- .gas-profile | 15 +++++++++------ tools/Profile.sol | 31 ++++++++++++++++++++++--------- tools/profile.sh | 20 ++++++++++++++++++-- 3 files changed, 49 insertions(+), 17 deletions(-) diff --git a/.gas-profile b/.gas-profile index f89c8acf..548ea904 100644 --- a/.gas-profile +++ b/.gas-profile @@ -1,12 +1,15 @@ new MockERC20: 30138346 new Payments: 92082344 setOperatorApproval: 10405259 -createRail: 14976886 +createRail: 14763367 mint: 7205888 approve: 5403823 deposit: 23613974 -modifyRailPayment: 19595194 -modifyRailLockup: 20768123 -modifyRailPayment: 21378356 -settleRail: 17421622 -withdraw: 20514313 +modifyRailPayment: 18611939 +modifyRailLockup: 20489814 +modifyRailPayment: 23862826 +settleRail: 17961981 +withdraw: 21977789 +withdrawTo: 22062638 +settleRail: 27102987 +terminateRail: 19583955 diff --git a/tools/Profile.sol b/tools/Profile.sol index 343a6961..c2b88fad 100644 --- a/tools/Profile.sol +++ b/tools/Profile.sol @@ -6,7 +6,7 @@ import "../src/Payments.sol"; import "../test/mocks/MockERC20.sol"; contract Profile is Script { - function run(address sender) public { + function createRail(address sender) public { vm.deal(sender, 2000 * 10 ** 18); vm.startBroadcast(); @@ -18,7 +18,7 @@ contract Profile is Script { address from = sender; address to = sender; address operator = sender; - address validator = sender; + address validator = address(0); uint256 commissionRateBps = 0; address serviceFeeRecipient = sender; @@ -39,25 +39,38 @@ contract Profile is Script { // TODO depositWithPermit // TODO depositWithPermitAndApproveOperator // TODO depositWithPermitAndIncreaseOperatorApproval + // TODO increaseOperatorApproval payments.modifyRailPayment(railId, 10**6, 0); payments.modifyRailLockup(railId, 5, 10**6); - payments.modifyRailPayment(railId, 0, 10**6); + payments.modifyRailPayment(railId, 10**3, 10**6); payments.settleRail{value:payments.NETWORK_FEE()}(railId, block.number); payments.withdraw(address(token), 10**6); - // increaseOperatorApproval - // settleRail - // withdraw - // withdrawTo - // terminateRail - // settleTerminatedRailWithoutValidation + payments.withdrawTo(address(token), to, 10**6); + vm.stopBroadcast(); } + + function settleRail(address sender, Payments payments, uint256 railId) public { + vm.deal(sender, 2000 * 10 ** 18); + vm.startBroadcast(); + + payments.settleRail{value:payments.NETWORK_FEE()}(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 + } } diff --git a/tools/profile.sh b/tools/profile.sh index b4975d0a..f137b998 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -1,12 +1,28 @@ #!/bin/bash +set -e + pushd ../localnet bash ./reset.sh source ./local_lotus.sh popd -forge script -vvv -g 30000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "run(address)" tools/Profile.sol:Profile $SENDER_ADDRESS +TOKEN_ADDRESS=0xe9ae74e0c182aab11bddb483227cc1f6600b3625 +RAIL_ADDRESS=0xf6990c51dc94b36c5d5184bf60107efe99dde592 + +forge script -vvv -g 44000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "createRail(address)" tools/Profile.sol:Profile $SENDER_ADDRESS + +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile + +sleep 35 + + +forge script -vvv -g 44000 --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.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1 + +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile +sleep 35 +forge script -vvv -g 44000 --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.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1 -../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.sol/$CHAIN_ID/run-latest.json | tee .gas-profile +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.sol/$CHAIN_ID/terminateRail-latest.json | tee -a .gas-profile From 596327a52d9e1141f2af098d7d2a00cdd32a1f12 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 13:21:02 -0500 Subject: [PATCH 07/18] ignore localnet broadcast --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a6c78c9e..54dc6b6f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ out/ # Ignores development broadcast logs !/broadcast /broadcast/*/31337/ +/broadcast/*/31415926/ /broadcast/**/dry-run/ # Dotenv file From e8b4086b5623acc98e6c73490555f985844d7122 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 13:32:31 -0500 Subject: [PATCH 08/18] rename script to .s.sol --- tools/{Profile.sol => Profile.s.sol} | 0 tools/profile.sh | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) rename tools/{Profile.sol => Profile.s.sol} (100%) diff --git a/tools/Profile.sol b/tools/Profile.s.sol similarity index 100% rename from tools/Profile.sol rename to tools/Profile.s.sol diff --git a/tools/profile.sh b/tools/profile.sh index f137b998..c6067f18 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -10,19 +10,19 @@ popd TOKEN_ADDRESS=0xe9ae74e0c182aab11bddb483227cc1f6600b3625 RAIL_ADDRESS=0xf6990c51dc94b36c5d5184bf60107efe99dde592 -forge script -vvv -g 44000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADDRESS --private-key $SENDER_KEY --rpc-url $API_URL/rpc/v1 --sig "createRail(address)" tools/Profile.sol:Profile $SENDER_ADDRESS +forge script -vvv -g 44000 --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_gas_report ./broadcast/Profile.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile sleep 35 -forge script -vvv -g 44000 --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.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1 +forge script -vvv -g 44000 --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_gas_report ./broadcast/Profile.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile sleep 35 -forge script -vvv -g 44000 --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.sol:Profile $SENDER_ADDRESS $RAIL_ADDRESS 1 +forge script -vvv -g 44000 --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_gas_report ./broadcast/Profile.sol/$CHAIN_ID/terminateRail-latest.json | tee -a .gas-profile +../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/terminateRail-latest.json | tee -a .gas-profile From 3cd6831f62aecdbf90b5eee56d7fccc20f852593 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 13:55:08 -0500 Subject: [PATCH 09/18] can sleep less --- tools/profile.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/profile.sh b/tools/profile.sh index c6067f18..dc60900e 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -14,14 +14,14 @@ forge script -vvv -g 44000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADD ../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile -sleep 35 +sleep 10 forge script -vvv -g 44000 --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_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile -sleep 35 +sleep 10 forge script -vvv -g 44000 --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 From 1808eb7368903b65331c8e5e2a601747750ad9a0 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 14:30:36 -0500 Subject: [PATCH 10/18] can sleep 5 instead of 10 --- tools/profile.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/profile.sh b/tools/profile.sh index dc60900e..7a0b3d82 100644 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -14,14 +14,14 @@ forge script -vvv -g 44000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADD ../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile -sleep 10 +sleep 5 forge script -vvv -g 44000 --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_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile -sleep 10 +sleep 5 forge script -vvv -g 44000 --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 From 0833e24d2d5a27275547cfa89f432e67f73c917e Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 14:52:04 -0500 Subject: [PATCH 11/18] don't need stopBroadcast --- tools/Profile.s.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/Profile.s.sol b/tools/Profile.s.sol index c2b88fad..617bbbdc 100644 --- a/tools/Profile.s.sol +++ b/tools/Profile.s.sol @@ -53,9 +53,6 @@ contract Profile is Script { payments.withdraw(address(token), 10**6); payments.withdrawTo(address(token), to, 10**6); - - - vm.stopBroadcast(); } function settleRail(address sender, Payments payments, uint256 railId) public { From 145631302f7ab84c97aae391963a8374cdd10fd2 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 15:16:22 -0500 Subject: [PATCH 12/18] eliminate different block variance --- tools/profile.sh | 6 +++--- tools/retry_profile.sh | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) mode change 100644 => 100755 tools/profile.sh create mode 100755 tools/retry_profile.sh diff --git a/tools/profile.sh b/tools/profile.sh old mode 100644 new mode 100755 index 7a0b3d82..9caa6e3d --- a/tools/profile.sh +++ b/tools/profile.sh @@ -11,18 +11,18 @@ TOKEN_ADDRESS=0xe9ae74e0c182aab11bddb483227cc1f6600b3625 RAIL_ADDRESS=0xf6990c51dc94b36c5d5184bf60107efe99dde592 forge script -vvv -g 44000 --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 retrying && exit 1) ../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/createRail-latest.json | tee .gas-profile sleep 5 forge script -vvv -g 44000 --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 retrying && exit 1) ../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/settleRail-latest.json | tee -a .gas-profile sleep 5 forge script -vvv -g 44000 --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 retrying && exit 1) ../forge-script-gas-report/forge_script_gas_report ./broadcast/Profile.s.sol/$CHAIN_ID/terminateRail-latest.json | tee -a .gas-profile diff --git a/tools/retry_profile.sh b/tools/retry_profile.sh new file mode 100755 index 00000000..b1899fd2 --- /dev/null +++ b/tools/retry_profile.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# retry tools/profile.sh until it succeeds + + +until ./tools/profile.sh ; do {} ; done From 6fff7edd761d4b4b1814d3d412450b9d706df9a1 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 15:21:19 -0500 Subject: [PATCH 13/18] seems deterministic now --- .gas-profile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gas-profile b/.gas-profile index 548ea904..336690c9 100644 --- a/.gas-profile +++ b/.gas-profile @@ -11,5 +11,5 @@ modifyRailPayment: 23862826 settleRail: 17961981 withdraw: 21977789 withdrawTo: 22062638 -settleRail: 27102987 +settleRail: 27104287 terminateRail: 19583955 From 50c26916551e7ab37f800ee4b22aa5f91600db78 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 8 Aug 2025 15:44:21 -0500 Subject: [PATCH 14/18] better log in the nondeterministic case --- tools/profile.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/profile.sh b/tools/profile.sh index 9caa6e3d..1a60cfb9 100755 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -11,18 +11,18 @@ TOKEN_ADDRESS=0xe9ae74e0c182aab11bddb483227cc1f6600b3625 RAIL_ADDRESS=0xf6990c51dc94b36c5d5184bf60107efe99dde592 forge script -vvv -g 44000 --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 retrying && exit 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/createRail-latest.json | tee .gas-profile sleep 5 forge script -vvv -g 44000 --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 retrying && exit 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 sleep 5 forge script -vvv -g 44000 --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 retrying && exit 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 From e5983e3e6028f127773c057b5cd3c594c3e95377 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Wed, 20 Aug 2025 19:42:28 -0500 Subject: [PATCH 15/18] update .gas-profile --- .gas-profile | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.gas-profile b/.gas-profile index 336690c9..66139ad2 100644 --- a/.gas-profile +++ b/.gas-profile @@ -1,15 +1,15 @@ -new MockERC20: 30138346 -new Payments: 92082344 -setOperatorApproval: 10405259 -createRail: 14763367 -mint: 7205888 -approve: 5403823 -deposit: 23613974 -modifyRailPayment: 18611939 -modifyRailLockup: 20489814 -modifyRailPayment: 23862826 -settleRail: 17961981 -withdraw: 21977789 -withdrawTo: 22062638 -settleRail: 27104287 -terminateRail: 19583955 +new MockERC20: 30167032 +new Payments: 91741152 +setOperatorApproval: 10381233 +createRail: 14797002 +mint: 7228328 +approve: 5415547 +deposit: 23650966 +modifyRailPayment: 18633927 +modifyRailLockup: 20504445 +modifyRailPayment: 23897583 +settleRail: 18003516 +withdraw: 22007020 +withdrawTo: 22093283 +settleRail: 21465656 +terminateRail: 19595369 From e6bca49d44c808357fc0779b0be8092fb8d794ba Mon Sep 17 00:00:00 2001 From: William Morriss Date: Wed, 20 Aug 2025 19:42:54 -0500 Subject: [PATCH 16/18] after https://github.com/filecoin-project/lotus/pull/13275, do not need to sleep --- tools/profile.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tools/profile.sh b/tools/profile.sh index 1a60cfb9..990098cf 100755 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -14,15 +14,10 @@ forge script -vvv -g 44000 --broadcast --chain-id $CHAIN_ID --sender $SENDER_ADD [[ "$(../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 -sleep 5 - - forge script -vvv -g 44000 --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 -sleep 5 - forge script -vvv -g 44000 --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 From 643024b03c5e8c52395f0c06e08e5c5477e76a44 Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 5 Sep 2025 15:08:09 -0500 Subject: [PATCH 17/18] update .gas-profile --- .gas-profile | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.gas-profile b/.gas-profile index 66139ad2..97736464 100644 --- a/.gas-profile +++ b/.gas-profile @@ -1,15 +1,15 @@ new MockERC20: 30167032 -new Payments: 91741152 -setOperatorApproval: 10381233 -createRail: 14797002 +new Payments: 91617663 +setOperatorApproval: 10379999 +createRail: 14795768 mint: 7228328 approve: 5415547 -deposit: 23650966 -modifyRailPayment: 18633927 -modifyRailLockup: 20504445 -modifyRailPayment: 23897583 -settleRail: 18003516 -withdraw: 22007020 -withdrawTo: 22093283 -settleRail: 21465656 -terminateRail: 19595369 +deposit: 23649731 +modifyRailPayment: 18632692 +modifyRailLockup: 20503211 +modifyRailPayment: 23896348 +settleRail: 18002282 +withdraw: 22005786 +withdrawTo: 22092049 +settleRail: 21463122 +terminateRail: 19592834 From d19498886ef352c0230946e6befaa3641247662e Mon Sep 17 00:00:00 2001 From: William Morriss Date: Fri, 26 Sep 2025 19:04:13 -0500 Subject: [PATCH 18/18] update .gas-profile (now non-deterministic) --- .gas-profile | 31 ++++++++++++++++--------------- tools/Profile.s.sol | 29 ++++++++++++++++++++++------- tools/profile.sh | 10 +++++++--- 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/.gas-profile b/.gas-profile index 97736464..9cc7bdee 100644 --- a/.gas-profile +++ b/.gas-profile @@ -1,15 +1,16 @@ -new MockERC20: 30167032 -new Payments: 91617663 -setOperatorApproval: 10379999 -createRail: 14795768 -mint: 7228328 -approve: 5415547 -deposit: 23649731 -modifyRailPayment: 18632692 -modifyRailLockup: 20503211 -modifyRailPayment: 23896348 -settleRail: 18002282 -withdraw: 22005786 -withdrawTo: 22092049 -settleRail: 21463122 -terminateRail: 19592834 +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 diff --git a/tools/Profile.s.sol b/tools/Profile.s.sol index 617bbbdc..8b8b81d7 100644 --- a/tools/Profile.s.sol +++ b/tools/Profile.s.sol @@ -27,14 +27,14 @@ contract Profile is Script { uint256 lockupAllowance = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; uint256 maxLockupPeriod = 0x00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; - payments.setOperatorApproval(address(token), operator, true, rateAllowance, lockupAllowance, maxLockupPeriod); + payments.setOperatorApproval(token, operator, true, rateAllowance, lockupAllowance, maxLockupPeriod); - uint256 railId = payments.createRail(address(token), from, to, validator, commissionRateBps, serviceFeeRecipient); + 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(address(token), from, amount); + payments.deposit(token, from, amount); // TODO depositWithPermit // TODO depositWithPermitAndApproveOperator @@ -48,18 +48,18 @@ contract Profile is Script { payments.modifyRailPayment(railId, 10**3, 10**6); - payments.settleRail{value:payments.NETWORK_FEE()}(railId, block.number); + payments.settleRail(railId, block.number); - payments.withdraw(address(token), 10**6); + payments.withdraw(token, 10**6); - payments.withdrawTo(address(token), to, 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{value:payments.NETWORK_FEE()}(railId, block.number); + payments.settleRail(railId, block.number); } function terminateRail(address sender, Payments payments, uint256 railId) public { @@ -70,4 +70,19 @@ contract Profile is Script { // 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); + } } diff --git a/tools/profile.sh b/tools/profile.sh index 990098cf..8f04c012 100755 --- a/tools/profile.sh +++ b/tools/profile.sh @@ -10,14 +10,18 @@ popd TOKEN_ADDRESS=0xe9ae74e0c182aab11bddb483227cc1f6600b3625 RAIL_ADDRESS=0xf6990c51dc94b36c5d5184bf60107efe99dde592 -forge script -vvv -g 44000 --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 -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 44000 --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 -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 44000 --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 -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