Conversation
| g.executionState.AppendForwardTransaction(txn) | ||
| } | ||
|
|
||
| messages, err := GetMessageQueueContent(g.executionState) |
There was a problem hiding this comment.
Shouldn't we get messages queue from other shards targeting to our shard?
There was a problem hiding this comment.
We should do that by proposer. I suggest to implement step-by-step solution. It's the first step in this directon.
Right now an approach doesn't break existing code. We just copy a message queue content to an existing outbound messages tree. Ideally, we need to drop old approach and then it will be possible to use only queue account state.
| delete queue; | ||
| } | ||
|
|
||
| Message[] private queue; |
There was a problem hiding this comment.
Maybe it is worth to separate this array by shard. So the other shard can fetch only messages addressed to him: getMessages(uint shardId)
There was a problem hiding this comment.
Right now we don't have a special interface to send data to specific shard. Our smart accounts operates with raw calldata and we can extract destination shard only after decoding a message. But we don't have a SSZ decoder in Solidity. So here we have single queue for all messages. In future then we will pass destination shards/address explicitly it will be possible.
There was a problem hiding this comment.
What are the limits on the size of the queue or message size in queue?
There was a problem hiding this comment.
Also how would this compare to another approach such as emitting an event instead?
There was a problem hiding this comment.
What are the limits on the size of the queue or message size in queue?
Right now there is no any limits but we can add them
Also how would this compare to another approach such as emitting an event instead?
I didn't think about emitting events but this looks like an attempt to move all magic out of EVM. Sounds interesting but I'm not sure it's what we expect. Should be discussed. Thanks for idea.
| bytes data; | ||
| address sender; |
There was a problem hiding this comment.
it may be convenient to introduce more fields here (e.g. tokens)
There was a problem hiding this comment.
In the first version I'd just want to check that it will work at all. basic test passed. We can discussed it and extends current implementation.
| if err != nil { | ||
| return fmt.Errorf("failed to create MQ prune transaction: %w", err) | ||
| } | ||
| p.proposal.SpecialTxns = append(p.proposal.SpecialTxns, txn) |
There was a problem hiding this comment.
What happens if the tx fails or if the block containing the tx is not finalized?
There was a problem hiding this comment.
If such TX fail we fail block validation on consensus and then new block in the next round will be suggested.
| delete queue; | ||
| } | ||
|
|
||
| Message[] private queue; |
There was a problem hiding this comment.
What are the limits on the size of the queue or message size in queue?
| delete queue; | ||
| } | ||
|
|
||
| Message[] private queue; |
There was a problem hiding this comment.
Also how would this compare to another approach such as emitting an event instead?
| } | ||
|
|
||
| contract MessageQueue is IMessageQueue{ | ||
| function sendRawTransaction(bytes calldata _message) external override { |
There was a problem hiding this comment.
What are thoughts around supporting attaching value?
There was a problem hiding this comment.
Value is attached inside this message. It's out InternalTransactionPayload encoded with SSZ.
We can try to send messages encoded in EVM serialization but it's also should be discussed.
Do we need to send SSZ inside EVM at all. Or should be accept only ABI packed data and only then we need to repack into SSZ
There are several issues that arise with this approach, and not all of them have been resolved yet.
Summary of Changes
SmartAccount.sendmethod is ported to this approach.Potential Next Steps
Nil.sendTransactioninterface withMessageQueue.sendRawTransaction.