github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/store/mainchain/validation/tx_handler_common.go (about)

     1  package validation
     2  
     3  import (
     4  	"math/big"
     5  
     6  	"github.com/sixexorg/magnetic-ring/core/mainchain/types"
     7  )
     8  
     9  func commonTxRoute(tx *types.Transaction) ([]*OpLog, bool) {
    10  	switch tx.TxType {
    11  	case types.TransferBox:
    12  		return AnalysisTansferBox(tx), true
    13  	case types.TransferEnergy:
    14  		return AnalysisTansferEnergy(tx), true
    15  	case types.CreateLeague:
    16  		return AnalysisCreateLeague(tx), true
    17  	case types.JoinLeague:
    18  		return AnalysisJoinLeague(tx), true
    19  	case types.RecycleMinbox:
    20  		return AnalysisRecycleMinbox(tx), true
    21  	case types.EnergyToLeague:
    22  		return AnalysisEnergyToLeague(tx), true
    23  	}
    24  	return nil, false
    25  }
    26  
    27  //data: from+fee
    28  func AnalysisMSG(tx *types.Transaction) []*OpLog {
    29  	op1 := oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume)
    30  	op2 := oplogPraseAddresUint64(tx.TxData.From, tx.TxData.Nonce, Account_nonce_add)
    31  	return []*OpLog{op1, op2}
    32  }
    33  
    34  //data:len from
    35  func AnalysisTansferBox(tx *types.Transaction) []*OpLog {
    36  	oplogs := make([]*OpLog, 0, len(tx.TxData.Froms.Tis)+len(tx.TxData.Tos.Tos)+1)
    37  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume))
    38  	for _, v := range tx.TxData.Froms.Tis {
    39  		oplogs = append(oplogs, oplogPraseAddressBigInt(v.Address, v.Amount, Account_box_sub))
    40  		oplogs = append(oplogs, oplogPraseAddresUint64(v.Address, v.Nonce, Account_nonce_add))
    41  	}
    42  	for _, v := range tx.TxData.Tos.Tos {
    43  		oplogs = append(oplogs, oplogPraseAddressBigInt(v.Address, v.Amount, Account_box_add))
    44  	}
    45  	return oplogs
    46  }
    47  
    48  //data:len from
    49  func AnalysisTansferEnergy(tx *types.Transaction) []*OpLog {
    50  	oplogs := make([]*OpLog, 0, len(tx.TxData.Froms.Tis)+len(tx.TxData.Tos.Tos)+1)
    51  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume))
    52  	for _, v := range tx.TxData.Froms.Tis {
    53  		oplogs = append(oplogs, oplogPraseAddressBigInt(v.Address, v.Amount, Account_energy_sub))
    54  		oplogs = append(oplogs, oplogPraseAddresUint64(v.Address, v.Nonce, Account_nonce_add))
    55  	}
    56  	for _, v := range tx.TxData.Tos.Tos {
    57  		oplogs = append(oplogs, oplogPraseAddressBigInt(v.Address, v.Amount, Account_energy_add))
    58  	}
    59  	return oplogs
    60  }
    61  func AnalysisCreateLeague(tx *types.Transaction) []*OpLog {
    62  	oplogs := make([]*OpLog, 0, 5)
    63  	oplogs = append(oplogs, oplogPraseAddresUint64(tx.TxData.From, tx.TxData.Nonce, Account_nonce_add))
    64  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume))
    65  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.MetaBox, Account_box_sub))
    66  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, big.NewInt(0).SetUint64(uint64(tx.TxData.MinBox)), Account_box_sub))
    67  	leagueId := types.ToLeagueAddress(tx)
    68  	oplogs = append(oplogs, oplogPraseCreateLeague(tx.TxData.From, leagueId, tx.TxData.NodeId, tx.TxData.MetaBox, tx.TxData.MinBox, tx.TxData.Rate, tx.TxData.Private, tx.Hash(), tx.TxData.Symbol))
    69  
    70  	return oplogs
    71  }
    72  func AnalysisJoinLeague(tx *types.Transaction) []*OpLog {
    73  	oplogs := make([]*OpLog, 0, 5)
    74  	oplogs = append(oplogs, oplogPraseAddresUint64(tx.TxData.From, tx.TxData.Nonce, Account_nonce_add))
    75  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume))
    76  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, big.NewInt(0).SetUint64(tx.TxData.MinBox), Account_box_sub))
    77  	oplogs = append(oplogs, oplogPraseAddresUint64(tx.TxData.LeagueId, tx.TxData.MinBox, League_minbox))
    78  	oplogs = append(oplogs, oplogPraseAddresAddress(tx.TxData.Account, tx.TxData.LeagueId, League_member_apply))
    79  	return oplogs
    80  }
    81  
    82  func AnalysisEnergyToLeague(tx *types.Transaction) []*OpLog {
    83  	oplogs := make([]*OpLog, 0, 3)
    84  	oplogs = append(oplogs, oplogPraseAddresUint64(tx.TxData.From, tx.TxData.Nonce, Account_nonce_add))
    85  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume))
    86  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Energy, Account_energy_sub))
    87  	return oplogs
    88  }
    89  
    90  func AnalysisRecycleMinbox(tx *types.Transaction) []*OpLog {
    91  	oplogs := make([]*OpLog, 0, 5)
    92  	oplogs = append(oplogs, oplogPraseAddresUint64(tx.TxData.From, tx.TxData.Nonce, Account_nonce_add))
    93  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, tx.TxData.Fee, Account_energy_consume))
    94  	oplogs = append(oplogs, oplogPraseAddresAddress(tx.TxData.From, tx.TxData.LeagueId, League_member_remove))
    95  	oplogs = append(oplogs, oplogPraseAddressBigInt(tx.TxData.From, big.NewInt(0).SetUint64(tx.TxData.MinBox), Account_box_add))
    96  	oplogs = append(oplogs, oplogPraseAddresUint64(tx.TxData.LeagueId, tx.TxData.MinBox, League_minbox))
    97  	return oplogs
    98  }