Skip to content
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

Danwt/research 441 sketch genesis simulation tx #1549

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

danwt
Copy link
Contributor

@danwt danwt commented Nov 25, 2024

Description


Closes #XXX

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow-up issues.

PR review checkboxes:

I have...

  • Added a relevant changelog entry to the Unreleased section in CHANGELOG.md
  • Targeted PR against the correct branch
  • included the correct type prefix in the PR title
  • Linked to the GitHub issue with discussion and accepted design
  • Targets only one GitHub issue
  • Wrote unit and integration tests
  • Wrote relevant migration scripts if necessary
  • All CI checks have passed
  • Added relevant godoc comments
  • Updated the scripts for local run, e.g genesis_config_commands.sh if the PR changes parameters
  • Add an issue in the e2e-tests repo if necessary

SDK Checklist

  • Import/Export Genesis
  • Registered Invariants
  • Registered Events
  • Updated openapi.yaml
  • No usage of go map
  • No usage of time.Now()
  • Used fixed point arithmetic and not float arithmetic
  • Avoid panicking in Begin/End block as much as possible
  • No unexpected math Overflow
  • Used sendCoin and not SendCoins
  • Out-of-block compute is bounded
  • No serialized ID at the end of store keys
  • UInt to byte conversion should use BigEndian

Full security checklist here


For Reviewer:

  • Confirmed the correct type prefix in the PR title
  • Reviewers assigned
  • Confirmed all author checklist items have been addressed

After reviewer approval:

  • In case the PR targets the main branch, PR should not be squash merge in order to keep meaningful git history.
  • In case the PR targets a release branch, PR must be rebased.

Comment on lines +15 to +20
type validator struct {
rollapp GenesisBridgeData // what the rollapp sent over IBC
hub types.GenesisInfo // what the rollapp thinks is correct
channelID string // can use "channel-0" in simulation
rollappID string // the actual rollapp ID
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will do as much validation as I think is practical

Comment on lines -117 to 118
err = w.ValidateGenesisBridge(ra, genesisBridgeData.GenesisInfo)
actionItems, err := v.validateAndGetActionItems()
if err != nil {
l.Error("Validate genesis info.", "err", err)
return uevent.NewErrorAcknowledgement(ctx, errorsmod.Wrap(err, "validate genesis info"))
return uevent.NewErrorAcknowledgement(ctx, errorsmod.Wrap(err, "validate and get actionable data"))
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this does the bulk of validation

Comment on lines 120 to 132
w.transferKeeper.SetDenomTrace(ctx, actionItems.trace)
if err := w.denomKeeper.CreateDenomMetadata(ctx, actionItems.bankMeta); err != nil {
return uevent.NewErrorAcknowledgement(ctx, errorsmod.Wrap(err, "create denom metadata"))
}

// validate and handle the genesis transfer
err = w.handleGenesisTransfer(ctx, *ra, packet, genesisBridgeData.GenesisTransfer)
if err != nil {
l.Error("Handle genesis transfer.", "err", err)
if err := w.transferKeeper.OnRecvPacket(ctx, packet, actionItems.fungiDatas[0]); err != nil {
return uevent.NewErrorAcknowledgement(ctx, errorsmod.Wrap(err, "handle genesis transfer"))
}
for _, data := range actionItems.fungiDatas {
if err := w.transferKeeper.OnRecvPacket(ctx, packet, data); err != nil {
return uevent.NewErrorAcknowledgement(ctx, errorsmod.Wrap(err, "handle genesis transfer"))
}
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here, we still have three points of failure, even after validation

  1. Set denom trace in transfer keeper
  2. Recv the packet(s) downstream
  3. Create the metadata in denom keeper

It would be hard to simulate these because they need the real channel and packet. But given that we do so much validation beforehand, it might be a good practical solution

}

// validate genesis info against the expected data set on the rollapp
err = w.ValidateGenesisBridge(ra, genesisBridgeData.GenesisInfo)
actionItems, err := v.validateAndGetActionItems()
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We call this in two places

  1. In a query that dymint will call
  2. here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant