base_contract_function_call.sol 872 B

1234567891011121314151617181920212223242526272829
  1. contract b is a {
  2. function baz() public pure returns (uint64) {
  3. return foo();
  4. }
  5. function foo() internal pure override returns (uint64) {
  6. return 2;
  7. }
  8. }
  9. abstract contract a {
  10. function foo() internal virtual returns (uint64) {
  11. return 1;
  12. }
  13. function bar() internal returns (uint64) {
  14. // since foo() is virtual, is a virtual dispatch call
  15. // when foo is called and a is a base contract of b, then foo in contract b will
  16. // be called; foo will return 2.
  17. return foo();
  18. }
  19. function bar2() internal returns (uint64) {
  20. // this explicitly says "call foo of base contract a", and dispatch is not virtual
  21. // however, if the call is written as a.foo{program_id: id_var}(), this represents
  22. // an external call to contract 'a' on Solana.
  23. return a.foo();
  24. }
  25. }