Commit 1cecae74 authored by heyubin's avatar heyubin

add by hyb fo rbug

parent fd952893
......@@ -88,10 +88,10 @@ func createMultiSigAccTransfer(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
address, _ := cmd.Flags().GetString("owners_addr")
addressArr := strings.Split(address, " ")
addressArr := strings.Fields(address)
weightstr, _ := cmd.Flags().GetString("owners_weight")
weightsArr := strings.Split(weightstr, " ")
weightsArr := strings.Fields(weightstr)
//校验owner和权重数量要一致
if len(addressArr) != len(weightsArr) {
......@@ -131,26 +131,15 @@ func createMultiSigAccTransfer(cmd *cobra.Command, args []string) {
return
}
//创建时最少设置两个owner
if ownerCount < mty.MinOwnersInit {
fmt.Fprintln(os.Stderr, "OwnerLessThanTwo")
return
}
execer, _ := cmd.Flags().GetString("execer")
symbol, _ := cmd.Flags().GetString("symbol")
err = mty.IsAssetsInvalid(execer, symbol)
dailylimit, _ := cmd.Flags().GetFloat64("daily_limit")
err = isValidDailylimit(dailylimit)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
dailylimit, _ := cmd.Flags().GetFloat64("daily_limit")
if dailylimit < 0 {
fmt.Fprintln(os.Stderr, "DailyLimitLessThanZero")
return
}
symboldailylimit := &mty.SymbolDailyLimit{
Symbol: symbol,
Execer: execer,
......@@ -385,16 +374,11 @@ func createMultiSigAccDailyLimitModifyTransfer(cmd *cobra.Command, args []string
symbol, _ := cmd.Flags().GetString("symbol")
dailylimit, _ := cmd.Flags().GetFloat64("daily_limit")
err := mty.IsAssetsInvalid(execer, symbol)
err := isValidDailylimit(dailylimit)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
if dailylimit < 0 {
fmt.Fprintln(os.Stderr, "DailyLimitLessThanZero")
return
}
assetsDailyLimit := &mty.SymbolDailyLimit{
Symbol: symbol,
Execer: execer,
......@@ -490,9 +474,8 @@ func createMultiSigAccTransferIn(cmd *cobra.Command, args []string) {
note, _ := cmd.Flags().GetString("note")
amount, _ := cmd.Flags().GetFloat64("amount")
err := mty.IsAssetsInvalid(execer, symbol)
if err != nil {
fmt.Fprintln(os.Stderr, err)
if float64(types.MaxCoin/types.Coin) < amount {
fmt.Fprintln(os.Stderr, types.ErrAmount)
return
}
params := &mty.MultiSigExecTransfer{
......@@ -548,9 +531,8 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) {
note, _ := cmd.Flags().GetString("note")
amount, _ := cmd.Flags().GetFloat64("amount")
err := mty.IsAssetsInvalid(execer, symbol)
if err != nil {
fmt.Fprintln(os.Stderr, err)
if float64(types.MaxCoin/types.Coin) < amount {
fmt.Fprintln(os.Stderr, types.ErrAmount)
return
}
params := &mty.MultiSigExecTransfer{
......@@ -681,6 +663,7 @@ func parseAccInfo(view interface{}) (interface{}, error) {
for _, dailyLimit := range res.DailyLimits {
dailyLimt := strconv.FormatFloat(float64(dailyLimit.DailyLimit)/float64(types.Coin), 'f', 4, 64)
spentToday := strconv.FormatFloat(float64(dailyLimit.SpentToday)/float64(types.Coin), 'f', 4, 64)
fmt.Println("parseAccInfo dailyLimt", dailyLimt)
dailyLimitResult := &mty.DailyLimitResult{
Symbol: dailyLimit.Symbol,
Execer: dailyLimit.Execer,
......@@ -1074,3 +1057,10 @@ func getMultiSigAccAllAddress(cmd *cobra.Command, args []string) {
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, rep)
ctx.Run()
}
func isValidDailylimit(dailylimit float64) error {
if dailylimit < 0 || float64(types.MaxCoin/types.Coin) < dailylimit {
return mty.ErrInvalidDailyLimit
}
return nil
}
......@@ -89,16 +89,7 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
return err
}
}
//MultiSigExecTransfer to 地址检测
if ato, ok := payload.(*mty.MultiSigExecTransfer); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
if err := mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol()); err != nil {
return err
}
}
//MultiSigOwnerOperate 交易的检测
if ato, ok := payload.(*mty.MultiSigOwnerOperate); ok {
err := checkOwnerOperateTx(ato)
......@@ -120,6 +111,16 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
}
}
//MultiSigExecTransfer to 地址检测
if ato, ok := payload.(*mty.MultiSigExecTransfer); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
if err := mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol()); err != nil {
return err
}
}
return nil
}
func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
......@@ -131,6 +132,8 @@ func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
return mty.ErrInvalidWeight
}
owners := ato.GetOwners()
ownersMap := make(map[string]bool)
//创建时requiredweight权重的值不能大于所有owner权重之和
for _, owner := range owners {
if owner != nil {
......@@ -140,6 +143,10 @@ func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
if owner.Weight == 0 {
return mty.ErrInvalidWeight
}
if ownersMap[owner.OwnerAddr] {
return mty.ErrOwnerExist
}
ownersMap[owner.OwnerAddr] = true
totalweight += owner.Weight
ownerCount = ownerCount + 1
}
......@@ -167,7 +174,6 @@ func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
}
func checkOwnerOperateTx(ato *mty.MultiSigOwnerOperate) error {
OldOwner := ato.GetOldOwner()
NewOwner := ato.GetNewOwner()
NewWeight := ato.GetNewWeight()
......
......@@ -33,7 +33,7 @@ var (
OneDaySecond int64 = 24 * 3600
MinOwnersInit int = 2
MinOwnersCount int = 1 //一个多重签名的账户最少要保留一个owner
MaxOwnersCount int = 50 //一个多重签名的账户最多拥有50个owner
MaxOwnersCount int = 20 //一个多重签名的账户最多拥有20个owner
Multisiglog = log15.New("module", MultiSigX)
)
......@@ -126,10 +126,24 @@ func IsAssetsInvalid(exec, symbol string) error {
}
//Symbol检测
symbolstr := strings.Split(symbol, ".")[len(strings.Split(symbol, "."))-1]
upperSymbol := strings.ToUpper(symbolstr)
if symbolstr != upperSymbol {
valid := validSymbol([]byte(symbolstr))
if !valid {
multisiglog.Error("IsAssetsInvalid", "symbol", symbol)
return ErrInvalidSymbol
}
return nil
}
func isUpperChar(a byte) bool {
res := (a <= 'Z' && a >= 'A')
return res
}
func validSymbol(cs []byte) bool {
for _, c := range cs {
if !isUpperChar(c) {
return false
}
}
return true
}
......@@ -39,4 +39,5 @@ var (
ErrInvalidSymbol = errors.New("ErrInvalidSymbol")
ErrInvalidExec = errors.New("ErrInvalidExec")
ErrInvalidWeight = errors.New("ErrInvalidWeight")
ErrInvalidDailyLimit = errors.New("ErrInvalidDailyLimit")
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment