plutus icon indicating copy to clipboard operation
plutus copied to clipboard

SCP-3409: Change Flat Index from Natural to Word64 encode/decode

Open bezirg opened this issue 2 years ago • 10 comments

In the debruijn branch we are transitioning the debruijn index to be a Word instead of Natural, for CEK performance reasons.

This means the types of Script,Program,Term change and so does the flat "interface".

This module tests that although the interface/types change, the underlying flat encoding/decoding remains the same, so there is no need to issue a new plutus language version increase.

Pre-submit checklist:

  • Branch
    • [x] Tests are provided (if possible)
    • [x] Commit sequence broadly makes sense
    • [x] Key commits have useful messages
    • [x] Relevant tickets are mentioned in commit messages
    • [x] Formatting, materialized Nix files, PNG optimization, etc. are updated
  • PR
    • [ ] (For external contributions) Corresponding issue exists and is linked in the description
    • [x] Self-reviewed the diff
    • [x] Useful pull request description
    • [x] Reviewer requested

bezirg avatar Feb 02 '22 13:02 bezirg

Please be gentle, it's the first time i am touching hedgehog

bezirg avatar Feb 02 '22 13:02 bezirg

Ah, I just meant you could try this locally yourself to verify it! I guess we can check it in anyway, it can't hurt.

michaelpj avatar Feb 02 '22 14:02 michaelpj

/benchmark plutus-benchmark:validation-decode

bezirg avatar Feb 11 '22 21:02 bezirg

Comparing benchmark results of 'plutus-benchmark:validation-decode' on '8d2a519f8' (base) and '38ebfefed' (PR)

