Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changed data type of account key index to uin32 #3465

Merged
merged 3 commits into from
Jul 16, 2024

Conversation

janezpodhostnik
Copy link
Contributor

@janezpodhostnik janezpodhostnik commented Jul 12, 2024

Work towards onflow/flow-go#6204

Description

Changed data type of account key index to uin32.

There are still a few casts in the code, that I did not know how to get rid of.


  • Targeted PR against master branch
  • Linked to Github issue with discussion and accepted design OR link to spec that describes this work
  • Code follows the standards mentioned here
  • Updated relevant documentation
  • Re-reviewed Files changed in the Github PR explorer
  • Added appropriate labels

@janezpodhostnik janezpodhostnik requested a review from a team July 12, 2024 11:44
@janezpodhostnik janezpodhostnik self-assigned this Jul 12, 2024
Copy link

github-actions bot commented Jul 12, 2024

Cadence Benchstat comparison

This branch with compared with the base branch onflow:master commit cc99e72
The command for i in {1..N}; do go test ./... -run=XXX -bench=. -benchmem -shuffle=on; done was used.
Bench tests were run a total of 7 times on each branch.

Collapsed results for better readability

old.txtnew.txt
time/opdelta
DecodeBatchEventsCCF-4127ms ± 0%126ms ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-4375ms ± 0%373ms ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-42.77µs ± 0%2.78µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.TokensWithdrawn-42.13µs ± 0%2.09µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-42.76µs ± 0%2.77µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-43.08µs ± 0%3.28µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-42.11µs ± 0%2.10µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.RewardsPaid-42.45µs ± 0%2.44µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited-42.54µs ± 0%2.53µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-42.48µs ± 0%2.47µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensMinted-42.10µs ± 0%2.08µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensWithdrawn-42.56µs ± 0%2.57µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.FeesDeducted-410.1µs ± 0%9.3µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-45.37µs ± 0%5.33µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-48.45µs ± 0%8.40µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-411.6µs ± 0%11.5µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-45.46µs ± 0%5.45µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-47.11µs ± 0%7.10µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-47.40µs ± 0%7.42µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-46.80µs ± 0%6.67µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-45.43µs ± 0%5.40µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensWithdrawn-47.35µs ± 0%7.42µs ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-487.8ms ± 0%84.4ms ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-4101ms ± 0%102ms ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-41.85µs ± 0%1.88µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.TokensWithdrawn-41.49µs ± 0%1.51µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.80µs ± 0%1.81µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-42.09µs ± 0%2.15µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.52µs ± 0%1.52µs ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-41.68µs ± 0%1.66µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited-41.69µs ± 0%1.69µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.66µs ± 0%1.68µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensMinted-41.49µs ± 0%1.49µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensWithdrawn-41.70µs ± 0%1.71µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.FeesDeducted-42.36µs ± 0%2.36µs ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-41.37µs ± 0%1.37µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-42.13µs ± 0%2.15µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-42.93µs ± 0%2.99µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-41.41µs ± 0%1.43µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.RewardsPaid-41.79µs ± 0%1.81µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited-42.04µs ± 0%2.08µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-41.62µs ± 0%1.64µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensMinted-41.39µs ± 0%1.41µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensWithdrawn-42.04µs ± 0%2.10µs ± 0%~(p=1.000 n=1+1)
ExportType/composite_type-4251ns ± 0%254ns ± 0%~(p=1.000 n=1+1)
ExportType/simple_type-477.1ns ± 0%77.5ns ± 0%~(p=1.000 n=1+1)
InterpretRecursionFib-41.87ms ± 0%1.87ms ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-4872ns ± 0%871ns ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_sub-interpreter-4357ns ± 0%361ns ± 0%~(p=1.000 n=1+1)
ParseArray-46.04ms ± 2%5.90ms ± 1%~(p=0.667 n=2+2)
ParseDeploy/byte_array-48.87ms ± 1%9.12ms ± 1%~(p=0.333 n=2+2)
ParseDeploy/decode_hex-41.00ms ± 1%1.02ms ± 1%~(p=0.667 n=2+2)
ParseFungibleToken/With_memory_metering-4150µs ± 1%147µs ± 2%~(p=0.667 n=2+2)
ParseFungibleToken/Without_memory_metering-4121µs ± 6%117µs ± 2%~(p=1.000 n=2+2)
ParseInfix-45.17µs ± 1%5.42µs ± 3%~(p=0.333 n=2+2)
QualifiedIdentifierCreation/One_level-41.89ns ± 0%1.88ns ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/Three_levels-481.0ns ± 0%80.0ns ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-43.80µs ± 0%3.66µs ± 0%~(p=1.000 n=1+1)
SuperTypeInference/arrays-4221ns ± 0%223ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/composites-493.4ns ± 0%93.3ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/integers-4299ns ± 0%298ns ± 0%~(p=1.000 n=1+1)
ValueIsSubtypeOfSemaType-464.1ns ± 0%64.8ns ± 0%~(p=1.000 n=1+1)
 
