status-go has a number of customisations for go-ethereum and many of them are usually not obvious. Nor what status-react is present in human-readable form.
This page serves as a place with a collection of random facts about how status-react uses status-go. This should be revised and structured and currently just a quick start.
The source:
Consumer->Go Bindings: Call
Go Bindings->statusAPI: JailCall
statusAPI->Jail: Call
Jail->JailCell: Call
note right of JailCell: cell.Lock()
JailCell->Otto: Call
Otto->+web3: eth_whateverWithoutCallback
web3->jail: Send
note left of jail: cell.Unlock()
note over jail: RPC calls and VM interactions
note left of jail: cell.Lock()
web3-->-Otto: result
note right of JailCell: cell.Unlock()
Consumer->Go Bindings: Call
Go Bindings->statusAPI: JailCall
statusAPI->Jail: Call
Jail->JailCell: Call
note right of JailCell: cell.Lock()
JailCell->Otto: Call
Otto->+web3: eth_whateverWithCallback
web3->jail: SendAsync
web3-->-Otto: otto.UndefinedValue()
note right of JailCell: cell.Unlock()
note over jail: RPC calls and VM interactions
When the (async) handler of /send
command is executed, the callback doesn’t return till the transaction queue is committed (confirmed), but immediately we got confirmation from jail about transaction being added (“transaction.queued” event).
Also, some insights can be found in https://github.com/status-im/status-go/wiki/Notes-on-Bindings