Script 8d2a519 38ebfef Change
auction_1-1 324.3 μs 304.7 μs -6.0%
auction_1-2 1.134 ms 1.069 ms -5.7%
auction_1-3 1.135 ms 1.071 ms -5.6%
auction_1-4 330.5 μs 310.5 μs -6.1%
auction_2-1 324.1 μs 304.3 μs -6.1%
auction_2-2 1.135 ms 1.066 ms -6.1%
auction_2-3 1.146 ms 1.071 ms -6.5%
auction_2-4 1.135 ms 1.065 ms -6.2%
auction_2-5 330.7 μs 309.2 μs -6.5%
crowdfunding-success-1 423.8 μs 393.1 μs -7.2%
crowdfunding-success-2 424.1 μs 392.8 μs -7.4%
crowdfunding-success-3 423.3 μs 393.4 μs -7.1%
currency-1 408.2 μs 380.2 μs -6.9%
escrow-redeem_1-1 609.0 μs 563.4 μs -7.5%
escrow-redeem_1-2 610.5 μs 562.4 μs -7.9%
escrow-redeem_2-1 614.2 μs 566.0 μs -7.8%
escrow-redeem_2-2 613.3 μs 566.3 μs -7.7%
escrow-redeem_2-3 613.3 μs 568.0 μs -7.4%
escrow-refund-1 596.5 μs 553.7 μs -7.2%
future-increase-margin-1 406.3 μs 380.6 μs -6.3%
future-increase-margin-2 625.0 μs 584.0 μs -6.6%
future-increase-margin-3 626.6 μs 583.5 μs -6.9%
future-increase-margin-4 1.449 ms 1.359 ms -6.2%
future-increase-margin-5 1.456 ms 1.364 ms -6.3%
future-pay-out-1 407.7 μs 380.3 μs -6.7%
future-pay-out-2 625.8 μs 581.8 μs -7.0%
future-pay-out-3 628.9 μs 583.7 μs -7.2%
future-pay-out-4 1.462 ms 1.357 ms -7.2%
future-settle-early-1 408.9 μs 379.5 μs -7.2%
future-settle-early-2 628.9 μs 581.1 μs -7.6%
future-settle-early-3 626.9 μs 580.4 μs -7.4%
future-settle-early-4 1.449 ms 1.354 ms -6.6%
game-sm-success_1-1 1.086 ms 1.024 ms -5.7%
game-sm-success_1-2 271.4 μs 256.9 μs -5.3%
game-sm-success_1-3 1.094 ms 1.029 ms -5.9%
game-sm-success_1-4 276.5 μs 260.7 μs -5.7%
game-sm-success_2-1 1.089 ms 1.025 ms -5.9%
game-sm-success_2-2 272.3 μs 257.7 μs -5.4%
game-sm-success_2-3 1.090 ms 1.027 ms -5.8%
game-sm-success_2-4 275.9 μs 260.8 μs -5.5%
game-sm-success_2-5 1.094 ms 1.033 ms -5.6%
game-sm-success_2-6 277.0 μs 261.5 μs -5.6%
multisig-sm-1 1.222 ms 1.157 ms -5.3%
multisig-sm-2 1.220 ms 1.153 ms -5.5%
multisig-sm-3 1.224 ms 1.156 ms -5.6%
multisig-sm-4 1.226 ms 1.154 ms -5.9%
multisig-sm-5 1.225 ms 1.151 ms -6.0%
multisig-sm-6 1.220 ms 1.149 ms -5.8%
multisig-sm-7 1.221 ms 1.151 ms -5.7%
multisig-sm-8 1.219 ms 1.150 ms -5.7%
multisig-sm-9 1.223 ms 1.151 ms -5.9%
multisig-sm-10 1.223 ms 1.149 ms -6.1%
ping-pong-1 1.006 ms 937.9 μs -6.8%
ping-pong-2 1.004 ms 940.9 μs -6.3%
ping-pong_2-1 1.001 ms 930.4 μs -7.1%
prism-1 260.2 μs 244.4 μs -6.1%
prism-2 1.078 ms 1.010 ms -6.3%
prism-3 423.1 μs 394.6 μs -6.7%
pubkey-1 266.6 μs 252.0 μs -5.5%
stablecoin_1-1 1.767 ms 1.697 ms -4.0%
stablecoin_1-2 274.1 μs 260.2 μs -5.1%
stablecoin_1-3 1.779 ms 1.702 ms -4.3%
stablecoin_1-4 274.2 μs 260.8 μs -4.9%
stablecoin_1-5 1.792 ms 1.697 ms -5.3%
stablecoin_1-6 280.4 μs 266.1 μs -5.1%
stablecoin_2-1 1.775 ms 1.691 ms -4.7%
stablecoin_2-2 275.5 μs 258.9 μs -6.0%
stablecoin_2-3 1.775 ms 1.690 ms -4.8%
stablecoin_2-4 275.8 μs 259.9 μs -5.8%
token-account-1 404.0 μs 376.9 μs -6.7%
token-account-2 374.1 μs 349.8 μs -6.5%
uniswap-1 414.4 μs 384.7 μs -7.2%
uniswap-2 407.9 μs 380.5 μs -6.7%
uniswap-3 1.530 ms 1.443 ms -5.7%
uniswap-4 314.6 μs 297.9 μs -5.3%
uniswap-5 1.526 ms 1.444 ms -5.4%
uniswap-6 292.6 μs 295.8 μs +1.1%
vesting-1 623.3 μs 578.9 μs -7.1%

iohk-devops avatar Feb 11 '22 22:02 iohk-devops

/benchmark plutus-benchmark:validation-decode

bezirg avatar Feb 16 '22 20:02 bezirg

Comparing benchmark results of 'plutus-benchmark:validation-decode' on '0179ffab9' (base) and '4dc4088e7' (PR)

