X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=toolbar%2Ffederation%2Fdatabase%2Form%2Fcross_transaction.go;fp=toolbar%2Ffederation%2Fdatabase%2Form%2Fcross_transaction.go;h=9d2eb29700c42793e50f658504aec3468a0165d7;hp=0000000000000000000000000000000000000000;hb=6d682944981f67700aba26df064e3dd91d3603e5;hpb=a6be86325c56b458295c163200c295b43c44f2e0 diff --git a/toolbar/federation/database/orm/cross_transaction.go b/toolbar/federation/database/orm/cross_transaction.go new file mode 100644 index 00000000..9d2eb297 --- /dev/null +++ b/toolbar/federation/database/orm/cross_transaction.go @@ -0,0 +1,75 @@ +package orm + +import ( + "database/sql" + "encoding/json" + + "github.com/vapor/errors" + "github.com/vapor/toolbar/federation/common" + "github.com/vapor/toolbar/federation/types" +) + +type CrossTransaction struct { + ID uint64 `gorm:"primary_key"` + ChainID uint64 + SourceBlockHeight uint64 + SourceBlockTimestamp uint64 + SourceBlockHash string + SourceTxIndex uint64 + SourceMuxID string + SourceTxHash string + SourceRawTransaction string + DestBlockHeight sql.NullInt64 `sql:"default:null"` + DestBlockTimestamp sql.NullInt64 `sql:"default:null"` + DestBlockHash sql.NullString `sql:"default:null"` + DestTxIndex sql.NullInt64 `sql:"default:null"` + DestTxHash sql.NullString `sql:"default:null"` + Status uint8 + CreatedAt types.Timestamp + UpdatedAt types.Timestamp + + Chain *Chain `gorm:"foreignkey:ChainID"` + Reqs []*CrossTransactionReq +} + +func (c *CrossTransaction) MarshalJSON() ([]byte, error) { + var status string + switch c.Status { + case common.CrossTxPendingStatus: + status = common.CrossTxPendingStatusLabel + case common.CrossTxCompletedStatus: + status = common.CrossTxCompletedStatusLabel + default: + return nil, errors.New("unknown cross-chain tx status") + } + + return json.Marshal(&struct { + SourceChainName string `json:"source_chain_name"` + SourceBlockHeight uint64 `json:"source_block_height"` + SourceBlockTimestamp uint64 `json:"source_block_timestamp"` + SourceBlockHash string `json:"source_block_hash"` + SourceTxIndex uint64 `json:"source_tx_index"` + SourceTxHash string `json:"source_tx_hash"` + DestBlockHeight uint64 `json:"dest_block_height"` + DestBlockTimestamp uint64 `json:"dest_block_timestamp"` + DestBlockHash string `json:"dest_block_hash"` + DestTxIndex uint64 `json:"dest_tx_index"` + DestTxHash string `json:"dest_tx_hash"` + Status string `json:"status"` + Reqs []*CrossTransactionReq `json:"crosschain_requests"` + }{ + SourceChainName: c.Chain.Name, + SourceBlockHeight: c.SourceBlockHeight, + SourceBlockTimestamp: c.SourceBlockTimestamp, + SourceBlockHash: c.SourceBlockHash, + SourceTxIndex: c.SourceTxIndex, + SourceTxHash: c.SourceTxHash, + DestBlockHeight: uint64(c.DestBlockHeight.Int64), + DestBlockTimestamp: uint64(c.DestBlockTimestamp.Int64), + DestBlockHash: c.DestBlockHash.String, + DestTxIndex: uint64(c.DestTxIndex.Int64), + DestTxHash: c.DestTxHash.String, + Status: status, + Reqs: c.Reqs, + }) +}