alloc/opdelta
DecodeBatchEventsCCF-466.5MB ± 0%66.5MB ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-4242MB ± 0%242MB ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-41.40kB ± 0%1.40kB ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-41.21kB ± 0%1.21kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.48kB ± 0%1.48kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-41.49kB ± 0%1.49kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.26kB ± 0%1.26kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-41.38kB ± 0%1.38kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-41.32kB ± 0%1.32kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.30kB ± 0%1.30kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-41.21kB ± 0%1.21kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-41.33kB ± 0%1.33kB ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-45.95kB ± 0%5.95kB ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-43.55kB ± 0%3.55kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-45.38kB ± 0%5.38kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-47.30kB ± 0%7.30kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-43.59kB ± 0%3.59kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-44.49kB ± 0%4.49kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-44.83kB ± 0%4.83kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-44.41kB ± 0%4.41kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-43.55kB ± 0%3.55kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-44.83kB ± 0%4.83kB ± 0%~(all equal)
EncodeBatchEventsCCF-463.9MB ± 0%63.9MB ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-440.7MB ± 0%40.7MB ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-41.25kB ± 0%1.25kB ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-41.20kB ± 0%1.20kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.47kB ± 0%1.47kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-41.44kB ± 0%1.44kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.38kB ± 0%1.38kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-41.46kB ± 0%1.46kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-41.25kB ± 0%1.25kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.23kB ± 0%1.23kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-41.20kB ± 0%1.20kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-41.25kB ± 0%1.25kB ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-4896B ± 0%896B ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-4536B ± 0%536B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-4920B ± 0%920B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-41.11kB ± 0%1.11kB ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-4584B ± 0%584B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-4784B ± 0%784B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-4808B ± 0%808B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-4672B ± 0%672B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-4544B ± 0%544B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-4800B ± 0%800B ± 0%~(all equal)
ExportType/composite_type-4120B ± 0%120B ± 0%~(all equal)
ExportType/simple_type-40.00B 0.00B ~(all equal)
InterpretRecursionFib-41.19MB ± 0%1.19MB ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-4944B ± 0%944B ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-4200B ± 0%200B ± 0%~(all equal)
ParseArray-42.69MB ± 0%2.66MB ± 1%~(p=1.000 n=2+2)
ParseDeploy/byte_array-44.14MB ± 2%4.20MB ± 0%~(p=1.000 n=2+2)
ParseDeploy/decode_hex-4214kB ± 0%214kB ± 0%~(p=1.000 n=2+2)
ParseFungibleToken/With_memory_metering-429.8kB ± 0%29.8kB ± 0%~(p=0.667 n=2+2)
ParseFungibleToken/Without_memory_metering-429.8kB ± 0%29.8kB ± 0%~(p=0.667 n=2+2)
ParseInfix-41.92kB ± 0%1.92kB ± 0%~(p=0.333 n=2+2)
QualifiedIdentifierCreation/One_level-40.00B 0.00B ~(all equal)
QualifiedIdentifierCreation/Three_levels-464.0B ± 0%64.0B ± 0%~(all equal)
RuntimeScriptNoop-43.36kB ± 0%3.36kB ± 0%~(all equal)
SuperTypeInference/arrays-496.0B ± 0%96.0B ± 0%~(all equal)
SuperTypeInference/composites-40.00B 0.00B ~(all equal)
SuperTypeInference/integers-40.00B 0.00B ~(all equal)
ValueIsSubtypeOfSemaType-448.0B ± 0%48.0B ± 0%~(all equal)
 
