To keep the greatest flexibility, we start with the following very limited interface and extend it only if necessary for implementing using LazyLedger as a DA layer (certainly in a way that would not limit developers to use other DA layers though):
// TODO define an enum of different non-happy-path cases// that might need to be handled by Optimint independent of// the underlying DA chain.typeStatusCodeuint64typeResultSubmitBlockstruct {
// Code is to determine if the action succeeded.CodeStatusCode// Not sure if this needs to be bubbled up to other// parts of Optimint.// Hash hash.Hash
}
typeDataAvailabilityLayerClientinterface {
Start() errorStop() error// SubmitBlock submits the passed in block to the DA layer.// This should create a transaction which (potentially)// triggers a state transition in the DA layer.SubmitBlock(block types.Block) ResultSubmitBlock
}
To keep the greatest flexibility, we start with the following very limited interface and extend it only if necessary for implementing using LazyLedger as a DA layer (certainly in a way that would not limit developers to use other DA layers though):