Script 0179ffa 4dc4088 Change
auction_1-1 325.5 μs 311.0 μs -4.5%
auction_1-2 1.141 ms 1.080 ms -5.3%
auction_1-3 1.141 ms 1.083 ms -5.1%
auction_1-4 330.7 μs 315.9 μs -4.5%
auction_2-1 324.0 μs 310.1 μs -4.3%
auction_2-2 1.134 ms 1.079 ms -4.9%
auction_2-3 1.148 ms 1.084 ms -5.6%
auction_2-4 1.139 ms 1.077 ms -5.4%
auction_2-5 331.7 μs 314.3 μs -5.2%
crowdfunding-success-1 422.3 μs 400.1 μs -5.3%
crowdfunding-success-2 423.3 μs 399.2 μs -5.7%
crowdfunding-success-3 424.7 μs 399.5 μs -5.9%
currency-1 410.2 μs 385.5 μs -6.0%
escrow-redeem_1-1 610.3 μs 569.7 μs -6.7%
escrow-redeem_1-2 608.9 μs 569.4 μs -6.5%
escrow-redeem_2-1 616.1 μs 576.5 μs -6.4%
escrow-redeem_2-2 615.1 μs 576.9 μs -6.2%
escrow-redeem_2-3 615.2 μs 575.1 μs -6.5%
escrow-refund-1 598.5 μs 561.5 μs -6.2%
future-increase-margin-1 408.6 μs 386.1 μs -5.5%
future-increase-margin-2 627.2 μs 586.9 μs -6.4%
future-increase-margin-3 625.5 μs 585.8 μs -6.3%
future-increase-margin-4 1.450 ms 1.367 ms -5.7%
future-increase-margin-5 1.458 ms 1.366 ms -6.3%
future-pay-out-1 407.3 μs 386.0 μs -5.2%
future-pay-out-2 626.0 μs 588.6 μs -6.0%
future-pay-out-3 627.6 μs 587.3 μs -6.4%
future-pay-out-4 1.463 ms 1.373 ms -6.2%
future-settle-early-1 410.1 μs 385.4 μs -6.0%
future-settle-early-2 628.9 μs 586.6 μs -6.7%
future-settle-early-3 629.6 μs 587.9 μs -6.6%
future-settle-early-4 1.450 ms 1.369 ms -5.6%
game-sm-success_1-1 1.089 ms 1.038 ms -4.7%
game-sm-success_1-2 272.3 μs 262.5 μs -3.6%
game-sm-success_1-3 1.095 ms 1.047 ms -4.4%
game-sm-success_1-4 276.7 μs 266.3 μs -3.8%
game-sm-success_2-1 1.090 ms 1.039 ms -4.7%
game-sm-success_2-2 273.5 μs 261.8 μs -4.3%
game-sm-success_2-3 1.091 ms 1.042 ms -4.5%
game-sm-success_2-4 276.5 μs 265.0 μs -4.2%
game-sm-success_2-5 1.094 ms 1.043 ms -4.7%
game-sm-success_2-6 277.2 μs 265.5 μs -4.2%
multisig-sm-1 1.220 ms 1.164 ms -4.6%
multisig-sm-2 1.226 ms 1.163 ms -5.1%
multisig-sm-3 1.225 ms 1.162 ms -5.1%
multisig-sm-4 1.224 ms 1.162 ms -5.1%
multisig-sm-5 1.223 ms 1.164 ms -4.8%
multisig-sm-6 1.223 ms 1.160 ms -5.2%
multisig-sm-7 1.221 ms 1.164 ms -4.7%
multisig-sm-8 1.223 ms 1.163 ms -4.9%
multisig-sm-9 1.223 ms 1.166 ms -4.7%
multisig-sm-10 1.221 ms 1.164 ms -4.7%
ping-pong-1 1.006 ms 949.0 μs -5.7%
ping-pong-2 1.008 ms 951.1 μs -5.6%
ping-pong_2-1 1.003 ms 965.4 μs -3.7%
prism-1 260.4 μs 248.1 μs -4.7%
prism-2 1.078 ms 1.022 ms -5.2%
prism-3 424.3 μs 401.6 μs -5.3%
pubkey-1 267.1 μs 257.8 μs -3.5%
stablecoin_1-1 1.771 ms 1.718 ms -3.0%
stablecoin_1-2 274.8 μs 265.1 μs -3.5%
stablecoin_1-3 1.777 ms 1.723 ms -3.0%
stablecoin_1-4 275.7 μs 265.4 μs -3.7%
stablecoin_1-5 1.794 ms 1.719 ms -4.2%
stablecoin_1-6 280.0 μs 269.9 μs -3.6%
stablecoin_2-1 1.782 ms 1.711 ms -4.0%
stablecoin_2-2 275.6 μs 263.7 μs -4.3%
stablecoin_2-3 1.773 ms 1.711 ms -3.5%
stablecoin_2-4 276.0 μs 263.3 μs -4.6%
token-account-1 404.6 μs 382.2 μs -5.5%
token-account-2 373.2 μs 353.7 μs -5.2%
uniswap-1 414.3 μs 391.0 μs -5.6%
uniswap-2 409.3 μs 386.2 μs -5.6%
uniswap-3 1.533 ms 1.457 ms -5.0%
uniswap-4 313.7 μs 302.4 μs -3.6%
uniswap-5 1.534 ms 1.451 ms -5.4%
uniswap-6 293.2 μs 298.1 μs +1.7%
vesting-1 624.6 μs 583.3 μs -6.6%