allocs/opdelta
DecodeBatchEventsCCF-41.48M ± 0%1.48M ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-44.60M ± 0%4.60M ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-430.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-426.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-430.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-432.0 ± 0%32.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-426.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-429.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-431.0 ± 0%31.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-429.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-426.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-431.0 ± 0%31.0 ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-4124 ± 0%124 ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-469.0 ± 0%69.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-4100 ± 0%100 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-4157 ± 0%157 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-468.0 ± 0%68.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-485.0 ± 0%85.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-493.0 ± 0%93.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-484.0 ± 0%84.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-469.0 ± 0%69.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-493.0 ± 0%93.0 ± 0%~(all equal)
EncodeBatchEventsCCF-41.00M ± 0%1.00M ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-4902k ± 0%902k ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-421.0 ± 0%21.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-421.0 ± 0%21.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-421.0 ± 0%21.0 ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-413.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-417.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-426.0 ± 0%26.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-413.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-416.0 ± 0%16.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-415.0 ± 0%15.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-414.0 ± 0%14.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-419.0 ± 0%19.0 ± 0%~(all equal)
ExportType/composite_type-43.00 ± 0%3.00 ± 0%~(all equal)
ExportType/simple_type-40.00 0.00 ~(all equal)
InterpretRecursionFib-418.9k ± 0%18.9k ± 0%~(all equal)
NewInterpreter/new_interpreter-415.0 ± 0%15.0 ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-44.00 ± 0%4.00 ± 0%~(all equal)
ParseArray-459.6k ± 0%59.6k ± 0%~(p=1.000 n=2+2)
ParseDeploy/byte_array-489.4k ± 0%89.4k ± 0%~(p=0.667 n=2+2)
ParseDeploy/decode_hex-463.0 ± 0%63.0 ± 0%~(all equal)
ParseFungibleToken/With_memory_metering-4773 ± 1%773 ± 1%~(p=1.000 n=2+2)
ParseFungibleToken/Without_memory_metering-4773 ± 1%773 ± 1%~(p=1.000 n=2+2)
ParseInfix-448.0 ± 0%48.0 ± 0%~(all equal)
QualifiedIdentifierCreation/One_level-40.00 0.00 ~(all equal)
QualifiedIdentifierCreation/Three_levels-42.00 ± 0%2.00 ± 0%~(all equal)
RuntimeScriptNoop-450.0 ± 0%50.0 ± 0%~(all equal)
SuperTypeInference/arrays-43.00 ± 0%3.00 ± 0%~(all equal)
SuperTypeInference/composites-40.00 0.00 ~(all equal)
SuperTypeInference/integers-40.00 0.00 ~(all equal)
ValueIsSubtypeOfSemaType-41.00 ± 0%1.00 ± 0%~(all equal)
 

runtime/stdlib/account.go Outdated Show resolved Hide resolved
runtime/stdlib/account.go Outdated Show resolved Hide resolved
@janezpodhostnik janezpodhostnik marked this pull request as ready for review July 15, 2024 17:48
@turbolent
Copy link
Member

I had a look at the referenced issue and it sort of makes sense in flow-go. However, do we want to enforce limits of Flow in Cadence? It would be nice to keep Cadence agnostic of particular chain-limits. Even without the proposed changes, it should be possible to check/reject invalid indices.

@janezpodhostnik
Copy link
Contributor Author

It would be nice to keep Cadence agnostic of particular chain-limits

does this mean you would prefer cadence still having a uint64 for the key index? Uint64 seems like a big data type for key indexes.

@turbolent
Copy link
Member

turbolent commented Jul 15, 2024

Maybe it's good to discuss this a bit more synchronously, maybe as part of the next implementation sync? https://www.notion.so/flowfoundation/Cadence-Implementation-Sync-Notes-Agenda-cf6890eb8a9f4692a8c08611856a5af5?pvs=4#e78f967d7c814ea8b0178e83d39b2e4b. Can have it earlier, don't need to wait for a week. Can also have a separate sync about it

does this mean you would prefer cadence still having a uint64 for the key index? Uint64 seems like a big data type for key indexes.

On one end we have the key management APIs and types (e.g. AccountKey) in Cadence, which use Cadence Int, which is arbitrary-sized. On the other end we have Flow/flow-go.

The question is where we define limits and how we enforce them. For example, if we enforce flow-go's (new?) limit to max uint32 keys, then we might want to enforce this "all the way", even in the Cadence APIs. It seems odd that the Cadence API uses Int, but the interface to the embedder uint32, it might be good to keep those consistent. Even the current type int doesn't quite match the semantics of the Cadence API.

properly convert Cadence Int to Go uint32 by checking range, do not truncate
@turbolent
Copy link
Member

turbolent commented Jul 16, 2024

@janezpodhostnik As discussed, I fixed the Cadence Int to Go uint32 conversion in 63abfd5, and added some tests for calls of add and revoke with invalid indices (negative, >max uint32)

@SupunS PTAL 🙏

@turbolent turbolent merged commit 3610da6 into master Jul 16, 2024
10 of 12 checks passed
@turbolent turbolent deleted the janez/change-account-key-index-to-uint32 branch July 16, 2024 19:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants