WaitForProposalToPass polls until a proposal passes or fails
( ctx context.Context, cl cclient.Client, proposalID uint64, timeout time.Duration, )
| 857 | |
| 858 | // WaitForProposalToPass polls until a proposal passes or fails |
| 859 | func WaitForProposalToPass( |
| 860 | ctx context.Context, |
| 861 | cl cclient.Client, |
| 862 | proposalID uint64, |
| 863 | timeout time.Duration, |
| 864 | ) error { |
| 865 | deadline := time.Now().Add(timeout) |
| 866 | |
| 867 | for time.Now().Before(deadline) { |
| 868 | proposal, err := cl.Query().Gov().Proposal(ctx, &govv1.QueryProposalRequest{ |
| 869 | ProposalId: proposalID, |
| 870 | }) |
| 871 | if err != nil { |
| 872 | return fmt.Errorf("failed to query proposal: %w", err) |
| 873 | } |
| 874 | |
| 875 | switch proposal.Proposal.Status { |
| 876 | case govv1.StatusPassed: |
| 877 | return nil |
| 878 | case govv1.StatusRejected: |
| 879 | return fmt.Errorf("proposal %d was rejected", proposalID) |
| 880 | case govv1.StatusFailed: |
| 881 | return fmt.Errorf("proposal %d failed", proposalID) |
| 882 | } |
| 883 | |
| 884 | time.Sleep(500 * time.Millisecond) |
| 885 | } |
| 886 | |
| 887 | return fmt.Errorf("timeout waiting for proposal %d to pass", proposalID) |
| 888 | } |
| 889 | |
| 890 | // GetCodeIDFromWasmEvents extracts the code ID from a store code transaction's events |
| 891 | func GetCodeIDFromWasmEvents(ctx context.Context, cl cclient.Client, proposalID uint64) (uint64, error) { |
no test coverage detected