-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(docs): submitter docs #2837
Conversation
WalkthroughThe updates enhance the Submitter module in the Ethergo project, providing detailed information on the Changes
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
- Added comprehensive documentation for Ethergo Submitter in
/docs/bridge/docs/Services/Submitter.md
- Included example configurations and code snippets in the documentation
- Explained internal mechanisms like nonce management and reaper functionality in the documentation
- Reordered import statements in
/ethergo/submitter/chain_queue.go
2 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
Deploying sanguine-fe with Cloudflare Pages
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files ignored due to path filters (1)
docs/bridge/docs/Services/img/submitter/submitter_flow.svg
is excluded by!**/*.svg
Files selected for processing (2)
- docs/bridge/docs/Services/Submitter.md (1 hunks)
- ethergo/submitter/chain_queue.go (1 hunks)
Files skipped from review due to trivial changes (1)
- ethergo/submitter/chain_queue.go
Additional context used
LanguageTool
docs/bridge/docs/Services/Submitter.md
[grammar] ~88-~88: Possible subject-verb agreement error detected.
Context: ...selector loop running at all times that calls theprocessQueue
method, concurrently...(PLURAL_THAT_AGREEMENT)
[uncategorized] ~138-~138: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions. - `...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~139-~139: Loose punctuation mark.
Context: ... pending transactions. -current_nonce
: The current nonce. - `oldest_pending_tx...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~140-~140: Loose punctuation mark.
Context: ...The current nonce. -oldest_pending_tx
: The age of the oldest pending transacti...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~141-~141: Loose punctuation mark.
Context: ...pending transaction. -confirmed_queue
: The number of confirmed transactions. -...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~142-~142: Loose punctuation mark.
Context: ... confirmed transactions. -gas_balance
: The current gas balance. The metrics c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
docs/bridge/docs/Services/Submitter.md
66-66: Column: 1
Hard tabs(MD010, no-hard-tabs)
71-71: Column: 1
Hard tabs(MD010, no-hard-tabs)
72-72: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: Column: 1
Hard tabs(MD010, no-hard-tabs)
75-75: Column: 1
Hard tabs(MD010, no-hard-tabs)
127-127: Column: 1
Hard tabs(MD010, no-hard-tabs)
128-128: Column: 1
Hard tabs(MD010, no-hard-tabs)
129-129: Column: 1
Hard tabs(MD010, no-hard-tabs)
130-130: Column: 1
Hard tabs(MD010, no-hard-tabs)
Additional comments not posted (5)
docs/bridge/docs/Services/Submitter.md (5)
11-11
: LGTM!The addition of the submitter flow image enhances the documentation.
15-16
: LGTM!The detailed explanation of the
SubmitTransaction
method and its usage withGetSubmissionStatus
is clear and informative.
23-23
: LGTM!The explanation about the reaper functionality and its configuration is clear and useful.
27-49
: LGTM!The configuration details and example YAML configuration provide clear instructions on how to configure the Submitter module.
57-78
: LGTM!The example of how to use the
SubmitTransaction
method is clear and practical.Tools
Markdownlint
66-66: Column: 1
Hard tabs(MD010, no-hard-tabs)
71-71: Column: 1
Hard tabs(MD010, no-hard-tabs)
72-72: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: Column: 1
Hard tabs(MD010, no-hard-tabs)
75-75: Column: 1
Hard tabs(MD010, no-hard-tabs)
### Nonce Management, Database, Internals | ||
|
||
#### Nonce Management and Multichain | ||
|
||
Submitter was designed with multiple chains in mind by keeping track of a thread-safe `map[chainid]nonce`. When we build the transaction opts, we lock on the chainid until we finish firing off the transaction. | ||
We also keep a `map[txHash]txStatus` with the same thread-safe mechanism. | ||
This allows us to concurrently fire off transactions on different chains while ensuring our nonces are correct. | ||
|
||
The [Queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) has a selector loop running at all times that calls the `processQueue` method, concurrently processing and storing confirmed txs, or using the [chain queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) to fire off and store pending txs on chain. | ||
|
||
#### Customizing DB Behavior | ||
|
||
The Chain Queue db interface, [Service](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/db/service.go), allows a user to customize their Transaction DB behavior. The concrete implementation is in [store.go](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/db/txdb/store.go). | ||
|
||
#### Transaction DB | ||
|
||
The schema for a transaction to be stored in the Transaction DB is: | ||
|
||
```go | ||
// ETHTX contains a raw evm transaction that is unsigned. | ||
type ETHTX struct { | ||
ID uint64 `gorm:"column:id;primaryKey;autoIncrement:true"` | ||
// UUID is a unique ID for this transaction that will persist across retries. | ||
UUID string `gorm:"column:uuid;index"` | ||
// CreatedAt is the time the transaction was created | ||
CreatedAt time.Time | ||
// TXHash is the hash of the transaction | ||
TXHash string `gorm:"column:tx_hash;uniqueIndex;size:256"` | ||
// From is the sender of the transaction | ||
From string `gorm:"column:from;index"` | ||
// ChainID is the chain id the transaction hash will be sent on | ||
ChainID uint64 `gorm:"column:chain_id;index"` | ||
// Nonce is the nonce of the raw evm tx | ||
Nonce uint64 `gorm:"column:nonce;index"` | ||
// RawTx is the raw serialized transaction | ||
RawTx []byte `gorm:"column:raw_tx"` | ||
// Status is the status of the transaction | ||
Status db.Status `gorm:"column:status;index"` | ||
} | ||
``` | ||
|
||
Using [GORM.db](https://pkg.go.dev/gorm.io/gorm), you can use whatever database you'd like, MySQL, Sqlite, etc. | ||
|
||
#### MySQL Example | ||
|
||
```go | ||
gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{ | ||
Logger: common_base.GetGormLogger(logger), | ||
FullSaveAssociations: true, | ||
NamingStrategy: NamingStrategy, | ||
NowFunc: time.Now, | ||
}) | ||
``` | ||
|
||
### Observability | ||
|
||
Submitter exposes metrics for Prometheus. The metrics are: | ||
|
||
- `num_pending_txs`: The number of pending transactions. | ||
- `current_nonce`: The current nonce. | ||
- `oldest_pending_tx`: The age of the oldest pending transaction. | ||
- `confirmed_queue`: The number of confirmed transactions. | ||
- `gas_balance`: The current gas balance. | ||
|
||
- `num_pending_txs`: The number of pending transactions. | ||
- `current_nonce`: The current nonce. | ||
- `oldest_pending_tx`: The age of the oldest pending transaction. | ||
- `confirmed_queue`: The number of confirmed transactions. | ||
- `gas_balance`: The current gas balance. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
The details about nonce management, database behavior, and observability metrics are clear and valuable.
Fix grammatical issues and hard tabs.
There are some grammatical issues and hard tabs in the code blocks.
- The [Queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) has a selector loop running at all times that calls the `processQueue` method, concurrently processing and storing confirmed txs, or using the [chain queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) to fire off and store pending txs on chain.
+ The [Queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) has a selector loop running at all times which calls the `processQueue` method, concurrently processing and storing confirmed txs, or using the [chain queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) to fire off and store pending txs on chain.
- - `num_pending_txs`: The number of pending transactions.
- - `current_nonce`: The current nonce.
- - `oldest_pending_tx`: The age of the oldest pending transaction.
- - `confirmed_queue`: The number of confirmed transactions.
- - `gas_balance`: The current gas balance.
+ - `num_pending_txs`: The number of pending transactions
+ - `current_nonce`: The current nonce
+ - `oldest_pending_tx`: The age of the oldest pending transaction
+ - `confirmed_queue`: The number of confirmed transactions
+ - `gas_balance`: The current gas balance
- tx, err = contract.ReceiveMessage(
- transactor,
- msg.Message,
- msg.Attestation,
- )
- if err != nil {
- return nil, fmt.Errorf("could not submit transaction: %w", err)
- }
+ tx, err = contract.ReceiveMessage(
+ transactor,
+ msg.Message,
+ msg.Attestation,
+ )
+ if err != nil {
+ return nil, fmt.Errorf("could not submit transaction: %w", err)
+ }
- gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{
- Logger: common_base.GetGormLogger(logger),
- FullSaveAssociations: true,
- NamingStrategy: NamingStrategy,
- NowFunc: time.Now,
+gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{
+ Logger: common_base.GetGormLogger(logger),
+ FullSaveAssociations: true,
+ NamingStrategy: NamingStrategy,
+ NowFunc: time.Now,
})
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
### Nonce Management, Database, Internals | |
#### Nonce Management and Multichain | |
Submitter was designed with multiple chains in mind by keeping track of a thread-safe `map[chainid]nonce`. When we build the transaction opts, we lock on the chainid until we finish firing off the transaction. | |
We also keep a `map[txHash]txStatus` with the same thread-safe mechanism. | |
This allows us to concurrently fire off transactions on different chains while ensuring our nonces are correct. | |
The [Queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) has a selector loop running at all times that calls the `processQueue` method, concurrently processing and storing confirmed txs, or using the [chain queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) to fire off and store pending txs on chain. | |
#### Customizing DB Behavior | |
The Chain Queue db interface, [Service](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/db/service.go), allows a user to customize their Transaction DB behavior. The concrete implementation is in [store.go](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/db/txdb/store.go). | |
#### Transaction DB | |
The schema for a transaction to be stored in the Transaction DB is: | |
```go | |
// ETHTX contains a raw evm transaction that is unsigned. | |
type ETHTX struct { | |
ID uint64 `gorm:"column:id;primaryKey;autoIncrement:true"` | |
// UUID is a unique ID for this transaction that will persist across retries. | |
UUID string `gorm:"column:uuid;index"` | |
// CreatedAt is the time the transaction was created | |
CreatedAt time.Time | |
// TXHash is the hash of the transaction | |
TXHash string `gorm:"column:tx_hash;uniqueIndex;size:256"` | |
// From is the sender of the transaction | |
From string `gorm:"column:from;index"` | |
// ChainID is the chain id the transaction hash will be sent on | |
ChainID uint64 `gorm:"column:chain_id;index"` | |
// Nonce is the nonce of the raw evm tx | |
Nonce uint64 `gorm:"column:nonce;index"` | |
// RawTx is the raw serialized transaction | |
RawTx []byte `gorm:"column:raw_tx"` | |
// Status is the status of the transaction | |
Status db.Status `gorm:"column:status;index"` | |
} | |
``` | |
Using [GORM.db](https://pkg.go.dev/gorm.io/gorm), you can use whatever database you'd like, MySQL, Sqlite, etc. | |
#### MySQL Example | |
```go | |
gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{ | |
Logger: common_base.GetGormLogger(logger), | |
FullSaveAssociations: true, | |
NamingStrategy: NamingStrategy, | |
NowFunc: time.Now, | |
}) | |
``` | |
### Observability | |
Submitter exposes metrics for Prometheus. The metrics are: | |
- `num_pending_txs`: The number of pending transactions. | |
- `current_nonce`: The current nonce. | |
- `oldest_pending_tx`: The age of the oldest pending transaction. | |
- `confirmed_queue`: The number of confirmed transactions. | |
- `gas_balance`: The current gas balance. | |
- `num_pending_txs`: The number of pending transactions. | |
- `current_nonce`: The current nonce. | |
- `oldest_pending_tx`: The age of the oldest pending transaction. | |
- `confirmed_queue`: The number of confirmed transactions. | |
- `gas_balance`: The current gas balance. | |
### Nonce Management, Database, Internals | |
#### Nonce Management and Multichain | |
Submitter was designed with multiple chains in mind by keeping track of a thread-safe `map[chainid]nonce`. When we build the transaction opts, we lock on the chainid until we finish firing off the transaction. | |
We also keep a `map[txHash]txStatus` with the same thread-safe mechanism. | |
This allows us to concurrently fire off transactions on different chains while ensuring our nonces are correct. | |
The [Queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) has a selector loop running at all times which calls the `processQueue` method, concurrently processing and storing confirmed txs, or using the [chain queue](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/chain_queue.go) to fire off and store pending txs on chain. | |
#### Customizing DB Behavior | |
The Chain Queue db interface, [Service](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/db/service.go), allows a user to customize their Transaction DB behavior. The concrete implementation is in [store.go](https://github.com/synapsecns/sanguine/blob/ethergo/v0.9.0/ethergo/submitter/db/txdb/store.go). | |
#### Transaction DB | |
The schema for a transaction to be stored in the Transaction DB is: | |
```go | |
// ETHTX contains a raw evm transaction that is unsigned. | |
type ETHTX struct { | |
ID uint64 `gorm:"column:id;primaryKey;autoIncrement:true"` | |
// UUID is a unique ID for this transaction that will persist across retries. | |
UUID string `gorm:"column:uuid;index"` | |
// CreatedAt is the time the transaction was created | |
CreatedAt time.Time | |
// TXHash is the hash of the transaction | |
TXHash string `gorm:"column:tx_hash;uniqueIndex;size:256"` | |
// From is the sender of the transaction | |
From string `gorm:"column:from;index"` | |
// ChainID is the chain id the transaction hash will be sent on | |
ChainID uint64 `gorm:"column:chain_id;index"` | |
// Nonce is the nonce of the raw evm tx | |
Nonce uint64 `gorm:"column:nonce;index"` | |
// RawTx is the raw serialized transaction | |
RawTx []byte `gorm:"column:raw_tx"` | |
// Status is the status of the transaction | |
Status db.Status `gorm:"column:status;index"` | |
} | |
``` | |
Using [GORM.db](https://pkg.go.dev/gorm.io/gorm), you can use whatever database you'd like, MySQL, Sqlite, etc. | |
#### MySQL Example | |
```go | |
gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{ | |
Logger: common_base.GetGormLogger(logger), | |
FullSaveAssociations: true, | |
NamingStrategy: NamingStrategy, | |
NowFunc: time.Now, | |
}) | |
``` | |
### Observability | |
Submitter exposes metrics for Prometheus. The metrics are: | |
- `num_pending_txs`: The number of pending transactions | |
- `current_nonce`: The current nonce | |
- `oldest_pending_tx`: The age of the oldest pending transaction | |
- `confirmed_queue`: The number of confirmed transactions | |
- `gas_balance`: The current gas balance |
Tools
LanguageTool
[grammar] ~88-~88: Possible subject-verb agreement error detected.
Context: ...selector loop running at all times that calls theprocessQueue
method, concurrently...(PLURAL_THAT_AGREEMENT)
[uncategorized] ~138-~138: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions. - `...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~139-~139: Loose punctuation mark.
Context: ... pending transactions. -current_nonce
: The current nonce. - `oldest_pending_tx...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~140-~140: Loose punctuation mark.
Context: ...The current nonce. -oldest_pending_tx
: The age of the oldest pending transacti...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~141-~141: Loose punctuation mark.
Context: ...pending transaction. -confirmed_queue
: The number of confirmed transactions. -...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~142-~142: Loose punctuation mark.
Context: ... confirmed transactions. -gas_balance
: The current gas balance. The metrics c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
127-127: Column: 1
Hard tabs(MD010, no-hard-tabs)
128-128: Column: 1
Hard tabs(MD010, no-hard-tabs)
129-129: Column: 1
Hard tabs(MD010, no-hard-tabs)
130-130: Column: 1
Hard tabs(MD010, no-hard-tabs)
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #2837 +/- ##
===================================================
- Coverage 25.91575% 21.92734% -3.98841%
===================================================
Files 751 640 -111
Lines 53890 50868 -3022
Branches 80 0 -80
===================================================
- Hits 13966 11154 -2812
+ Misses 38480 38388 -92
+ Partials 1444 1326 -118
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
(updates since last review)
- No major changes found since last review.
1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- docs/bridge/docs/Services/Submitter.md (1 hunks)
Additional context used
LanguageTool
docs/bridge/docs/Services/Submitter.md
[uncategorized] ~137-~137: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions - `c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
docs/bridge/docs/Services/Submitter.md
66-66: Column: 1
Hard tabs(MD010, no-hard-tabs)
71-71: Column: 1
Hard tabs(MD010, no-hard-tabs)
72-72: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: Column: 1
Hard tabs(MD010, no-hard-tabs)
75-75: Column: 1
Hard tabs(MD010, no-hard-tabs)
Additional comments not posted (4)
docs/bridge/docs/Services/Submitter.md (4)
11-16
: LGTM!The documentation correctly describes the new functionality of the
SubmitTransaction
method.
23-23
: LGTM!The documentation accurately describes the reaper functionality and its configurability.
27-29
: LGTM!The documentation correctly describes the configuration options and the use of the
Chains
map.
31-49
: LGTM!The example configuration is clear and provides useful information for users.
### Overview | ||
|
||
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. | ||
|
||
#### Example of SubmitTransaction | ||
|
||
Below is an example of how to submit a transaction using Submitter. Note that the actual transaction submission logic takes place in the callback. We use an abigen binding here to send the transaction (`ReceiveMessage`), but any way to send a transaction also works, like our [Ethergo/EVM client](https://pkg.go.dev/github.com/synapsecns/sanguine/ethergo@v0.9.0/client) or geth's `ethclient`. | ||
|
||
```go | ||
nonce, err := c.txSubmitter.SubmitTransaction( | ||
ctx, | ||
big.NewInt(int64(msg.DestChainID)), | ||
func(transactor *bind.TransactOpts) (tx *types.Transaction, err error) { | ||
tx, err = contract.ReceiveMessage( | ||
transactor, | ||
msg.Message, | ||
msg.Attestation, | ||
) | ||
if err != nil { | ||
return nil, fmt.Errorf("could not submit transaction: %w", err) | ||
} | ||
|
||
return tx, nil | ||
}, | ||
) | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace hard tabs with spaces.
The example is clear and demonstrates the correct usage of the SubmitTransaction
method. However, there are hard tabs that need to be replaced with spaces.
- tx, err = contract.ReceiveMessage(
- transactor,
- msg.Message,
- msg.Attestation,
- )
- if err != nil {
- return nil, fmt.Errorf("could not submit transaction: %w", err)
- }
+ tx, err = contract.ReceiveMessage(
+ transactor,
+ msg.Message,
+ msg.Attestation,
+ )
+ if err != nil {
+ return nil, fmt.Errorf("could not submit transaction: %w", err)
+ }
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
### Overview | |
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. | |
#### Example of SubmitTransaction | |
Below is an example of how to submit a transaction using Submitter. Note that the actual transaction submission logic takes place in the callback. We use an abigen binding here to send the transaction (`ReceiveMessage`), but any way to send a transaction also works, like our [Ethergo/EVM client](https://pkg.go.dev/github.com/synapsecns/sanguine/ethergo@v0.9.0/client) or geth's `ethclient`. | |
```go | |
nonce, err := c.txSubmitter.SubmitTransaction( | |
ctx, | |
big.NewInt(int64(msg.DestChainID)), | |
func(transactor *bind.TransactOpts) (tx *types.Transaction, err error) { | |
tx, err = contract.ReceiveMessage( | |
transactor, | |
msg.Message, | |
msg.Attestation, | |
) | |
if err != nil { | |
return nil, fmt.Errorf("could not submit transaction: %w", err) | |
} | |
return tx, nil | |
}, | |
) | |
``` | |
### Overview | |
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. | |
#### Example of SubmitTransaction | |
Below is an example of how to submit a transaction using Submitter. Note that the actual transaction submission logic takes place in the callback. We use an abigen binding here to send the transaction (`ReceiveMessage`), but any way to send a transaction also works, like our [Ethergo/EVM client](https://pkg.go.dev/github.com/synapsecns/sanguine/ethergo@v0.9.0/client) or geth's `ethclient`. | |
```go | |
nonce, err := c.txSubmitter.SubmitTransaction( | |
ctx, | |
big.NewInt(int64(msg.DestChainID)), | |
func(transactor *bind.TransactOpts) (tx *types.Transaction, err error) { | |
tx, err = contract.ReceiveMessage( | |
transactor, | |
msg.Message, | |
msg.Attestation, | |
) | |
if err != nil { | |
return nil, fmt.Errorf("could not submit transaction: %w", err) | |
} | |
return tx, nil | |
}, | |
) | |
``` |
Tools
Markdownlint
66-66: Column: 1
Hard tabs(MD010, no-hard-tabs)
71-71: Column: 1
Hard tabs(MD010, no-hard-tabs)
72-72: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: Column: 1
Hard tabs(MD010, no-hard-tabs)
75-75: Column: 1
Hard tabs(MD010, no-hard-tabs)
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. | ||
|
||
#### Example of SubmitTransaction | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe have a Using submitter as a library section? This is just very different than the average user configuring submitter/understanding how it works
|
||
### Nonce Management, Database, Internals | ||
|
||
#### Nonce Management and Multichain |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same goes for this, try to seperate using submitter as a library from as an end user
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
(updates since last review)
- Enhanced
Submitter
module documentation with detailed descriptions and examples (docs/bridge/docs/Services/Submitter.md
) - Enabled Mermaid support for markdown in Docusaurus configuration (
docs/bridge/docusaurus.config.ts
) - Added
@docusaurus/theme-mermaid
dependency topackage.json
for improved diagramming capabilities (docs/bridge/package.json
)
3 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (3)
- docs/bridge/docs/Services/Submitter.md (1 hunks)
- docs/bridge/docusaurus.config.ts (2 hunks)
- docs/bridge/package.json (1 hunks)
Files skipped from review due to trivial changes (1)
- docs/bridge/package.json
Additional context used
LanguageTool
docs/bridge/docs/Services/Submitter.md
[misspelling] ~21-~21: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...B,Status
, is an enum, represented as a uint8. It is important to know what num...(EN_A_VS_AN)
[uncategorized] ~105-~105: Possible missing comma found.
Context: ...he complexities of on-chain transaction submission such as nonce management and gas bumpin...(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~187-~187: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions - `c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
docs/bridge/docs/Services/Submitter.md
19-19: Expected: h3; Actual: h4
Heading levels should only increment by one level at a time(MD001, heading-increment)
32-32: Column: 1
Hard tabs(MD010, no-hard-tabs)
33-33: Column: 1
Hard tabs(MD010, no-hard-tabs)
34-34: Column: 1
Hard tabs(MD010, no-hard-tabs)
35-35: Column: 1
Hard tabs(MD010, no-hard-tabs)
36-36: Column: 1
Hard tabs(MD010, no-hard-tabs)
37-37: Column: 1
Hard tabs(MD010, no-hard-tabs)
38-38: Column: 1
Hard tabs(MD010, no-hard-tabs)
39-39: Column: 1
Hard tabs(MD010, no-hard-tabs)
40-40: Column: 1
Hard tabs(MD010, no-hard-tabs)
41-41: Column: 1
Hard tabs(MD010, no-hard-tabs)
42-42: Column: 1
Hard tabs(MD010, no-hard-tabs)
43-43: Column: 1
Hard tabs(MD010, no-hard-tabs)
44-44: Column: 1
Hard tabs(MD010, no-hard-tabs)
45-45: Column: 1
Hard tabs(MD010, no-hard-tabs)
116-116: Column: 1
Hard tabs(MD010, no-hard-tabs)
121-121: Column: 1
Hard tabs(MD010, no-hard-tabs)
122-122: Column: 1
Hard tabs(MD010, no-hard-tabs)
123-123: Column: 1
Hard tabs(MD010, no-hard-tabs)
125-125: Column: 1
Hard tabs(MD010, no-hard-tabs)
Additional comments not posted (5)
docs/bridge/docusaurus.config.ts (2)
25-28
: LGTM! Enabling Mermaid support.The addition of Mermaid support in the markdown configuration is beneficial for adding diagrams to the documentation.
127-127
: LGTM! Adding Mermaid theme.Adding
@docusaurus/theme-mermaid
to the themes array is necessary to support Mermaid diagrams in the documentation.docs/bridge/docs/Services/Submitter.md (3)
51-51
: LGTM! Description of reaper functionality.The description of the reaper functionality is clear and informative.
55-57
: LGTM! Description of Submitter configuration.The description of the submitter configuration is clear and informative.
132-137
: LGTM! Description of nonce management.The description of nonce management is clear and informative.
@@ -10,29 +10,185 @@ The Ethergo Submitter module is designed to submit transactions to an EVM-based | |||
|
|||
## Key Features | |||
|
|||
- **Transaction Submission**: The main function of the module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. | |||
The module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. The nonce may then be used in the `GetSubmissionStatus` method to check the state: `Pending`, `Stored`, `Submitted`, `FailedSubmit`, `ReplacedOrConfirmed`, `Replaced`, `Confirmed`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add corresponding database interactions.
The description of the SubmitTransaction
method is clear, but it would be beneficial to include details about the corresponding database interactions.
#### Note: Status Enum | ||
|
||
In the DB, `Status`, is an enum, represented as a uint8. It is important to know what number indicates what status. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical issue.
Use "an" instead of "a" before "enum".
- In the DB, `Status`, is an enum, represented as a uint8.
+ In the DB, `Status`, is an enum, represented as an uint8.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
#### Note: Status Enum | |
In the DB, `Status`, is an enum, represented as a uint8. It is important to know what number indicates what status. | |
#### Note: Status Enum | |
In the DB, `Status`, is an enum, represented as an uint8. It is important to know what number indicates what status. |
Tools
LanguageTool
[misspelling] ~21-~21: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...B,Status
, is an enum, represented as a uint8. It is important to know what num...(EN_A_VS_AN)
Markdownlint
19-19: Expected: h3; Actual: h4
Heading levels should only increment by one level at a time(MD001, heading-increment)
```go | ||
nonce, err := c.txSubmitter.SubmitTransaction( | ||
ctx, | ||
big.NewInt(int64(msg.DestChainID)), | ||
func(transactor *bind.TransactOpts) (tx *types.Transaction, err error) { | ||
tx, err = contract.ReceiveMessage( | ||
transactor, | ||
msg.Message, | ||
msg.Attestation, | ||
) | ||
if err != nil { | ||
return nil, fmt.Errorf("could not submit transaction: %w", err) | ||
} | ||
|
||
return tx, nil | ||
}, | ||
) | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace hard tabs with spaces.
The example is clear and demonstrates the correct usage of the SubmitTransaction
method. However, there are hard tabs that need to be replaced with spaces.
- tx, err = contract.ReceiveMessage(
- transactor,
- msg.Message,
- msg.Attestation,
- )
- if err != nil {
- return nil, fmt.Errorf("could not submit transaction: %w", err)
- }
+ tx, err = contract.ReceiveMessage(
+ transactor,
+ msg.Message,
+ msg.Attestation,
+ )
+ if err != nil {
+ return nil, fmt.Errorf("could not submit transaction: %w", err)
+ }
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```go | |
nonce, err := c.txSubmitter.SubmitTransaction( | |
ctx, | |
big.NewInt(int64(msg.DestChainID)), | |
func(transactor *bind.TransactOpts) (tx *types.Transaction, err error) { | |
tx, err = contract.ReceiveMessage( | |
transactor, | |
msg.Message, | |
msg.Attestation, | |
) | |
if err != nil { | |
return nil, fmt.Errorf("could not submit transaction: %w", err) | |
} | |
return tx, nil | |
}, | |
) | |
``` | |
```go | |
nonce, err := c.txSubmitter.SubmitTransaction( | |
ctx, | |
big.NewInt(int64(msg.DestChainID)), | |
func(transactor *bind.TransactOpts) (tx *types.Transaction, err error) { | |
tx, err = contract.ReceiveMessage( | |
transactor, | |
msg.Message, | |
msg.Attestation, | |
) | |
if err != nil { | |
return nil, fmt.Errorf("could not submit transaction: %w", err) | |
} | |
return tx, nil | |
}, | |
) | |
``` |
Tools
Markdownlint
116-116: Column: 1
Hard tabs(MD010, no-hard-tabs)
121-121: Column: 1
Hard tabs(MD010, no-hard-tabs)
122-122: Column: 1
Hard tabs(MD010, no-hard-tabs)
123-123: Column: 1
Hard tabs(MD010, no-hard-tabs)
125-125: Column: 1
Hard tabs(MD010, no-hard-tabs)
// Pending is the status of a tx that has not been processed yet. | ||
Pending Status = iota + 1 // Pending | ||
// Stored is the status of a tx that has been stored. | ||
Stored // Stored | ||
// Submitted is the status of a tx that has been submitted. | ||
Submitted // Submitted | ||
// FailedSubmit is the status of a tx that has failed to submit. | ||
FailedSubmit // Failed | ||
// ReplacedOrConfirmed is the status of a tx that has been replaced by a new tx or confirmed. The actual status will be set later. | ||
ReplacedOrConfirmed // ReplacedOrConfirmed | ||
// Replaced is the status of a tx that has been replaced by a new tx. | ||
Replaced // Replaced | ||
// Confirmed is the status of a tx that has been confirmed. | ||
Confirmed // Confirmed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace hard tabs with spaces.
The constants for the Status
enum are well-defined, but hard tabs should be replaced with spaces.
- Pending Status = iota + 1 // Pending
- Stored // Stored
- Submitted // Submitted
- FailedSubmit // Failed
- ReplacedOrConfirmed // ReplacedOrConfirmed
- Replaced // Replaced
- Confirmed // Confirmed
+ Pending Status = iota + 1 // Pending
+ Stored // Stored
+ Submitted // Submitted
+ FailedSubmit // Failed
+ ReplacedOrConfirmed // ReplacedOrConfirmed
+ Replaced // Replaced
+ Confirmed // Confirmed
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// Pending is the status of a tx that has not been processed yet. | |
Pending Status = iota + 1 // Pending | |
// Stored is the status of a tx that has been stored. | |
Stored // Stored | |
// Submitted is the status of a tx that has been submitted. | |
Submitted // Submitted | |
// FailedSubmit is the status of a tx that has failed to submit. | |
FailedSubmit // Failed | |
// ReplacedOrConfirmed is the status of a tx that has been replaced by a new tx or confirmed. The actual status will be set later. | |
ReplacedOrConfirmed // ReplacedOrConfirmed | |
// Replaced is the status of a tx that has been replaced by a new tx. | |
Replaced // Replaced | |
// Confirmed is the status of a tx that has been confirmed. | |
Confirmed // Confirmed | |
// Pending is the status of a tx that has not been processed yet. | |
Pending Status = iota + 1 // Pending | |
// Stored is the status of a tx that has been stored. | |
Stored // Stored | |
// Submitted is the status of a tx that has been submitted. | |
Submitted // Submitted | |
// FailedSubmit is the status of a tx that has failed to submit. | |
FailedSubmit // Failed | |
// ReplacedOrConfirmed is the status of a tx that has been replaced by a new tx or confirmed. The actual status will be set later. | |
ReplacedOrConfirmed // ReplacedOrConfirmed | |
// Replaced is the status of a tx that has been replaced by a new tx. | |
Replaced // Replaced | |
// Confirmed is the status of a tx that has been confirmed. | |
Confirmed // Confirmed |
Tools
Markdownlint
32-32: Column: 1
Hard tabs(MD010, no-hard-tabs)
33-33: Column: 1
Hard tabs(MD010, no-hard-tabs)
34-34: Column: 1
Hard tabs(MD010, no-hard-tabs)
35-35: Column: 1
Hard tabs(MD010, no-hard-tabs)
36-36: Column: 1
Hard tabs(MD010, no-hard-tabs)
37-37: Column: 1
Hard tabs(MD010, no-hard-tabs)
38-38: Column: 1
Hard tabs(MD010, no-hard-tabs)
39-39: Column: 1
Hard tabs(MD010, no-hard-tabs)
40-40: Column: 1
Hard tabs(MD010, no-hard-tabs)
41-41: Column: 1
Hard tabs(MD010, no-hard-tabs)
42-42: Column: 1
Hard tabs(MD010, no-hard-tabs)
43-43: Column: 1
Hard tabs(MD010, no-hard-tabs)
44-44: Column: 1
Hard tabs(MD010, no-hard-tabs)
45-45: Column: 1
Hard tabs(MD010, no-hard-tabs)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
(updates since last review)
- Removed
@docusaurus/theme-mermaid
dependency from/docs/bridge/package.json
- No major changes found since last review.
1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Outside diff range and nitpick comments (1)
docs/bridge/docs/Services/Submitter.md (1)
13-13
: Improve readability of status list.The list of statuses returned by the
SubmitTransaction
method should be formatted for better readability.- The module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. The nonce may then be used in the `GetSubmissionStatus` method to check the status: `Pending`, `Stored`, `Submitted`, `FailedSubmit`, `ReplacedOrConfirmed`, `Replaced`, `Confirmed`. [More about the `Status` enum](#status-enum) + The module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. The nonce may then be used in the `GetSubmissionStatus` method to check the status: + - `Pending` + - `Stored` + - `Submitted` + - `FailedSubmit` + - `ReplacedOrConfirmed` + - `Replaced` + - `Confirmed` + [More about the `Status` enum](#status-enum)
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- docs/bridge/docs/Services/Submitter.md (1 hunks)
Additional context used
LanguageTool
docs/bridge/docs/Services/Submitter.md
[uncategorized] ~75-~75: Possible missing comma found.
Context: ...he complexities of on-chain transaction submission such as nonce management and gas bumpin...(AI_HYDRA_LEO_MISSING_COMMA)
[grammar] ~129-~129: The word “setup” is a noun. The verb is spelled with a space.
Context: ...#### 4.1 Submitter Suite We will first setup the Submitter Suite, which handles crea...(NOUN_VERB_CONFUSION)
[uncategorized] ~555-~555: Possible missing comma found.
Context: ...</details> ### 5: Run tests In the console run
go test ./...`. You should see the...(AI_HYDRA_LEO_MISSING_COMMA)
[misspelling] ~622-~622: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...B,Status
, is an enum, represented as a uint8. It is important to know what num...(EN_A_VS_AN)
[uncategorized] ~654-~654: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions - `c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
docs/bridge/docs/Services/Submitter.md
138-138: Column: 1
Hard tabs(MD010, no-hard-tabs)
139-139: Column: 1
Hard tabs(MD010, no-hard-tabs)
140-140: Column: 1
Hard tabs(MD010, no-hard-tabs)
141-141: Column: 1
Hard tabs(MD010, no-hard-tabs)
142-142: Column: 1
Hard tabs(MD010, no-hard-tabs)
143-143: Column: 1
Hard tabs(MD010, no-hard-tabs)
144-144: Column: 1
Hard tabs(MD010, no-hard-tabs)
146-146: Column: 1
Hard tabs(MD010, no-hard-tabs)
147-147: Column: 1
Hard tabs(MD010, no-hard-tabs)
148-148: Column: 1
Hard tabs(MD010, no-hard-tabs)
149-149: Column: 1
Hard tabs(MD010, no-hard-tabs)
150-150: Column: 1
Hard tabs(MD010, no-hard-tabs)
151-151: Column: 1
Hard tabs(MD010, no-hard-tabs)
152-152: Column: 1
Hard tabs(MD010, no-hard-tabs)
153-153: Column: 1
Hard tabs(MD010, no-hard-tabs)
154-154: Column: 1
Hard tabs(MD010, no-hard-tabs)
155-155: Column: 1
Hard tabs(MD010, no-hard-tabs)
156-156: Column: 1
Hard tabs(MD010, no-hard-tabs)
157-157: Column: 1
Hard tabs(MD010, no-hard-tabs)
158-158: Column: 1
Hard tabs(MD010, no-hard-tabs)
159-159: Column: 1
Hard tabs(MD010, no-hard-tabs)
160-160: Column: 1
Hard tabs(MD010, no-hard-tabs)
161-161: Column: 1
Hard tabs(MD010, no-hard-tabs)
162-162: Column: 1
Hard tabs(MD010, no-hard-tabs)
163-163: Column: 1
Hard tabs(MD010, no-hard-tabs)
164-164: Column: 1
Hard tabs(MD010, no-hard-tabs)
165-165: Column: 1
Hard tabs(MD010, no-hard-tabs)
166-166: Column: 1
Hard tabs(MD010, no-hard-tabs)
167-167: Column: 1
Hard tabs(MD010, no-hard-tabs)
168-168: Column: 1
Hard tabs(MD010, no-hard-tabs)
169-169: Column: 1
Hard tabs(MD010, no-hard-tabs)
170-170: Column: 1
Hard tabs(MD010, no-hard-tabs)
171-171: Column: 1
Hard tabs(MD010, no-hard-tabs)
175-175: Column: 1
Hard tabs(MD010, no-hard-tabs)
176-176: Column: 1
Hard tabs(MD010, no-hard-tabs)
177-177: Column: 1
Hard tabs(MD010, no-hard-tabs)
178-178: Column: 1
Hard tabs(MD010, no-hard-tabs)
181-181: Column: 1
Hard tabs(MD010, no-hard-tabs)
182-182: Column: 1
Hard tabs(MD010, no-hard-tabs)
186-186: Column: 1
Hard tabs(MD010, no-hard-tabs)
187-187: Column: 1
Hard tabs(MD010, no-hard-tabs)
188-188: Column: 1
Hard tabs(MD010, no-hard-tabs)
189-189: Column: 1
Hard tabs(MD010, no-hard-tabs)
190-190: Column: 1
Hard tabs(MD010, no-hard-tabs)
191-191: Column: 1
Hard tabs(MD010, no-hard-tabs)
192-192: Column: 1
Hard tabs(MD010, no-hard-tabs)
193-193: Column: 1
Hard tabs(MD010, no-hard-tabs)
194-194: Column: 1
Hard tabs(MD010, no-hard-tabs)
195-195: Column: 1
Hard tabs(MD010, no-hard-tabs)
196-196: Column: 1
Hard tabs(MD010, no-hard-tabs)
197-197: Column: 1
Hard tabs(MD010, no-hard-tabs)
198-198: Column: 1
Hard tabs(MD010, no-hard-tabs)
199-199: Column: 1
Hard tabs(MD010, no-hard-tabs)
204-204: Column: 1
Hard tabs(MD010, no-hard-tabs)
206-206: Column: 1
Hard tabs(MD010, no-hard-tabs)
207-207: Column: 1
Hard tabs(MD010, no-hard-tabs)
208-208: Column: 1
Hard tabs(MD010, no-hard-tabs)
209-209: Column: 1
Hard tabs(MD010, no-hard-tabs)
210-210: Column: 1
Hard tabs(MD010, no-hard-tabs)
211-211: Column: 1
Hard tabs(MD010, no-hard-tabs)
212-212: Column: 1
Hard tabs(MD010, no-hard-tabs)
213-213: Column: 1
Hard tabs(MD010, no-hard-tabs)
214-214: Column: 1
Hard tabs(MD010, no-hard-tabs)
215-215: Column: 1
Hard tabs(MD010, no-hard-tabs)
217-217: Column: 1
Hard tabs(MD010, no-hard-tabs)
218-218: Column: 1
Hard tabs(MD010, no-hard-tabs)
219-219: Column: 1
Hard tabs(MD010, no-hard-tabs)
220-220: Column: 1
Hard tabs(MD010, no-hard-tabs)
222-222: Column: 1
Hard tabs(MD010, no-hard-tabs)
224-224: Column: 1
Hard tabs(MD010, no-hard-tabs)
225-225: Column: 1
Hard tabs(MD010, no-hard-tabs)
226-226: Column: 1
Hard tabs(MD010, no-hard-tabs)
227-227: Column: 1
Hard tabs(MD010, no-hard-tabs)
228-228: Column: 1
Hard tabs(MD010, no-hard-tabs)
229-229: Column: 1
Hard tabs(MD010, no-hard-tabs)
230-230: Column: 1
Hard tabs(MD010, no-hard-tabs)
231-231: Column: 1
Hard tabs(MD010, no-hard-tabs)
233-233: Column: 1
Hard tabs(MD010, no-hard-tabs)
234-234: Column: 1
Hard tabs(MD010, no-hard-tabs)
235-235: Column: 1
Hard tabs(MD010, no-hard-tabs)
236-236: Column: 1
Hard tabs(MD010, no-hard-tabs)
237-237: Column: 1
Hard tabs(MD010, no-hard-tabs)
238-238: Column: 1
Hard tabs(MD010, no-hard-tabs)
239-239: Column: 1
Hard tabs(MD010, no-hard-tabs)
240-240: Column: 1
Hard tabs(MD010, no-hard-tabs)
241-241: Column: 1
Hard tabs(MD010, no-hard-tabs)
242-242: Column: 1
Hard tabs(MD010, no-hard-tabs)
243-243: Column: 1
Hard tabs(MD010, no-hard-tabs)
245-245: Column: 1
Hard tabs(MD010, no-hard-tabs)
246-246: Column: 1
Hard tabs(MD010, no-hard-tabs)
247-247: Column: 1
Hard tabs(MD010, no-hard-tabs)
248-248: Column: 1
Hard tabs(MD010, no-hard-tabs)
249-249: Column: 1
Hard tabs(MD010, no-hard-tabs)
250-250: Column: 1
Hard tabs(MD010, no-hard-tabs)
251-251: Column: 1
Hard tabs(MD010, no-hard-tabs)
252-252: Column: 1
Hard tabs(MD010, no-hard-tabs)
253-253: Column: 1
Hard tabs(MD010, no-hard-tabs)
254-254: Column: 1
Hard tabs(MD010, no-hard-tabs)
255-255: Column: 1
Hard tabs(MD010, no-hard-tabs)
256-256: Column: 1
Hard tabs(MD010, no-hard-tabs)
257-257: Column: 1
Hard tabs(MD010, no-hard-tabs)
259-259: Column: 1
Hard tabs(MD010, no-hard-tabs)
260-260: Column: 1
Hard tabs(MD010, no-hard-tabs)
261-261: Column: 1
Hard tabs(MD010, no-hard-tabs)
262-262: Column: 1
Hard tabs(MD010, no-hard-tabs)
263-263: Column: 1
Hard tabs(MD010, no-hard-tabs)
264-264: Column: 1
Hard tabs(MD010, no-hard-tabs)
265-265: Column: 1
Hard tabs(MD010, no-hard-tabs)
266-266: Column: 1
Hard tabs(MD010, no-hard-tabs)
267-267: Column: 1
Hard tabs(MD010, no-hard-tabs)
268-268: Column: 1
Hard tabs(MD010, no-hard-tabs)
269-269: Column: 1
Hard tabs(MD010, no-hard-tabs)
270-270: Column: 1
Hard tabs(MD010, no-hard-tabs)
271-271: Column: 1
Hard tabs(MD010, no-hard-tabs)
277-277: Column: 1
Hard tabs(MD010, no-hard-tabs)
278-278: Column: 1
Hard tabs(MD010, no-hard-tabs)
279-279: Column: 1
Hard tabs(MD010, no-hard-tabs)
280-280: Column: 1
Hard tabs(MD010, no-hard-tabs)
281-281: Column: 1
Hard tabs(MD010, no-hard-tabs)
282-282: Column: 1
Hard tabs(MD010, no-hard-tabs)
284-284: Column: 1
Hard tabs(MD010, no-hard-tabs)
285-285: Column: 1
Hard tabs(MD010, no-hard-tabs)
286-286: Column: 1
Hard tabs(MD010, no-hard-tabs)
287-287: Column: 1
Hard tabs(MD010, no-hard-tabs)
288-288: Column: 1
Hard tabs(MD010, no-hard-tabs)
289-289: Column: 1
Hard tabs(MD010, no-hard-tabs)
290-290: Column: 1
Hard tabs(MD010, no-hard-tabs)
291-291: Column: 1
Hard tabs(MD010, no-hard-tabs)
292-292: Column: 1
Hard tabs(MD010, no-hard-tabs)
293-293: Column: 1
Hard tabs(MD010, no-hard-tabs)
294-294: Column: 1
Hard tabs(MD010, no-hard-tabs)
296-296: Column: 1
Hard tabs(MD010, no-hard-tabs)
297-297: Column: 1
Hard tabs(MD010, no-hard-tabs)
298-298: Column: 1
Hard tabs(MD010, no-hard-tabs)
299-299: Column: 1
Hard tabs(MD010, no-hard-tabs)
301-301: Column: 1
Hard tabs(MD010, no-hard-tabs)
302-302: Column: 1
Hard tabs(MD010, no-hard-tabs)
303-303: Column: 1
Hard tabs(MD010, no-hard-tabs)
304-304: Column: 1
Hard tabs(MD010, no-hard-tabs)
305-305: Column: 1
Hard tabs(MD010, no-hard-tabs)
306-306: Column: 1
Hard tabs(MD010, no-hard-tabs)
307-307: Column: 1
Hard tabs(MD010, no-hard-tabs)
308-308: Column: 1
Hard tabs(MD010, no-hard-tabs)
313-313: Column: 1
Hard tabs(MD010, no-hard-tabs)
314-314: Column: 1
Hard tabs(MD010, no-hard-tabs)
315-315: Column: 1
Hard tabs(MD010, no-hard-tabs)
316-316: Column: 1
Hard tabs(MD010, no-hard-tabs)
320-320: Column: 1
Hard tabs(MD010, no-hard-tabs)
327-327: Column: 1
Hard tabs(MD010, no-hard-tabs)
331-331: Column: 1
Hard tabs(MD010, no-hard-tabs)
332-332: Column: 1
Hard tabs(MD010, no-hard-tabs)
334-334: Column: 1
Hard tabs(MD010, no-hard-tabs)
335-335: Column: 1
Hard tabs(MD010, no-hard-tabs)
336-336: Column: 1
Hard tabs(MD010, no-hard-tabs)
337-337: Column: 1
Hard tabs(MD010, no-hard-tabs)
338-338: Column: 1
Hard tabs(MD010, no-hard-tabs)
339-339: Column: 1
Hard tabs(MD010, no-hard-tabs)
340-340: Column: 1
Hard tabs(MD010, no-hard-tabs)
345-345: Column: 1
Hard tabs(MD010, no-hard-tabs)
346-346: Column: 1
Hard tabs(MD010, no-hard-tabs)
347-347: Column: 1
Hard tabs(MD010, no-hard-tabs)
349-349: Column: 1
Hard tabs(MD010, no-hard-tabs)
351-351: Column: 1
Hard tabs(MD010, no-hard-tabs)
353-353: Column: 1
Hard tabs(MD010, no-hard-tabs)
354-354: Column: 1
Hard tabs(MD010, no-hard-tabs)
355-355: Column: 1
Hard tabs(MD010, no-hard-tabs)
356-356: Column: 1
Hard tabs(MD010, no-hard-tabs)
358-358: Column: 1
Hard tabs(MD010, no-hard-tabs)
359-359: Column: 1
Hard tabs(MD010, no-hard-tabs)
360-360: Column: 1
Hard tabs(MD010, no-hard-tabs)
361-361: Column: 1
Hard tabs(MD010, no-hard-tabs)
362-362: Column: 1
Hard tabs(MD010, no-hard-tabs)
364-364: Column: 1
Hard tabs(MD010, no-hard-tabs)
366-366: Column: 1
Hard tabs(MD010, no-hard-tabs)
367-367: Column: 1
Hard tabs(MD010, no-hard-tabs)
368-368: Column: 1
Hard tabs(MD010, no-hard-tabs)
369-369: Column: 1
Hard tabs(MD010, no-hard-tabs)
370-370: Column: 1
Hard tabs(MD010, no-hard-tabs)
371-371: Column: 1
Hard tabs(MD010, no-hard-tabs)
372-372: Column: 1
Hard tabs(MD010, no-hard-tabs)
374-374: Column: 1
Hard tabs(MD010, no-hard-tabs)
375-375: Column: 1
Hard tabs(MD010, no-hard-tabs)
376-376: Column: 1
Hard tabs(MD010, no-hard-tabs)
377-377: Column: 1
Hard tabs(MD010, no-hard-tabs)
378-378: Column: 1
Hard tabs(MD010, no-hard-tabs)
379-379: Column: 1
Hard tabs(MD010, no-hard-tabs)
380-380: Column: 1
Hard tabs(MD010, no-hard-tabs)
381-381: Column: 1
Hard tabs(MD010, no-hard-tabs)
382-382: Column: 1
Hard tabs(MD010, no-hard-tabs)
383-383: Column: 1
Hard tabs(MD010, no-hard-tabs)
384-384: Column: 1
Hard tabs(MD010, no-hard-tabs)
385-385: Column: 1
Hard tabs(MD010, no-hard-tabs)
387-387: Column: 1
Hard tabs(MD010, no-hard-tabs)
389-389: Column: 1
Hard tabs(MD010, no-hard-tabs)
390-390: Column: 1
Hard tabs(MD010, no-hard-tabs)
391-391: Column: 1
Hard tabs(MD010, no-hard-tabs)
392-392: Column: 1
Hard tabs(MD010, no-hard-tabs)
393-393: Column: 1
Hard tabs(MD010, no-hard-tabs)
412-412: Column: 1
Hard tabs(MD010, no-hard-tabs)
413-413: Column: 1
Hard tabs(MD010, no-hard-tabs)
415-415: Column: 1
Hard tabs(MD010, no-hard-tabs)
416-416: Column: 1
Hard tabs(MD010, no-hard-tabs)
417-417: Column: 1
Hard tabs(MD010, no-hard-tabs)
418-418: Column: 1
Hard tabs(MD010, no-hard-tabs)
419-419: Column: 1
Hard tabs(MD010, no-hard-tabs)
420-420: Column: 1
Hard tabs(MD010, no-hard-tabs)
421-421: Column: 1
Hard tabs(MD010, no-hard-tabs)
422-422: Column: 1
Hard tabs(MD010, no-hard-tabs)
423-423: Column: 1
Hard tabs(MD010, no-hard-tabs)
430-430: Column: 1
Hard tabs(MD010, no-hard-tabs)
431-431: Column: 1
Hard tabs(MD010, no-hard-tabs)
432-432: Column: 1
Hard tabs(MD010, no-hard-tabs)
433-433: Column: 1
Hard tabs(MD010, no-hard-tabs)
434-434: Column: 1
Hard tabs(MD010, no-hard-tabs)
435-435: Column: 1
Hard tabs(MD010, no-hard-tabs)
436-436: Column: 1
Hard tabs(MD010, no-hard-tabs)
437-437: Column: 1
Hard tabs(MD010, no-hard-tabs)
439-439: Column: 1
Hard tabs(MD010, no-hard-tabs)
440-440: Column: 1
Hard tabs(MD010, no-hard-tabs)
442-442: Column: 1
Hard tabs(MD010, no-hard-tabs)
443-443: Column: 1
Hard tabs(MD010, no-hard-tabs)
444-444: Column: 1
Hard tabs(MD010, no-hard-tabs)
445-445: Column: 1
Hard tabs(MD010, no-hard-tabs)
446-446: Column: 1
Hard tabs(MD010, no-hard-tabs)
448-448: Column: 1
Hard tabs(MD010, no-hard-tabs)
449-449: Column: 1
Hard tabs(MD010, no-hard-tabs)
450-450: Column: 1
Hard tabs(MD010, no-hard-tabs)
452-452: Column: 1
Hard tabs(MD010, no-hard-tabs)
453-453: Column: 1
Hard tabs(MD010, no-hard-tabs)
455-455: Column: 1
Hard tabs(MD010, no-hard-tabs)
456-456: Column: 1
Hard tabs(MD010, no-hard-tabs)
457-457: Column: 1
Hard tabs(MD010, no-hard-tabs)
458-458: Column: 1
Hard tabs(MD010, no-hard-tabs)
459-459: Column: 1
Hard tabs(MD010, no-hard-tabs)
460-460: Column: 1
Hard tabs(MD010, no-hard-tabs)
461-461: Column: 1
Hard tabs(MD010, no-hard-tabs)
462-462: Column: 1
Hard tabs(MD010, no-hard-tabs)
463-463: Column: 1
Hard tabs(MD010, no-hard-tabs)
464-464: Column: 1
Hard tabs(MD010, no-hard-tabs)
465-465: Column: 1
Hard tabs(MD010, no-hard-tabs)
466-466: Column: 1
Hard tabs(MD010, no-hard-tabs)
467-467: Column: 1
Hard tabs(MD010, no-hard-tabs)
468-468: Column: 1
Hard tabs(MD010, no-hard-tabs)
470-470: Column: 1
Hard tabs(MD010, no-hard-tabs)
471-471: Column: 1
Hard tabs(MD010, no-hard-tabs)
473-473: Column: 1
Hard tabs(MD010, no-hard-tabs)
474-474: Column: 1
Hard tabs(MD010, no-hard-tabs)
475-475: Column: 1
Hard tabs(MD010, no-hard-tabs)
476-476: Column: 1
Hard tabs(MD010, no-hard-tabs)
477-477: Column: 1
Hard tabs(MD010, no-hard-tabs)
478-478: Column: 1
Hard tabs(MD010, no-hard-tabs)
479-479: Column: 1
Hard tabs(MD010, no-hard-tabs)
480-480: Column: 1
Hard tabs(MD010, no-hard-tabs)
481-481: Column: 1
Hard tabs(MD010, no-hard-tabs)
482-482: Column: 1
Hard tabs(MD010, no-hard-tabs)
483-483: Column: 1
Hard tabs(MD010, no-hard-tabs)
485-485: Column: 1
Hard tabs(MD010, no-hard-tabs)
486-486: Column: 1
Hard tabs(MD010, no-hard-tabs)
487-487: Column: 1
Hard tabs(MD010, no-hard-tabs)
489-489: Column: 1
Hard tabs(MD010, no-hard-tabs)
490-490: Column: 1
Hard tabs(MD010, no-hard-tabs)
491-491: Column: 1
Hard tabs(MD010, no-hard-tabs)
492-492: Column: 1
Hard tabs(MD010, no-hard-tabs)
493-493: Column: 1
Hard tabs(MD010, no-hard-tabs)
494-494: Column: 1
Hard tabs(MD010, no-hard-tabs)
495-495: Column: 1
Hard tabs(MD010, no-hard-tabs)
496-496: Column: 1
Hard tabs(MD010, no-hard-tabs)
497-497: Column: 1
Hard tabs(MD010, no-hard-tabs)
498-498: Column: 1
Hard tabs(MD010, no-hard-tabs)
500-500: Column: 1
Hard tabs(MD010, no-hard-tabs)
501-501: Column: 1
Hard tabs(MD010, no-hard-tabs)
502-502: Column: 1
Hard tabs(MD010, no-hard-tabs)
503-503: Column: 1
Hard tabs(MD010, no-hard-tabs)
504-504: Column: 1
Hard tabs(MD010, no-hard-tabs)
506-506: Column: 1
Hard tabs(MD010, no-hard-tabs)
507-507: Column: 1
Hard tabs(MD010, no-hard-tabs)
508-508: Column: 1
Hard tabs(MD010, no-hard-tabs)
510-510: Column: 1
Hard tabs(MD010, no-hard-tabs)
511-511: Column: 1
Hard tabs(MD010, no-hard-tabs)
512-512: Column: 1
Hard tabs(MD010, no-hard-tabs)
513-513: Column: 1
Hard tabs(MD010, no-hard-tabs)
514-514: Column: 1
Hard tabs(MD010, no-hard-tabs)
515-515: Column: 1
Hard tabs(MD010, no-hard-tabs)
516-516: Column: 1
Hard tabs(MD010, no-hard-tabs)
517-517: Column: 1
Hard tabs(MD010, no-hard-tabs)
518-518: Column: 1
Hard tabs(MD010, no-hard-tabs)
519-519: Column: 1
Hard tabs(MD010, no-hard-tabs)
520-520: Column: 1
Hard tabs(MD010, no-hard-tabs)
522-522: Column: 1
Hard tabs(MD010, no-hard-tabs)
523-523: Column: 1
Hard tabs(MD010, no-hard-tabs)
524-524: Column: 1
Hard tabs(MD010, no-hard-tabs)
525-525: Column: 1
Hard tabs(MD010, no-hard-tabs)
526-526: Column: 1
Hard tabs(MD010, no-hard-tabs)
528-528: Column: 1
Hard tabs(MD010, no-hard-tabs)
529-529: Column: 1
Hard tabs(MD010, no-hard-tabs)
530-530: Column: 1
Hard tabs(MD010, no-hard-tabs)
531-531: Column: 1
Hard tabs(MD010, no-hard-tabs)
532-532: Column: 1
Hard tabs(MD010, no-hard-tabs)
533-533: Column: 1
Hard tabs(MD010, no-hard-tabs)
534-534: Column: 1
Hard tabs(MD010, no-hard-tabs)
535-535: Column: 1
Hard tabs(MD010, no-hard-tabs)
537-537: Column: 1
Hard tabs(MD010, no-hard-tabs)
538-538: Column: 1
Hard tabs(MD010, no-hard-tabs)
539-539: Column: 1
Hard tabs(MD010, no-hard-tabs)
540-540: Column: 1
Hard tabs(MD010, no-hard-tabs)
541-541: Column: 1
Hard tabs(MD010, no-hard-tabs)
542-542: Column: 1
Hard tabs(MD010, no-hard-tabs)
544-544: Column: 1
Hard tabs(MD010, no-hard-tabs)
545-545: Column: 1
Hard tabs(MD010, no-hard-tabs)
546-546: Column: 1
Hard tabs(MD010, no-hard-tabs)
633-633: Column: 1
Hard tabs(MD010, no-hard-tabs)
634-634: Column: 1
Hard tabs(MD010, no-hard-tabs)
635-635: Column: 1
Hard tabs(MD010, no-hard-tabs)
636-636: Column: 1
Hard tabs(MD010, no-hard-tabs)
637-637: Column: 1
Hard tabs(MD010, no-hard-tabs)
638-638: Column: 1
Hard tabs(MD010, no-hard-tabs)
639-639: Column: 1
Hard tabs(MD010, no-hard-tabs)
640-640: Column: 1
Hard tabs(MD010, no-hard-tabs)
641-641: Column: 1
Hard tabs(MD010, no-hard-tabs)
642-642: Column: 1
Hard tabs(MD010, no-hard-tabs)
643-643: Column: 1
Hard tabs(MD010, no-hard-tabs)
644-644: Column: 1
Hard tabs(MD010, no-hard-tabs)
645-645: Column: 1
Hard tabs(MD010, no-hard-tabs)
646-646: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: null
Multiple headings with the same content(MD024, no-duplicate-heading)
86-86: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
94-94: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
100-100: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
109-109: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
119-119: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
Additional comments not posted (2)
docs/bridge/docs/Services/Submitter.md (2)
21-23
: LGTM!The description of the reaper functionality is clear and concise.
71-71
: Fix grammatical issue.Use "an" instead of "a" before "enum".
- In the DB, `Status`, is an enum, represented as a uint8. + In the DB, `Status`, is an enum, represented as an uint8.Likely invalid or redundant comment.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
(updates since last review)
- Updated
docs/bridge/docs/Services/Submitter.md
with detailed explanations ofSubmitTransaction
method, reaper functionality, and observability metrics. - Added configuration specifics and examples to enhance understanding.
- Introduced support for Mermaid diagrams in documentation.
1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
(updates since last review)
- Added detailed explanations of
SubmitTransaction
method, reaper functionality, and observability metrics indocs/bridge/docs/Services/Submitter.md
- Included configuration specifics and examples for better understanding
- Introduced support for Mermaid diagrams in documentation
No major changes found since last review.
1 file(s) reviewed, 1 comment(s)
Edit PR Review Bot Settings
|
||
The Executor naturally uses the Submitter because we want to asynchronously listen for events, process them, and fire off the respective transaction since many of the triggering events can happen simultanously. | ||
|
||
You will need a couple things in order to use the Transaciton submitter that signs with your own private key, RPC url(s) (OmniRPC is recommended), DB service, and config values. We'll tackle these in order. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📚 spelling: Typo in 'Transaciton'.
You will need a couple things in order to use the Transaciton submitter that signs with your own private key, RPC url(s) (OmniRPC is recommended), DB service, and config values. We'll tackle these in order. | |
Transaction |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- docs/bridge/docs/Services/Submitter.md (1 hunks)
Additional context used
LanguageTool
docs/bridge/docs/Services/Submitter.md
[uncategorized] ~75-~75: Possible missing comma found.
Context: ...he complexities of on-chain transaction submission such as nonce management and gas bumpin...(AI_HYDRA_LEO_MISSING_COMMA)
[grammar] ~83-~83: Using ‘couple’ without ‘of’ is considered to be informal.
Context: ... happen simultanously. You will need a couple things in order to use the Transaciton submitt...(PLENTY_OF_NOUNS)
[style] ~83-~83: Consider a shorter alternative to avoid wordiness.
Context: ...anously. You will need a couple things in order to use the Transaciton submitter that sign...(IN_ORDER_TO_PREMIUM)
[grammar] ~113-~113: Did you mean the abbreviation for “I don’t know”?
Context: ...ore that implements thegorm.DB
type. Idk what to put here. 5. Finally, run the ...(IDK)
[misspelling] ~182-~182: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...B,Status
, is an enum, represented as a uint8. It is important to know what num...(EN_A_VS_AN)
[uncategorized] ~214-~214: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions. - `...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~215-~215: Loose punctuation mark.
Context: ... pending transactions. -current_nonce
: The current nonce. - `oldest_pending_tx...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~216-~216: Loose punctuation mark.
Context: ...The current nonce. -oldest_pending_tx
: The age of the oldest pending transacti...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~217-~217: Loose punctuation mark.
Context: ...pending transaction. -confirmed_queue
: The number of confirmed transactions. -...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~218-~218: Loose punctuation mark.
Context: ... confirmed transactions. -gas_balance
: The current gas balance. The metrics c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
docs/bridge/docs/Services/Submitter.md
193-193: Column: 1
Hard tabs(MD010, no-hard-tabs)
194-194: Column: 1
Hard tabs(MD010, no-hard-tabs)
195-195: Column: 1
Hard tabs(MD010, no-hard-tabs)
196-196: Column: 1
Hard tabs(MD010, no-hard-tabs)
197-197: Column: 1
Hard tabs(MD010, no-hard-tabs)
198-198: Column: 1
Hard tabs(MD010, no-hard-tabs)
199-199: Column: 1
Hard tabs(MD010, no-hard-tabs)
200-200: Column: 1
Hard tabs(MD010, no-hard-tabs)
201-201: Column: 1
Hard tabs(MD010, no-hard-tabs)
202-202: Column: 1
Hard tabs(MD010, no-hard-tabs)
203-203: Column: 1
Hard tabs(MD010, no-hard-tabs)
204-204: Column: 1
Hard tabs(MD010, no-hard-tabs)
205-205: Column: 1
Hard tabs(MD010, no-hard-tabs)
206-206: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: null
Multiple headings with the same content(MD024, no-duplicate-heading)
89-89: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
Additional comments not posted (3)
docs/bridge/docs/Services/Submitter.md (3)
21-23
: LGTM!The reaper functionality is well-documented and clear.
125-132
: LGTM!The information on nonce management and database behavior is clear and detailed.
214-218
: Fix loose punctuation mark.The documentation correctly lists the observability metrics, but there is a loose punctuation mark.
- `num_pending_txs`: The number of pending transactions - `current_nonce`: The current nonce - `oldest_pending_tx`: The age of the oldest pending transaction - `confirmed_queue`: The number of confirmed transactions - `gas_balance`: The current gas balance + - `num_pending_txs`: The number of pending transactions. + - `current_nonce`: The current nonce. + - `oldest_pending_tx`: The age of the oldest pending transaction. + - `confirmed_queue`: The number of confirmed transactions. + - `gas_balance`: The current gas balance.Likely invalid or redundant comment.
Tools
LanguageTool
[uncategorized] ~214-~214: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions. - `...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~215-~215: Loose punctuation mark.
Context: ... pending transactions. -current_nonce
: The current nonce. - `oldest_pending_tx...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~216-~216: Loose punctuation mark.
Context: ...The current nonce. -oldest_pending_tx
: The age of the oldest pending transacti...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~217-~217: Loose punctuation mark.
Context: ...pending transaction. -confirmed_queue
: The number of confirmed transactions. -...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~218-~218: Loose punctuation mark.
Context: ... confirmed transactions. -gas_balance
: The current gas balance. The metrics c...(UNLIKELY_OPENING_PUNCTUATION)
|
||
Thirdly, you want to have an OmniRPC client for multichain transaction sending support. | ||
|
||
4. Our services use a db store that implements the `gorm.DB` type. Idk what to put here. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix informal language.
Replace "Idk" with "I don't know" for formal documentation.
- Our services use a db store that implements the `gorm.DB` type. Idk what to put here.
+ Our services use a db store that implements the `gorm.DB` type. I don't know what to put here.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
4. Our services use a db store that implements the `gorm.DB` type. Idk what to put here. | |
4. Our services use a db store that implements the `gorm.DB` type. I don't know what to put here. |
Tools
LanguageTool
[grammar] ~113-~113: Did you mean the abbreviation for “I don’t know”?
Context: ...ore that implements thegorm.DB
type. Idk what to put here. 5. Finally, run the ...(IDK)
```yaml | ||
submitter_config: | ||
chains: | ||
1: | ||
# MaxBatchSize is the maximum number of transactions to send in a batch. | ||
# If this is zero, the default will be used. | ||
# This field is ignored if batching is disabled. | ||
max_batch_size: 50 | ||
# Batch is whether or not to batch transactions at the rpc level. | ||
skip_batching: false | ||
# MaxGasPrice is the maximum gas price to use for transactions. | ||
max_gas_price: 200000000000 # 200 Gwei | ||
# MinGasPrice is the gas price that will be used if 0 is returned | ||
# from the gas price oracle. | ||
min_gas_price: 1000000000 # 1 Gwei | ||
# BumpIntervalSeconds is the number of seconds to | ||
# wait before bumping a transaction. | ||
bump_interval_seconds: 120 | ||
# GasBumpPercentages is the percentage to bump the gas price by. | ||
# This is applied to the greatrer of the chainprice or the last price. | ||
gas_bump_percentage: 10 | ||
# GasEstimate is the gas estimate to use for transactions if | ||
# dynamic gas estimation is enabled. | ||
# This is only used as a default if the estimate fails. | ||
gas_estimate: 1000000 | ||
# DynamicGasEstimate is whether or not to use dynamic gas estimation. | ||
dynamic_gas_estimate: true | ||
# SupportsEIP1559 is whether or not this chain supports EIP1559. | ||
supports_eip_1559: true | ||
43114: | ||
max_gas_price: 100000000000 # 100 Gwei | ||
10: | ||
max_gas_price: 90000000000 # 90 Gwei | ||
min_gas_price: 100000000 # 0.1 Gwei | ||
# ReaperInterval is the interval at which scan for transactions to flush | ||
reaper_interval: 604800000000000 # int64(7 * 24 * time.Hour) | ||
# MaxRecordAge is the maximum age of a record before it is flushed | ||
max_record_age: 86400000000000 # int64(1 * 24 * time.Hour) | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace hard tabs with spaces.
Replace hard tabs in the example configuration with spaces for consistency.
- gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{
- Logger: common_base.GetGormLogger(logger),
- FullSaveAssociations: true,
- NamingStrategy: NamingStrategy,
- NowFunc: time.Now,
+ gdb, err := gorm.Open(mysql.Open(dbURL), &gorm.Config{
+ Logger: common_base.GetGormLogger(logger),
+ FullSaveAssociations: true,
+ NamingStrategy: NamingStrategy,
+ NowFunc: time.Now,
})
Committable suggestion was skipped due to low confidence.
|
||
Submitter exposes metrics for Prometheus. The metrics are: | ||
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add missing comma.
A comma is missing after "submission".
- `SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping.
+ `SubmitTransaction` abstracts many of the complexities of on-chain transaction submission, such as nonce management and gas bumping.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. | |
`SubmitTransaction` abstracts many of the complexities of on-chain transaction submission, such as nonce management and gas bumping. In addition, sent transactions are stored in the database for easy indexing of older transactions. |
Tools
LanguageTool
[uncategorized] ~75-~75: Possible missing comma found.
Context: ...he complexities of on-chain transaction submission such as nonce management and gas bumpin...(AI_HYDRA_LEO_MISSING_COMMA)
|
||
The Executor naturally uses the Submitter because we want to asynchronously listen for events, process them, and fire off the respective transaction since many of the triggering events can happen simultanously. | ||
|
||
You will need a couple things in order to use the Transaciton submitter that signs with your own private key, RPC url(s) (OmniRPC is recommended), DB service, and config values. We'll tackle these in order. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical issue.
Using ‘couple’ without ‘of’ is considered informal. Additionally, consider a shorter alternative to avoid wordiness.
- You will need a couple things in order to use the Transaciton submitter that signs with your own private key, RPC url(s) (OmniRPC is recommended), DB service, and config values.
+ You will need a few things to use the Transaction submitter that signs with your own private key, RPC URL(s) (OmniRPC is recommended), DB service, and config values.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
You will need a couple things in order to use the Transaciton submitter that signs with your own private key, RPC url(s) (OmniRPC is recommended), DB service, and config values. We'll tackle these in order. | |
You will need a few things to use the Transaction submitter that signs with your own private key, RPC URL(s) (OmniRPC is recommended), DB service, and config values. We'll tackle these in order. |
Tools
LanguageTool
[grammar] ~83-~83: Using ‘couple’ without ‘of’ is considered to be informal.
Context: ... happen simultanously. You will need a couple things in order to use the Transaciton submitt...(PLENTY_OF_NOUNS)
[style] ~83-~83: Consider a shorter alternative to avoid wordiness.
Context: ...anously. You will need a couple things in order to use the Transaciton submitter that sign...(IN_ORDER_TO_PREMIUM)
# wait before bumping a transaction. | ||
bump_interval_seconds: 120 | ||
# GasBumpPercentages is the percentage to bump the gas price by. | ||
# This is applied to the greatrer of the chainprice or the last price. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo.
Correct the typo "greatrer" to "greater".
- # This is applied to the greatrer of the chainprice or the last price.
+ # This is applied to the greater of the chain price or the last price.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
# This is applied to the greatrer of the chainprice or the last price. | |
# This is applied to the greater of the chain price or the last price. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
(updates since last review)
- Enhanced details on
SubmitTransaction
method, reaper functionality, configuration, nonce management, database behavior, and observability metrics indocs/bridge/docs/Services/Submitter.md
- Added examples and links for better understanding
- Included support for Mermaid diagrams in documentation
No major changes found since last review.
1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- docs/bridge/docs/Services/Submitter.md (1 hunks)
Additional context used
LanguageTool
docs/bridge/docs/Services/Submitter.md
[uncategorized] ~75-~75: Possible missing comma found.
Context: ...he complexities of on-chain transaction submission such as nonce management and gas bumpin...(AI_HYDRA_LEO_MISSING_COMMA)
[grammar] ~83-~83: Using ‘couple’ without ‘of’ is considered to be informal.
Context: ... happen simultanously. You will need a couple things in order to use the Transaciton submitt...(PLENTY_OF_NOUNS)
[style] ~83-~83: Consider a shorter alternative to avoid wordiness.
Context: ...anously. You will need a couple things in order to use the Transaciton submitter that sign...(IN_ORDER_TO_PREMIUM)
[style] ~92-~92: The expression “for sure” is rather colloquial. To elevate your writing, consider replacing it with an adverb.
Context: ...f the service uses a submitter, it will for sure have thesubmitter_config
below. ```...(FOR_SURE2)
[misspelling] ~170-~170: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...B,Status
, is an enum, represented as a uint8. It is important to know what num...(EN_A_VS_AN)
[uncategorized] ~202-~202: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions. - `...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~203-~203: Loose punctuation mark.
Context: ... pending transactions. -current_nonce
: The current nonce. - `oldest_pending_tx...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~204-~204: Loose punctuation mark.
Context: ...The current nonce. -oldest_pending_tx
: The age of the oldest pending transacti...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~205-~205: Loose punctuation mark.
Context: ...pending transaction. -confirmed_queue
: The number of confirmed transactions. -...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~206-~206: Loose punctuation mark.
Context: ... confirmed transactions. -gas_balance
: The current gas balance. The metrics c...(UNLIKELY_OPENING_PUNCTUATION)
Markdownlint
docs/bridge/docs/Services/Submitter.md
181-181: Column: 1
Hard tabs(MD010, no-hard-tabs)
182-182: Column: 1
Hard tabs(MD010, no-hard-tabs)
183-183: Column: 1
Hard tabs(MD010, no-hard-tabs)
184-184: Column: 1
Hard tabs(MD010, no-hard-tabs)
185-185: Column: 1
Hard tabs(MD010, no-hard-tabs)
186-186: Column: 1
Hard tabs(MD010, no-hard-tabs)
187-187: Column: 1
Hard tabs(MD010, no-hard-tabs)
188-188: Column: 1
Hard tabs(MD010, no-hard-tabs)
189-189: Column: 1
Hard tabs(MD010, no-hard-tabs)
190-190: Column: 1
Hard tabs(MD010, no-hard-tabs)
191-191: Column: 1
Hard tabs(MD010, no-hard-tabs)
192-192: Column: 1
Hard tabs(MD010, no-hard-tabs)
193-193: Column: 1
Hard tabs(MD010, no-hard-tabs)
194-194: Column: 1
Hard tabs(MD010, no-hard-tabs)
73-73: null
Multiple headings with the same content(MD024, no-duplicate-heading)
Additional comments not posted (3)
docs/bridge/docs/Services/Submitter.md (3)
21-23
: LGTM!The description of the reaper functionality is clear and concise.
113-120
: LGTM!The details about nonce management and database internals are clear and valuable.
50-50
: Fix typo.Correct the typo "greatrer" to "greater".
- # This is applied to the greatrer of the chainprice or the last price. + # This is applied to the greater of the chain price or the last price.Likely invalid or redundant comment.
- `num_pending_txs`: The number of pending transactions. | ||
- `current_nonce`: The current nonce. | ||
- `oldest_pending_tx`: The age of the oldest pending transaction. | ||
- `confirmed_queue`: The number of confirmed transactions. | ||
- `gas_balance`: The current gas balance. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix the loose punctuation mark.
The documentation correctly lists the observability metrics, but there is a loose punctuation mark.
- `num_pending_txs`: The number of pending transactions
- `current_nonce`: The current nonce
- `oldest_pending_tx`: The age of the oldest pending transaction
- `confirmed_queue`: The number of confirmed transactions
- `gas_balance`: The current gas balance
+ - `num_pending_txs`: The number of pending transactions.
+ - `current_nonce`: The current nonce.
+ - `oldest_pending_tx`: The age of the oldest pending transaction.
+ - `confirmed_queue`: The number of confirmed transactions.
+ - `gas_balance`: The current gas balance.
Committable suggestion was skipped due to low confidence.
Tools
LanguageTool
[uncategorized] ~202-~202: Loose punctuation mark.
Context: ...s. The metrics are: -num_pending_txs
: The number of pending transactions. - `...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~203-~203: Loose punctuation mark.
Context: ... pending transactions. -current_nonce
: The current nonce. - `oldest_pending_tx...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~204-~204: Loose punctuation mark.
Context: ...The current nonce. -oldest_pending_tx
: The age of the oldest pending transacti...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~205-~205: Loose punctuation mark.
Context: ...pending transaction. -confirmed_queue
: The number of confirmed transactions. -...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~206-~206: Loose punctuation mark.
Context: ... confirmed transactions. -gas_balance
: The current gas balance. The metrics c...(UNLIKELY_OPENING_PUNCTUATION)
- `gas_balance`: The current gas balance. | ||
The Executor naturally uses the Submitter because we want to asynchronously listen for events, process them, and fire off the respective transaction since many of the triggering events can happen simultanously. | ||
|
||
You will need a couple things in order to use the Transaciton submitter that signs with your own private key, config values, and more. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical issue.
Using ‘couple’ without ‘of’ is considered informal. Additionally, consider a shorter alternative to avoid wordiness.
- You will need a couple things in order to use the Transaciton submitter that signs with your own private key, config values, and more.
+ You will need a few things to use the Transaction submitter that signs with your own private key, config values, and more.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
You will need a couple things in order to use the Transaciton submitter that signs with your own private key, config values, and more. | |
You will need a few things to use the Transaction submitter that signs with your own private key, config values, and more. |
Tools
LanguageTool
[grammar] ~83-~83: Using ‘couple’ without ‘of’ is considered to be informal.
Context: ... happen simultanously. You will need a couple things in order to use the Transaciton submitt...(PLENTY_OF_NOUNS)
[style] ~83-~83: Consider a shorter alternative to avoid wordiness.
Context: ...anously. You will need a couple things in order to use the Transaciton submitter that sign...(IN_ORDER_TO_PREMIUM)
@@ -10,29 +10,200 @@ | |||
|
|||
## Key Features | |||
|
|||
- **Transaction Submission**: The main function of the module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. | |||
The module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. The nonce may then be used in the `GetSubmissionStatus` method to check the status: `Pending`, `Stored`, `Submitted`, `FailedSubmit`, `ReplacedOrConfirmed`, `Replaced`, `Confirmed`. [More about the `Status` enum](#status-enum) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical issue.
The sentence should be rephrased for clarity.
- The module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed.
+ The core feature of the module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
The module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. The nonce may then be used in the `GetSubmissionStatus` method to check the status: `Pending`, `Stored`, `Submitted`, `FailedSubmit`, `ReplacedOrConfirmed`, `Replaced`, `Confirmed`. [More about the `Status` enum](#status-enum) | |
The core feature of the module is the `SubmitTransaction` method, which returns a nonce and ensures that the transaction will eventually be confirmed. The nonce may then be used in the `GetSubmissionStatus` method to check the status: `Pending`, `Stored`, `Submitted`, `FailedSubmit`, `ReplacedOrConfirmed`, `Replaced`, `Confirmed`. [More about the `Status` enum](#status-enum) |
// Pending is the status of a tx that has not been processed yet. | ||
Pending Status = iota + 1 // Pending | ||
// Stored is the status of a tx that has been stored. | ||
Stored // Stored | ||
// Submitted is the status of a tx that has been submitted. | ||
Submitted // Submitted | ||
// FailedSubmit is the status of a tx that has failed to submit. | ||
FailedSubmit // Failed | ||
// ReplacedOrConfirmed is the status of a tx that has been replaced by a new tx or confirmed. The actual status will be set later. | ||
ReplacedOrConfirmed // ReplacedOrConfirmed | ||
// Replaced is the status of a tx that has been replaced by a new tx. | ||
Replaced // Replaced | ||
// Confirmed is the status of a tx that has been confirmed. | ||
Confirmed // Confirmed | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace hard tabs with spaces.
The constants for the Status
enum are well-defined, but hard tabs should be replaced with spaces.
- Pending Status = iota + 1 // Pending
- Stored // Stored
- Submitted // Submitted
- FailedSubmit // Failed
- ReplacedOrConfirmed // ReplacedOrConfirmed
- Replaced // Replaced
- Confirmed // Confirmed
+ Pending Status = iota + 1 // Pending
+ Stored // Stored
+ Submitted // Submitted
+ FailedSubmit // Failed
+ ReplacedOrConfirmed // ReplacedOrConfirmed
+ Replaced // Replaced
+ Confirmed // Confirmed
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// Pending is the status of a tx that has not been processed yet. | |
Pending Status = iota + 1 // Pending | |
// Stored is the status of a tx that has been stored. | |
Stored // Stored | |
// Submitted is the status of a tx that has been submitted. | |
Submitted // Submitted | |
// FailedSubmit is the status of a tx that has failed to submit. | |
FailedSubmit // Failed | |
// ReplacedOrConfirmed is the status of a tx that has been replaced by a new tx or confirmed. The actual status will be set later. | |
ReplacedOrConfirmed // ReplacedOrConfirmed | |
// Replaced is the status of a tx that has been replaced by a new tx. | |
Replaced // Replaced | |
// Confirmed is the status of a tx that has been confirmed. | |
Confirmed // Confirmed | |
) | |
// Pending is the status of a tx that has not been processed yet. | |
Pending Status = iota + 1 // Pending | |
// Stored is the status of a tx that has been stored. | |
Stored // Stored | |
// Submitted is the status of a tx that has been submitted. | |
Submitted // Submitted | |
// FailedSubmit is the status of a tx that has failed to submit. | |
FailedSubmit // Failed | |
// ReplacedOrConfirmed is the status of a tx that has been replaced by a new tx or confirmed. The actual status will be set later. | |
ReplacedOrConfirmed // ReplacedOrConfirmed | |
// Replaced is the status of a tx that has been replaced by a new tx. | |
Replaced // Replaced | |
// Confirmed is the status of a tx that has been confirmed. | |
Confirmed // Confirmed |
Tools
Markdownlint
181-181: Column: 1
Hard tabs(MD010, no-hard-tabs)
182-182: Column: 1
Hard tabs(MD010, no-hard-tabs)
183-183: Column: 1
Hard tabs(MD010, no-hard-tabs)
184-184: Column: 1
Hard tabs(MD010, no-hard-tabs)
185-185: Column: 1
Hard tabs(MD010, no-hard-tabs)
186-186: Column: 1
Hard tabs(MD010, no-hard-tabs)
187-187: Column: 1
Hard tabs(MD010, no-hard-tabs)
188-188: Column: 1
Hard tabs(MD010, no-hard-tabs)
189-189: Column: 1
Hard tabs(MD010, no-hard-tabs)
190-190: Column: 1
Hard tabs(MD010, no-hard-tabs)
191-191: Column: 1
Hard tabs(MD010, no-hard-tabs)
192-192: Column: 1
Hard tabs(MD010, no-hard-tabs)
193-193: Column: 1
Hard tabs(MD010, no-hard-tabs)
194-194: Column: 1
Hard tabs(MD010, no-hard-tabs)
Description
A clear and concise description of the features you're adding in this pull request.
Additional context
Add any other context about the problem you're solving.
Metadata
Summary by CodeRabbit
Documentation
SubmitTransaction
method details and added examples.New Features
Chores
@docusaurus/theme-mermaid
as a dependency inpackage.json
.8de2a05: docs preview link
697dc53: docs preview link
b440fa9: docs preview link
c9752fe: docs preview link
da1bc5b: docs preview link
398944b: docs preview link
4f2c1cd: docs preview link
f7e3572: docs preview link
6ded9c8: docs preview link
9daeca1: docs preview link