github.com/mavryk-network/mvgo@v1.19.9/rpc/tx_rollup.go (about)

     1  // Copyright (c) 2022 Blockwatch Data Inc.
     2  // Author: alex@blockwatch.cc
     3  
     4  package rpc
     5  
     6  import (
     7  	"encoding/json"
     8  
     9  	"github.com/mavryk-network/mvgo/mavryk"
    10  )
    11  
    12  // Ensure TxRollup implements the TypedOperation interface.
    13  var _ TypedOperation = (*TxRollup)(nil)
    14  
    15  // TxRollup represents any kind of rollup operation
    16  type TxRollup struct {
    17  	// common
    18  	Manager
    19  
    20  	// rollup address (used by most ops)
    21  	Rollup mavryk.Address `json:"rollup"`
    22  
    23  	// tx_rollup_origination has no data
    24  
    25  	// tx_rollup_submit_batch
    26  	Batch TxRollupBatch `json:"-"`
    27  
    28  	// tx_rollup_rejection
    29  	Reject TxRollupRejection `json:"-"`
    30  
    31  	// tx_rollup_dispatch_tickets
    32  	Dispatch TxRollupDispatch `json:"-"`
    33  
    34  	// tx_rollup_commit
    35  	Commit TxRollupCommit `json:"commitment"`
    36  }
    37  
    38  type TxRollupResult struct {
    39  	OriginatedRollup mavryk.Address `json:"originated_rollup"` // v013 tx_rollup_originate
    40  	Level            int64          `json:"level"`             // v013 ?? here or in metadata??
    41  }
    42  
    43  func (r *TxRollup) UnmarshalJSON(data []byte) error {
    44  	type alias *TxRollup
    45  	if err := json.Unmarshal(data, alias(r)); err != nil {
    46  		return err
    47  	}
    48  	switch r.Kind() {
    49  	case mavryk.OpTypeTxRollupSubmitBatch:
    50  		return json.Unmarshal(data, &r.Batch)
    51  	case mavryk.OpTypeTxRollupRejection:
    52  		return json.Unmarshal(data, &r.Reject)
    53  	case mavryk.OpTypeTxRollupDispatchTickets:
    54  		return json.Unmarshal(data, &r.Dispatch)
    55  	}
    56  	return nil
    57  }
    58  
    59  func (r *TxRollup) Target() mavryk.Address {
    60  	if r.Dispatch.TxRollup.IsValid() {
    61  		return r.Dispatch.TxRollup
    62  	}
    63  	return r.Rollup
    64  }
    65  
    66  type TxRollupBatch struct {
    67  	Content mavryk.HexBytes `json:"content"`
    68  }
    69  
    70  type TxRollupCommit struct {
    71  	Level           int64    `json:"level"`
    72  	Messages        []string `json:"messages"`
    73  	Predecessor     string   `json:"predecessor,omitempty"`
    74  	InboxMerkleRoot string   `json:"inbox_merkle_root"`
    75  }
    76  
    77  type TxRollupRejection struct {
    78  	Level                     int64           `json:"level"`
    79  	Message                   json.RawMessage `json:"commitment,omitempty"`
    80  	MessagePosition           mavryk.Z        `json:"message_position"`
    81  	MessagePath               []string        `json:"message_path,omitempty"`
    82  	MessageResultHash         string          `json:"message_result_hash"`
    83  	MessageResultPath         []string        `json:"message_result_path,omitempty"`
    84  	PreviousMessageResult     json.RawMessage `json:"previous_message_result,omitempty"`
    85  	PreviousMessageResultPath []string        `json:"previous_message_result_path,omitempty"`
    86  	Proof                     json.RawMessage `json:"proof,omitempty"`
    87  }
    88  
    89  type TxRollupDispatch struct {
    90  	Level        int64           `json:"level"`
    91  	TxRollup     mavryk.Address  `json:"tx_rollup"`
    92  	ContextHash  string          `json:"context_hash"`
    93  	MessageIndex int64           `json:"message_index"`
    94  	TicketsInfo  json.RawMessage `json:"tickets_info"`
    95  }