Doc - Create an interaction diagram for Cairo-Foundry
Eikix opened this issue · comments
Create a sequence diagram to describe low level and precise interactions that occur during a Cairo-Foundry run.
Good example from Kakarot's repo:
sequenceDiagram
title Simple bytecode execution flow example: [PUSH1 0x01 PUSH1 0x02 ADD]
actor User
participant Kakarot
participant ExecutionContext
participant EVMInstructions
participant ArithmeticOperations
participant PushOperations
participant Stack
User->>+Kakarot: execute(value, code, calldata)
Kakarot->>+EVMInstructions: generate_instructions()
EVMInstructions->>-Kakarot: instructions
Kakarot->>+ExecutionContext: compute_intrinsic_gas_cost()
ExecutionContext->>-Kakarot: ctx
Kakarot->>Kakarot: run(instructions, ctx)
loop opcode
Kakarot->>+EVMInstructions: decode_and_execute(instructions, ctx)
EVMInstructions->>EVMInstructions: retrieve the current program counter
Note over EVMInstructions: revert if pc < 0, stop if pc > length of code
EVMInstructions->>EVMInstructions: read opcode associated function from instruction set
Note over PushOperations, Stack: x2 PUSH a=1, PUSH b=2
EVMInstructions->>+PushOperations: exec_push1(ctx)
PushOperations->>Stack: push(stack, element)
PushOperations->>-EVMInstructions: ctx
EVMInstructions->>+ArithmeticOperations: exec_add(ctx)
Note over PushOperations, Stack: x2 POP a, POP b
ArithmeticOperations->>Stack: pop(stack)
Stack->>ArithmeticOperations: element
ArithmeticOperations->>Stack: push(stack, result)
ArithmeticOperations->>-EVMInstructions: ctx
EVMInstructions->>-Kakarot: ctx
end
Kakarot->>-User: ctx