iohk-devops avatar Feb 16 '22 21:02 iohk-devops

/benchmark plutus-benchmark:validation-decode

bezirg avatar Feb 23 '22 14:02 bezirg

Comparing benchmark results of 'plutus-benchmark:validation-decode' on 'ead3960ad' (base) and 'a5edb3f4f' (PR)

Script ead3960 a5edb3f Change
auction_1-1 246.5 μs 228.7 μs -7.2%
auction_1-2 884.0 μs 805.6 μs -8.9%
auction_1-3 883.6 μs 811.3 μs -8.2%
auction_1-4 250.3 μs 233.0 μs -6.9%
auction_2-1 245.4 μs 228.8 μs -6.8%
auction_2-2 883.8 μs 811.6 μs -8.2%
auction_2-3 890.8 μs 824.1 μs -7.5%
auction_2-4 885.1 μs 814.5 μs -8.0%
auction_2-5 250.5 μs 233.6 μs -6.7%
crowdfunding-success-1 321.7 μs 294.6 μs -8.4%
crowdfunding-success-2 322.2 μs 295.0 μs -8.4%
crowdfunding-success-3 322.2 μs 294.9 μs -8.5%
currency-1 308.6 μs 283.6 μs -8.1%
escrow-redeem_1-1 463.0 μs 423.1 μs -8.6%
escrow-redeem_1-2 464.7 μs 422.9 μs -9.0%
escrow-redeem_2-1 469.6 μs 427.2 μs -9.0%
escrow-redeem_2-2 469.3 μs 427.8 μs -8.8%
escrow-redeem_2-3 467.7 μs 428.1 μs -8.5%
escrow-refund-1 457.7 μs 416.5 μs -9.0%
future-increase-margin-1 310.5 μs 283.6 μs -8.7%
future-increase-margin-2 479.9 μs 439.9 μs -8.3%
future-increase-margin-3 479.7 μs 440.5 μs -8.2%
future-increase-margin-4 1.121 ms 1.043 ms -7.0%
future-increase-margin-5 1.134 ms 1.050 ms -7.4%
future-pay-out-1 309.0 μs 284.2 μs -8.0%
future-pay-out-2 478.9 μs 440.0 μs -8.1%
future-pay-out-3 479.4 μs 440.1 μs -8.2%
future-pay-out-4 1.134 ms 1.047 ms -7.7%
future-settle-early-1 308.5 μs 284.6 μs -7.7%
future-settle-early-2 479.5 μs 439.8 μs -8.3%
future-settle-early-3 479.7 μs 439.7 μs -8.3%
future-settle-early-4 1.119 ms 1.038 ms -7.2%
game-sm-success_1-1 842.4 μs 780.8 μs -7.3%
game-sm-success_1-2 206.4 μs 191.9 μs -7.0%
game-sm-success_1-3 852.5 μs 785.5 μs -7.9%
game-sm-success_1-4 208.5 μs 195.2 μs -6.4%
game-sm-success_2-1 844.9 μs 783.5 μs -7.3%
game-sm-success_2-2 206.9 μs 192.5 μs -7.0%
game-sm-success_2-3 856.6 μs 782.7 μs -8.6%
game-sm-success_2-4 209.5 μs 194.8 μs -7.0%
game-sm-success_2-5 853.3 μs 784.9 μs -8.0%
game-sm-success_2-6 209.2 μs 195.5 μs -6.5%
multisig-sm-1 949.7 μs 878.2 μs -7.5%
multisig-sm-2 949.3 μs 876.1 μs -7.7%
multisig-sm-3 951.2 μs 873.4 μs -8.2%
multisig-sm-4 950.1 μs 870.3 μs -8.4%
multisig-sm-5 948.9 μs 872.4 μs -8.1%
multisig-sm-6 948.2 μs 876.2 μs -7.6%
multisig-sm-7 946.6 μs 870.6 μs -8.0%
multisig-sm-8 951.6 μs 871.5 μs -8.4%
multisig-sm-9 951.2 μs 863.6 μs -9.2%
multisig-sm-10 950.9 μs 867.9 μs -8.7%
ping-pong-1 773.6 μs 708.9 μs -8.4%
ping-pong-2 770.1 μs 708.5 μs -8.0%
ping-pong_2-1 777.9 μs 705.7 μs -9.3%
prism-1 195.0 μs 181.1 μs -7.1%
prism-2 838.3 μs 766.7 μs -8.5%
prism-3 321.7 μs 296.3 μs -7.9%
pubkey-1 201.8 μs 188.1 μs -6.8%
stablecoin_1-1 1.433 ms 1.331 ms -7.1%
stablecoin_1-2 206.7 μs 192.8 μs -6.7%
stablecoin_1-3 1.434 ms 1.336 ms -6.8%
stablecoin_1-4 207.4 μs 194.2 μs -6.4%
stablecoin_1-5 1.461 ms 1.341 ms -8.2%
stablecoin_1-6 214.2 μs 199.4 μs -6.9%
stablecoin_2-1 1.445 ms 1.333 ms -7.8%
stablecoin_2-2 207.8 μs 193.3 μs -7.0%
stablecoin_2-3 1.437 ms 1.334 ms -7.2%
stablecoin_2-4 207.9 μs 193.7 μs -6.8%
token-account-1 308.1 μs 281.1 μs -8.8%
token-account-2 282.5 μs 260.8 μs -7.7%
uniswap-1 314.3 μs 294.4 μs -6.3%
uniswap-2 311.6 μs 287.2 μs -7.8%
uniswap-3 1.184 ms 1.118 ms -5.6%
uniswap-4 239.0 μs 224.2 μs -6.2%
uniswap-5 1.178 ms 1.132 ms -3.9%
uniswap-6 236.7 μs 222.0 μs -6.2%
vesting-1 474.0 μs 433.4 μs -8.6%

