load_account_info_members.sol 1.5 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // RUN: --target solana --emit cfg
  2. import 'solana';
  3. contract MyTest {
  4. // BEGIN-CHECK: MyTest::MyTest::function::test_this__uint32_address
  5. function test_this(uint32 i, address addr) public view returns (uint32) {
  6. AccountInfo info = tx.accounts[i];
  7. if (info.key == addr) {
  8. // CHECK: branchcond ((load (load (struct %info field 0))) == (arg #1)), block3, block4
  9. return 0;
  10. } else if (info.lamports == 90) {
  11. // CHECK: branchcond ((load (load (struct %info field 1))) == uint64 90), block6, block7
  12. return 1;
  13. } else if (info.data.length == 5) {
  14. // CHECK: branchcond ((builtin ArrayLength ((load (struct %info field 2)))) == uint32 5), block9, block10
  15. return info.data.readUint32LE(4);
  16. } else if (info.owner == addr) {
  17. // CHECK: ((load (load (struct %info field 3))) == (arg #1)), block14, block15
  18. return 3;
  19. } else if (info.rent_epoch == 45) {
  20. // CHECK: branchcond ((load (struct %info field 4)) == uint64 45), block17, block18
  21. return 4;
  22. } else if (info.is_signer) {
  23. // CHECK: branchcond (load (struct %info field 5)), block20, block21
  24. return 5;
  25. } else if (info.is_writable) {
  26. // CHECK: branchcond (load (struct %info field 6)), block23, block24
  27. return 6;
  28. } else if (info.executable) {
  29. // CHECK: branchcond (load (struct %info field 7)), block26, block27
  30. return 7;
  31. }
  32. }
  33. }