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 }