Commit 4e9e7064 authored by heyubin's avatar heyubin

add by hyb for bug

parent d23433af
......@@ -516,12 +516,11 @@ func createMultiSigAccTransferIn(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, types.ErrAmount)
return
}
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferTo{
Symbol: symbol,
Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4,
Note: note,
Execname: execer,
From: "",
To: to,
}
var res string
......@@ -573,7 +572,7 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, types.ErrAmount)
return
}
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferFrom{
Symbol: symbol,
Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4,
Note: note,
......
......@@ -201,7 +201,7 @@ func (a *action) MultiSigOwnerOperate(AccOwnerOperate *mty.MultiSigOwnerOperate)
//MultiSigExecTransferFrom 首先判断转账的额度是否大于每日限量,小于就直接执行交易,调用ExecTransferFrozen进行转账
//大于每日限量只需要将交易信息记录
//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecTransfer) (*types.Receipt, error) {
func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecTransferFrom) (*types.Receipt, error) {
//首先从statedb中获取MultiSigAccAddr的状态信息
multiSigAccAddr := multiSigAccTransfer.From
......@@ -247,7 +247,7 @@ func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecT
//MultiSigExecTransferTo 将合约中外部账户转账上的Execname.Symbol资产转到多重签名账户上,from:Addr --->to:multiSigAddr
// from地址使用tx中的签名的地址,payload中from地址不使用在 TransferTo交易中
func (a *action) MultiSigExecTransferTo(execTransfer *mty.MultiSigExecTransfer) (*types.Receipt, error) {
func (a *action) MultiSigExecTransferTo(execTransfer *mty.MultiSigExecTransferTo) (*types.Receipt, error) {
//from地址校验必须不是多重签名账户地址
multiSigAccFrom, _ := getMultiSigAccFromDb(a.db, a.fromaddr)
......@@ -728,7 +728,7 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
}
//确认并执行转账交易:区分submitTx和confirmtx阶段。
func (a *action) executeTransferTx(multiSigAcc *mty.MultiSig, newMultiSigTx *mty.MultiSigTx, transfer *mty.MultiSigExecTransfer, confOwner *mty.Owner, subOrConfirm bool) (*types.Receipt, error) {
func (a *action) executeTransferTx(multiSigAcc *mty.MultiSig, newMultiSigTx *mty.MultiSigTx, transfer *mty.MultiSigExecTransferFrom, confOwner *mty.Owner, subOrConfirm bool) (*types.Receipt, error) {
//获取对应资产的每日限额信息
var findindex int
......
......@@ -34,13 +34,13 @@ func (m *MultiSig) Exec_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, tx *ty
}
//Exec_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) Exec_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, index int) (*types.Receipt, error) {
func (m *MultiSig) Exec_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(m, tx, int32(index))
return action.MultiSigExecTransferTo(payload)
}
//Exec_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) Exec_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, index int) (*types.Receipt, error) {
func (m *MultiSig) Exec_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(m, tx, int32(index))
return action.MultiSigExecTransferFrom(payload)
}
......@@ -62,7 +62,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx
}
//ExecDelLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......@@ -75,7 +75,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExec
}
//ExecDelLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......
......@@ -65,7 +65,7 @@ func (m *MultiSig) ExecLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, t
}
//ExecLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......@@ -79,7 +79,7 @@ func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTra
}
//ExecLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) ExecLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......
......@@ -764,16 +764,15 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
//合约内转账到多重签名账户
func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) {
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferTo{
Symbol: Symbol,
Amount: InAmount,
Note: "testMultiSigAccExecTransferTo",
Execname: Asset,
From: AddrD,
To: multiSigAddr,
}
tx, _ := multiSigExecTransfer(params, false)
tx, _ := multiSigExecTransferTo(params, false)
tx, _ = signTx(tx, PrivKeyD)
receipt, err := driver.Exec(tx, env.index)
......@@ -837,7 +836,7 @@ func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env exec
//合约内转账到多重签名账户
func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) {
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferFrom{
Symbol: Symbol,
Amount: OutAmount,
Note: "testMultiSigAccExecTransferFrom",
......@@ -846,7 +845,7 @@ func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env ex
To: AddrD,
}
tx, _ := multiSigExecTransfer(params, true)
tx, _ := multiSigExecTransferFrom(params, true)
tx, _ = signTx(tx, PrivKeyB)
receipt, err := driver.Exec(tx, env.index)
......@@ -993,20 +992,24 @@ func multiSigConfirmTx(parm *mty.MultiSigConfirmTx) (*types.Transaction, error)
}
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
func multiSigExecTransfer(parm *mty.MultiSigExecTransfer, fromOrTo bool) (*types.Transaction, error) {
func multiSigExecTransferTo(parm *mty.MultiSigExecTransferTo, fromOrTo bool) (*types.Transaction, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
if fromOrTo {
multiSig := &mty.MultiSigAction{
Ty: mty.ActionMultiSigExecTransferFrom,
Value: &mty.MultiSigAction_MultiSigExecTransferFrom{MultiSigExecTransferFrom: parm},
Ty: mty.ActionMultiSigExecTransferTo,
Value: &mty.MultiSigAction_MultiSigExecTransferTo{MultiSigExecTransferTo: parm},
}
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
func multiSigExecTransferFrom(parm *mty.MultiSigExecTransferFrom, fromOrTo bool) (*types.Transaction, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
multiSig := &mty.MultiSigAction{
Ty: mty.ActionMultiSigExecTransferTo,
Value: &mty.MultiSigAction_MultiSigExecTransferTo{MultiSigExecTransferTo: parm},
Ty: mty.ActionMultiSigExecTransferFrom,
Value: &mty.MultiSigAction_MultiSigExecTransferFrom{MultiSigExecTransferFrom: parm},
}
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
......@@ -104,14 +104,23 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
return nil
}
//MultiSigExecTransfer 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransfer); ok {
//MultiSigExecTransferTo 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransferTo); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol())
}
//MultiSigExecTransferFrom 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransferFrom); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol())
}
return nil
}
func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
......@@ -377,16 +386,26 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm,
if err != nil {
panic(err)
}
multiSigTransfer := &mty.MultiSigExecTransfer{}
var to string
var execname string
var symbol string
var amount int64
//addr-->multiSigAccAddr
//multiSigAccAddr-->addr
if SubmitOrConfirm {
if action.Ty == mty.ActionMultiSigExecTransferTo && action.GetMultiSigExecTransferTo() != nil {
multiSigTransfer = action.GetMultiSigExecTransferTo()
tx := action.GetMultiSigExecTransferTo()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else if action.Ty == mty.ActionMultiSigExecTransferFrom && action.GetMultiSigExecTransferFrom() != nil {
multiSigTransfer = action.GetMultiSigExecTransferFrom()
tx := action.GetMultiSigExecTransferFrom()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else {
return set, nil
}
......@@ -409,16 +428,15 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm,
return nil, err
}
if multiSigTx.TxType == mty.TransferOperate {
multiSigTransfer = payload.GetMultiSigExecTransferFrom()
tx := payload.GetMultiSigExecTransferFrom()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else {
return set, nil
}
}
to := multiSigTransfer.To
execname := multiSigTransfer.Execname
symbol := multiSigTransfer.Symbol
amount := multiSigTransfer.Amount
kv, err := updateAddrReciver(m.GetLocalDB(), to, execname, symbol, amount, addOrRollback)
if err != nil {
return set, err
......
......@@ -77,8 +77,8 @@ message MultiSigAction {
MultiSigOwnerOperate multiSigOwnerOperate = 2;
MultiSigAccOperate multiSigAccOperate = 3;
MultiSigConfirmTx multiSigConfirmTx = 4;//确认或者撤销已确认
MultiSigExecTransfer multiSigExecTransferTo = 5;//合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
MultiSigExecTransfer multiSigExecTransferFrom = 6;//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
MultiSigExecTransferTo multiSigExecTransferTo = 5;//合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
MultiSigExecTransferFrom multiSigExecTransferFrom = 6;//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
}
int32 Ty = 7;
......@@ -109,10 +109,10 @@ message MultiSigAccOperate {
bool operateFlag = 4;
}
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr<--->addr之间的转账
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr--->addr之间的转账
//需要判断from地址是否是多重签名地址
//将MultiSig合约中from地址上execname+symbol的资产转移到to地址
message MultiSigExecTransfer {
message MultiSigExecTransferFrom {
string symbol = 1;
int64 amount = 2;
string note = 3;
......@@ -120,6 +120,16 @@ message MultiSigExecTransfer {
string to = 5;
string from = 6;
}
//多重签名合约中账户之间转币操作: addr --->MultiSigAddr之间的转账
//需要判断to地址是否是多重签名地址
//将MultiSig合约中签名地址上execname+symbol的资产转移到to地址
message MultiSigExecTransferTo {
string symbol = 1;
int64 amount = 2;
string note = 3;
string execname = 4;
string to = 5;
}
//多重签名账户withdraw交易的确认或者取消确认
//multisigaccaddr:多重签名账户地址
......
......@@ -107,11 +107,11 @@ func testCreateMultiSigConfirmTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) e
return jrpc.Call("multisig.MultiSigConfirmTx", params, nil)
}
func testCreateMultiSigAccTransferInCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := &mty.MultiSigExecTransfer{}
params := &mty.MultiSigExecTransferTo{}
return jrpc.Call("multisig.MultiSigAccTransferInTx", params, nil)
}
func testCreateMultiSigAccTransferOutCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := &mty.MultiSigExecTransfer{}
params := &mty.MultiSigExecTransferFrom{}
return jrpc.Call("multisig.MultiSigAccTransferOutTx", params, nil)
}
......
......@@ -65,7 +65,7 @@ func (c *Jrpc) MultiSigConfirmTx(param *mty.MultiSigConfirmTx, result *interface
}
// MultiSigAccTransferInTx :构造在多重签名合约中转账到多重签名账户的交易
func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result *interface{}) error {
func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransferTo, result *interface{}) error {
if param == nil {
return types.ErrInvalidParam
}
......@@ -78,7 +78,7 @@ func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result *
}
// MultiSigAccTransferOutTx :构造在多重签名合约中从多重签名账户转账的交易
func (c *Jrpc) MultiSigAccTransferOutTx(param *mty.MultiSigExecTransfer, result *interface{}) error {
func (c *Jrpc) MultiSigAccTransferOutTx(param *mty.MultiSigExecTransferFrom, result *interface{}) error {
if param == nil {
return types.ErrInvalidParam
}
......
This diff is collapsed.
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