iohk-devops avatar Feb 23 '22 15:02 iohk-devops

/benchmark plutus-benchmark:validation-decode

bezirg avatar Mar 15 '22 13:03 bezirg

Comparing benchmark results of 'plutus-benchmark:validation-decode' on '57cebe002' (base) and 'cb90f4d72' (PR)

Script 57cebe0 cb90f4d Change
auction_1-1 231.0 μs 209.9 μs -9.1%
auction_1-2 881.0 μs 808.5 μs -8.2%
auction_1-3 879.9 μs 809.1 μs -8.0%
auction_1-4 231.3 μs 210.6 μs -8.9%
auction_2-1 230.7 μs 210.6 μs -8.7%
auction_2-2 878.0 μs 806.7 μs -8.1%
auction_2-3 881.8 μs 807.2 μs -8.5%
auction_2-4 881.7 μs 810.9 μs -8.0%
auction_2-5 231.8 μs 211.1 μs -8.9%
crowdfunding-success-1 306.8 μs 278.0 μs -9.4%
crowdfunding-success-2 305.5 μs 278.0 μs -9.0%
crowdfunding-success-3 305.1 μs 277.7 μs -9.0%
currency-1 301.0 μs 273.4 μs -9.2%
escrow-redeem_1-1 453.8 μs 409.2 μs -9.8%
escrow-redeem_1-2 454.7 μs 408.9 μs -10.1%
escrow-redeem_2-1 453.7 μs 408.5 μs -10.0%
escrow-redeem_2-2 452.8 μs 406.8 μs -10.2%
escrow-redeem_2-3 452.7 μs 408.2 μs -9.8%
escrow-refund-1 453.5 μs 407.3 μs -10.2%
future-increase-margin-1 299.5 μs 272.0 μs -9.2%
future-increase-margin-2 455.3 μs 406.9 μs -10.6%
future-increase-margin-3 455.9 μs 407.3 μs -10.7%
future-increase-margin-4 1.146 ms 1.067 ms -6.9%
future-increase-margin-5 1.147 ms 1.070 ms -6.7%
future-pay-out-1 299.8 μs 271.7 μs -9.4%
future-pay-out-2 457.0 μs 407.8 μs -10.8%
future-pay-out-3 457.6 μs 407.6 μs -10.9%
future-pay-out-4 1.141 ms 1.065 ms -6.7%
future-settle-early-1 299.5 μs 271.6 μs -9.3%
future-settle-early-2 457.2 μs 404.8 μs -11.5%
future-settle-early-3 458.8 μs 404.9 μs -11.7%
future-settle-early-4 1.146 ms 1.066 ms -7.0%
game-sm-success_1-1 851.6 μs 777.6 μs -8.7%
game-sm-success_1-2 189.4 μs 174.8 μs -7.7%
game-sm-success_1-3 852.0 μs 777.1 μs -8.8%
game-sm-success_1-4 189.2 μs 174.4 μs -7.8%
game-sm-success_2-1 847.4 μs 777.5 μs -8.2%
game-sm-success_2-2 188.8 μs 174.4 μs -7.6%
game-sm-success_2-3 847.6 μs 774.7 μs -8.6%
game-sm-success_2-4 188.7 μs 174.3 μs -7.6%
game-sm-success_2-5 850.3 μs 776.6 μs -8.7%
game-sm-success_2-6 188.9 μs 174.9 μs -7.4%
multisig-sm-1 970.2 μs 887.2 μs -8.6%
multisig-sm-2 967.3 μs 887.5 μs -8.2%
multisig-sm-3 967.5 μs 883.5 μs -8.7%
multisig-sm-4 965.6 μs 883.5 μs -8.5%
multisig-sm-5 966.3 μs 882.9 μs -8.6%
multisig-sm-6 968.2 μs 884.3 μs -8.7%
multisig-sm-7 970.4 μs 882.1 μs -9.1%
multisig-sm-8 969.8 μs 881.0 μs -9.2%
multisig-sm-9 967.7 μs 880.4 μs -9.0%
multisig-sm-10 965.4 μs 880.2 μs -8.8%
ping-pong-1 788.6 μs 710.4 μs -9.9%
ping-pong-2 787.6 μs 711.3 μs -9.7%
ping-pong_2-1 786.9 μs 713.3 μs -9.4%
prism-1 182.7 μs 169.9 μs -7.0%
prism-2 838.8 μs 761.8 μs -9.2%
prism-3 302.5 μs 274.2 μs -9.4%
pubkey-1 188.7 μs 176.5 μs -6.5%
stablecoin_1-1 1.477 ms 1.358 ms -8.1%
stablecoin_1-2 188.2 μs 175.2 μs -6.9%
stablecoin_1-3 1.479 ms 1.363 ms -7.8%
stablecoin_1-4 188.1 μs 175.5 μs -6.7%
stablecoin_1-5 1.477 ms 1.367 ms -7.4%
stablecoin_1-6 188.2 μs 175.1 μs -7.0%
stablecoin_2-1 1.477 ms 1.361 ms -7.9%
stablecoin_2-2 188.7 μs 175.3 μs -7.1%
stablecoin_2-3 1.482 ms 1.360 ms -8.2%
stablecoin_2-4 188.8 μs 174.6 μs -7.5%
token-account-1 297.7 μs 270.0 μs -9.3%
token-account-2 265.6 μs 241.6 μs -9.0%
uniswap-1 303.0 μs 273.9 μs -9.6%
uniswap-2 297.0 μs 270.0 μs -9.1%
uniswap-3 1.209 ms 1.115 ms -7.8%
uniswap-4 208.7 μs 191.2 μs -8.4%
uniswap-5 1.214 ms 1.115 ms -8.2%
uniswap-6 209.3 μs 190.6 μs -8.9%
vesting-1 474.5 μs 422.0 μs -11.1%

iohk-devops avatar Mar 15 '22 14:03 iohk-devops

Closed in favour of https://github.com/input-output-hk/plutus/pull/5401

bezirg avatar Jun 27 '23 09:06 bezirg