Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
04d2dd7b
Commit
04d2dd7b
authored
Dec 10, 2018
by
heyubin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add by hyb for golint
parent
df6f79f2
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
111 additions
and
121 deletions
+111
-121
multisig.go
plugin/dapp/multisig/commands/multisig.go
+9
-5
doc.go
plugin/dapp/multisig/doc.go
+3
-3
action.go
plugin/dapp/multisig/executor/action.go
+43
-43
exec_test.go
plugin/dapp/multisig/executor/exec_test.go
+18
-19
multisig.go
plugin/dapp/multisig/executor/multisig.go
+14
-18
multisigdb.go
plugin/dapp/multisig/executor/multisigdb.go
+9
-11
query.go
plugin/dapp/multisig/executor/query.go
+4
-7
types.go
plugin/dapp/multisig/rpc/types.go
+1
-4
const.go
plugin/dapp/multisig/types/const.go
+7
-8
types.go
plugin/dapp/multisig/types/types.go
+3
-3
No files found.
plugin/dapp/multisig/commands/multisig.go
View file @
04d2dd7b
...
@@ -19,6 +19,7 @@ import (
...
@@ -19,6 +19,7 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
)
)
//MultiSigCmd :
func
MultiSigCmd
()
*
cobra
.
Command
{
func
MultiSigCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"multisig"
,
Use
:
"multisig"
,
...
@@ -32,6 +33,8 @@ func MultiSigCmd() *cobra.Command {
...
@@ -32,6 +33,8 @@ func MultiSigCmd() *cobra.Command {
)
)
return
cmd
return
cmd
}
}
//MultiSigAccountCmd :account相关的命令
func
MultiSigAccountCmd
()
*
cobra
.
Command
{
func
MultiSigAccountCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"account"
,
Use
:
"account"
,
...
@@ -52,6 +55,7 @@ func MultiSigAccountCmd() *cobra.Command {
...
@@ -52,6 +55,7 @@ func MultiSigAccountCmd() *cobra.Command {
return
cmd
return
cmd
}
}
//MultiSigOwnerCmd : owner相关的命令
func
MultiSigOwnerCmd
()
*
cobra
.
Command
{
func
MultiSigOwnerCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"owner"
,
Use
:
"owner"
,
...
@@ -67,6 +71,7 @@ func MultiSigOwnerCmd() *cobra.Command {
...
@@ -67,6 +71,7 @@ func MultiSigOwnerCmd() *cobra.Command {
return
cmd
return
cmd
}
}
//MultiSigTxCmd : tx交易相关的命令
func
MultiSigTxCmd
()
*
cobra
.
Command
{
func
MultiSigTxCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"tx"
,
Use
:
"tx"
,
...
@@ -134,8 +139,8 @@ func createMultiSigAccTransfer(cmd *cobra.Command, args []string) {
...
@@ -134,8 +139,8 @@ func createMultiSigAccTransfer(cmd *cobra.Command, args []string) {
//将字符转权重转换成uint64的值
//将字符转权重转换成uint64的值
var
weights
[]
uint64
var
weights
[]
uint64
var
totalweight
uint64
=
0
var
totalweight
uint64
var
ownerCount
int
=
0
var
ownerCount
int
for
_
,
weight
:=
range
weightsArr
{
for
_
,
weight
:=
range
weightsArr
{
ownerweight
,
err
:=
strconv
.
ParseInt
(
weight
,
10
,
64
)
ownerweight
,
err
:=
strconv
.
ParseInt
(
weight
,
10
,
64
)
if
err
!=
nil
||
ownerweight
<=
0
{
if
err
!=
nil
||
ownerweight
<=
0
{
...
@@ -149,7 +154,7 @@ func createMultiSigAccTransfer(cmd *cobra.Command, args []string) {
...
@@ -149,7 +154,7 @@ func createMultiSigAccTransfer(cmd *cobra.Command, args []string) {
var
owners
[]
*
mty
.
Owner
var
owners
[]
*
mty
.
Owner
for
index
,
addr
:=
range
addressArr
{
for
index
,
addr
:=
range
addressArr
{
if
addr
!=
""
{
if
addr
!=
""
{
owmer
:=
&
mty
.
Owner
{
addr
,
weights
[
index
]}
owmer
:=
&
mty
.
Owner
{
OwnerAddr
:
addr
,
Weight
:
weights
[
index
]}
owners
=
append
(
owners
,
owmer
)
owners
=
append
(
owners
,
owmer
)
}
}
}
}
...
@@ -581,7 +586,6 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) {
...
@@ -581,7 +586,6 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) {
ctx
.
RunWithoutMarshal
()
ctx
.
RunWithoutMarshal
()
}
}
//query信息
//GetMultiSigAccCountCmd 获取已经创建的多重签名账户数量
//GetMultiSigAccCountCmd 获取已经创建的多重签名账户数量
func
GetMultiSigAccCountCmd
()
*
cobra
.
Command
{
func
GetMultiSigAccCountCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
...
@@ -1061,7 +1065,7 @@ func parseAccAssets(view interface{}) (interface{}, error) {
...
@@ -1061,7 +1065,7 @@ func parseAccAssets(view interface{}) (interface{}, error) {
//GetMultiSigAccAllAddressCmd 获取指定地址创建的所有多重签名账户
//GetMultiSigAccAllAddressCmd 获取指定地址创建的所有多重签名账户
func
GetMultiSigAccAllAddressCmd
()
*
cobra
.
Command
{
func
GetMultiSigAccAllAddressCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"creat
er
"
,
Use
:
"creat
ure
"
,
Short
:
"get all multisig accounts created by the address"
,
Short
:
"get all multisig accounts created by the address"
,
Run
:
getMultiSigAccAllAddress
,
Run
:
getMultiSigAccAllAddress
,
}
}
...
...
plugin/dapp/multisig/doc.go
View file @
04d2dd7b
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Use of this source code is governed by a BSD-style
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// license that can be found in the LICENSE file.
package
multisig
/*
/*
多重签名合约实现功能:
多重签名合约实现功能:
...
@@ -29,7 +30,7 @@ Available Commands:
...
@@ -29,7 +30,7 @@ Available Commands:
assets get assets of multisig account
assets get assets of multisig account
count get multisig account count
count get multisig account count
create Create a multisig account transaction
create Create a multisig account transaction
creat
er
get all multisig accounts created by the address
creat
ure
get all multisig accounts created by the address
dailylimit Create a modify assets dailylimit transaction
dailylimit Create a modify assets dailylimit transaction
info get multisig account info
info get multisig account info
unspent get assets unspent today amount
unspent get assets unspent today amount
...
@@ -173,7 +174,7 @@ cli send multisig owner replace -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -n 166
...
@@ -173,7 +174,7 @@ cli send multisig owner replace -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -n 166
cli send multisig owner modify -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -o "166po3ghRbRu53hu8jBBQzddp7kUJ9Ynyf" -w 11 -k 1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK
cli send multisig owner modify -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -o "166po3ghRbRu53hu8jBBQzddp7kUJ9Ynyf" -w 11 -k 1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK
//获取指定地址创建的所有多重签名账户
//获取指定地址创建的所有多重签名账户
cli multisig account creat
er
-a 1DkrXbz2bK6XMpY4v9z2YUnhwWTXT6V5jd
cli multisig account creat
ure
-a 1DkrXbz2bK6XMpY4v9z2YUnhwWTXT6V5jd
// 获取指定账户上指定资产的每日余额
// 获取指定账户上指定资产的每日余额
cli multisig account unspent -a 13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47 -e coins -s BTY
cli multisig account unspent -a 13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47 -e coins -s BTY
...
@@ -193,4 +194,3 @@ cli send multisig tx confirm -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -i 9 -k "1
...
@@ -193,4 +194,3 @@ cli send multisig tx confirm -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -i 9 -k "1
cli send multisig tx confirm -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -i 9 -k "1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK"
cli send multisig tx confirm -a "13q53Ga1kquDCqx7EWF8FU94tLUK18Zd47" -i 9 -k "1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK"
*/
*/
package
multisig
plugin/dapp/multisig/executor/action.go
View file @
04d2dd7b
...
@@ -41,8 +41,8 @@ func newAction(t *MultiSig, tx *types.Transaction, index int32) *action {
...
@@ -41,8 +41,8 @@ func newAction(t *MultiSig, tx *types.Transaction, index int32) *action {
func
(
a
*
action
)
MultiSigAccCreate
(
accountCreate
*
mty
.
MultiSigAccCreate
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
MultiSigAccCreate
(
accountCreate
*
mty
.
MultiSigAccCreate
)
(
*
types
.
Receipt
,
error
)
{
var
logs
[]
*
types
.
ReceiptLog
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
var
kv
[]
*
types
.
KeyValue
var
totalweight
uint64
=
0
var
totalweight
uint64
var
ownerCount
int
=
0
var
ownerCount
int
var
dailyLimit
mty
.
DailyLimit
var
dailyLimit
mty
.
DailyLimit
//参数校验
//参数校验
...
@@ -148,9 +148,9 @@ func (a *action) MultiSigAccOperate(AccountOperate *mty.MultiSigAccOperate) (*ty
...
@@ -148,9 +148,9 @@ func (a *action) MultiSigAccOperate(AccountOperate *mty.MultiSigAccOperate) (*ty
}
}
}
}
//生成新的txid,并将此交易信息添加到Txs列表中
//生成新的txid,并将此交易信息添加到Txs列表中
txI
d
:=
multiSigAccount
.
TxCount
txI
D
:=
multiSigAccount
.
TxCount
newMultiSigTx
:=
&
mty
.
MultiSigTx
{}
newMultiSigTx
:=
&
mty
.
MultiSigTx
{}
newMultiSigTx
.
Txid
=
txI
d
newMultiSigTx
.
Txid
=
txI
D
newMultiSigTx
.
TxHash
=
hex
.
EncodeToString
(
a
.
txhash
)
newMultiSigTx
.
TxHash
=
hex
.
EncodeToString
(
a
.
txhash
)
newMultiSigTx
.
Executed
=
false
newMultiSigTx
.
Executed
=
false
newMultiSigTx
.
TxType
=
mty
.
AccountOperate
newMultiSigTx
.
TxType
=
mty
.
AccountOperate
...
@@ -185,9 +185,9 @@ func (a *action) MultiSigOwnerOperate(AccOwnerOperate *mty.MultiSigOwnerOperate)
...
@@ -185,9 +185,9 @@ func (a *action) MultiSigOwnerOperate(AccOwnerOperate *mty.MultiSigOwnerOperate)
}
}
//生成新的txid,并将此交易信息添加到Txs列表中
//生成新的txid,并将此交易信息添加到Txs列表中
txI
d
:=
multiSigAccount
.
TxCount
txI
D
:=
multiSigAccount
.
TxCount
newMultiSigTx
:=
&
mty
.
MultiSigTx
{}
newMultiSigTx
:=
&
mty
.
MultiSigTx
{}
newMultiSigTx
.
Txid
=
txI
d
newMultiSigTx
.
Txid
=
txI
D
newMultiSigTx
.
TxHash
=
hex
.
EncodeToString
(
a
.
txhash
)
newMultiSigTx
.
TxHash
=
hex
.
EncodeToString
(
a
.
txhash
)
newMultiSigTx
.
Executed
=
false
newMultiSigTx
.
Executed
=
false
newMultiSigTx
.
TxType
=
mty
.
OwnerOperate
newMultiSigTx
.
TxType
=
mty
.
OwnerOperate
...
@@ -231,9 +231,9 @@ func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecT
...
@@ -231,9 +231,9 @@ func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecT
return
nil
,
err
return
nil
,
err
}
}
//生成新的txid,并将此交易信息添加到Txs列表中
//生成新的txid,并将此交易信息添加到Txs列表中
txI
d
:=
multiSigAcc
.
TxCount
txI
D
:=
multiSigAcc
.
TxCount
newMultiSigTx
:=
&
mty
.
MultiSigTx
{}
newMultiSigTx
:=
&
mty
.
MultiSigTx
{}
newMultiSigTx
.
Txid
=
txI
d
newMultiSigTx
.
Txid
=
txI
D
newMultiSigTx
.
TxHash
=
hex
.
EncodeToString
(
a
.
txhash
)
newMultiSigTx
.
TxHash
=
hex
.
EncodeToString
(
a
.
txhash
)
newMultiSigTx
.
Executed
=
false
newMultiSigTx
.
Executed
=
false
newMultiSigTx
.
TxType
=
mty
.
TransferOperate
newMultiSigTx
.
TxType
=
mty
.
TransferOperate
...
@@ -355,37 +355,36 @@ func (a *action) MultiSigConfirmTx(ConfirmTx *mty.MultiSigConfirmTx) (*types.Rec
...
@@ -355,37 +355,36 @@ func (a *action) MultiSigConfirmTx(ConfirmTx *mty.MultiSigConfirmTx) (*types.Rec
multiSigTx
.
ConfirmedOwner
=
append
(
multiSigTx
.
ConfirmedOwner
,
owner
)
multiSigTx
.
ConfirmedOwner
=
append
(
multiSigTx
.
ConfirmedOwner
,
owner
)
}
}
multiSigTxOwner
:=
&
mty
.
MultiSigTxOwner
{
multiSigAccAddr
,
ConfirmTx
.
TxId
,
owner
}
multiSigTxOwner
:=
&
mty
.
MultiSigTxOwner
{
MultiSigAddr
:
multiSigAccAddr
,
Txid
:
ConfirmTx
.
TxId
,
ConfirmedOwner
:
owner
}
isConfirm
:=
isConfirmed
(
multiSigAcc
.
RequiredWeight
,
multiSigTx
)
isConfirm
:=
isConfirmed
(
multiSigAcc
.
RequiredWeight
,
multiSigTx
)
//权重未达到要求或者撤销确认交易,构造MultiSigConfirmTx的receiptLog
//权重未达到要求或者撤销确认交易,构造MultiSigConfirmTx的receiptLog
if
!
isConfirm
||
!
ConfirmTx
.
ConfirmOrRevoke
{
if
!
isConfirm
||
!
ConfirmTx
.
ConfirmOrRevoke
{
return
a
.
confirmTransaction
(
multiSigTx
,
multiSigTxOwner
,
ConfirmTx
.
ConfirmOrRevoke
)
return
a
.
confirmTransaction
(
multiSigTx
,
multiSigTxOwner
,
ConfirmTx
.
ConfirmOrRevoke
)
}
else
{
}
//获取txhash对应交易详细信息
//获取txhash对应交易详细信息
tx
,
err
:=
getTxByHash
(
a
.
api
,
multiSigTx
.
TxHash
)
tx
,
err
:=
getTxByHash
(
a
.
api
,
multiSigTx
.
TxHash
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
payload
,
err
:=
getMultiSigTxPayload
(
tx
)
payload
,
err
:=
getMultiSigTxPayload
(
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
//根据不同的交易类型调用各自的处理函数,区分 操作owner/account 和转账的交易
//根据不同的交易类型调用各自的处理函数,区分 操作owner/account 和转账的交易
if
multiSigTx
.
TxType
==
mty
.
OwnerOperate
&&
payload
!=
nil
{
if
multiSigTx
.
TxType
==
mty
.
OwnerOperate
&&
payload
!=
nil
{
transfer
:=
payload
.
GetMultiSigOwnerOperate
()
transfer
:=
payload
.
GetMultiSigOwnerOperate
()
return
a
.
executeOwnerOperateTx
(
multiSigAcc
,
multiSigTx
,
transfer
,
owner
,
false
)
return
a
.
executeOwnerOperateTx
(
multiSigAcc
,
multiSigTx
,
transfer
,
owner
,
false
)
}
else
if
multiSigTx
.
TxType
==
mty
.
AccountOperate
{
}
else
if
multiSigTx
.
TxType
==
mty
.
AccountOperate
{
transfer
:=
payload
.
GetMultiSigAccOperate
()
transfer
:=
payload
.
GetMultiSigAccOperate
()
return
a
.
executeAccOperateTx
(
multiSigAcc
,
multiSigTx
,
transfer
,
owner
,
false
)
return
a
.
executeAccOperateTx
(
multiSigAcc
,
multiSigTx
,
transfer
,
owner
,
false
)
}
else
if
multiSigTx
.
TxType
==
mty
.
TransferOperate
{
}
else
if
multiSigTx
.
TxType
==
mty
.
TransferOperate
{
transfer
:=
payload
.
GetMultiSigExecTransferFrom
()
transfer
:=
payload
.
GetMultiSigExecTransferFrom
()
return
a
.
executeTransferTx
(
multiSigAcc
,
multiSigTx
,
transfer
,
owner
,
mty
.
IsConfirm
)
return
a
.
executeTransferTx
(
multiSigAcc
,
multiSigTx
,
transfer
,
owner
,
mty
.
IsConfirm
)
}
else
{
}
else
{
multisiglog
.
Error
(
"MultiSigConfirmTx:GetMultiSigTx"
,
"multiSigAccAddr"
,
multiSigAccAddr
,
"Confirm TxId"
,
ConfirmTx
.
TxId
,
"TxType unkown"
,
multiSigTx
.
TxType
)
multisiglog
.
Error
(
"MultiSigConfirmTx:GetMultiSigTx"
,
"multiSigAccAddr"
,
multiSigAccAddr
,
"Confirm TxId"
,
ConfirmTx
.
TxId
,
"TxType unknown"
,
multiSigTx
.
TxType
)
return
nil
,
mty
.
ErrTxTypeNoMatch
return
nil
,
mty
.
ErrTxTypeNoMatch
}
}
}
}
}
...
@@ -404,7 +403,7 @@ func (a *action) multiSigWeightModify(multiSigAccAddr string, newRequiredWeight
...
@@ -404,7 +403,7 @@ func (a *action) multiSigWeightModify(multiSigAccAddr string, newRequiredWeight
}
}
//首先获取所有owner的权重之和,新设置的newRequiredWeight不能大于owner的权重之和
//首先获取所有owner的权重之和,新设置的newRequiredWeight不能大于owner的权重之和
var
totalweight
uint64
=
0
var
totalweight
uint64
receiptLog
:=
&
types
.
ReceiptLog
{}
receiptLog
:=
&
types
.
ReceiptLog
{}
for
_
,
owner
:=
range
multiSigAccount
.
Owners
{
for
_
,
owner
:=
range
multiSigAccount
.
Owners
{
if
owner
!=
nil
{
if
owner
!=
nil
{
...
@@ -445,17 +444,18 @@ func (a *action) multiSigDailyLimitOperate(multiSigAccAddr string, dailylimit *m
...
@@ -445,17 +444,18 @@ func (a *action) multiSigDailyLimitOperate(multiSigAccAddr string, dailylimit *m
return
nil
,
nil
,
types
.
ErrAccountNotExist
return
nil
,
nil
,
types
.
ErrAccountNotExist
}
}
var
flag
bool
=
false
flag
:=
false
var
addOrModify
bool
=
false
var
addOrModify
bool
var
findindex
int
=
0
var
findindex
int
var
curDailyLimit
*
mty
.
DailyLimit
receiptLog
:=
&
types
.
ReceiptLog
{}
receiptLog
:=
&
types
.
ReceiptLog
{}
newSymbol
:=
dailylimit
.
Symbol
newSymbol
:=
dailylimit
.
Symbol
newExecer
:=
dailylimit
.
Execer
newExecer
:=
dailylimit
.
Execer
newDailyLimit
:=
dailylimit
.
DailyLimit
newDailyLimit
:=
dailylimit
.
DailyLimit
prevDailyLimit
:=
&
mty
.
DailyLimit
{
newSymbol
,
newExecer
,
0
,
0
,
0
}
prevDailyLimit
:=
&
mty
.
DailyLimit
{
Symbol
:
newSymbol
,
Execer
:
newExecer
,
DailyLimit
:
0
,
SpentToday
:
0
,
LastDay
:
0
}
curDailyLimit
:=
&
mty
.
DailyLimit
{}
//首先遍历获取需要修改的symbol每日限额,没有找到就添加
//首先遍历获取需要修改的symbol每日限额,没有找到就添加
for
index
,
dailyLimit
:=
range
multiSigAccount
.
DailyLimits
{
for
index
,
dailyLimit
:=
range
multiSigAccount
.
DailyLimits
{
if
dailyLimit
.
Symbol
==
newSymbol
&&
dailyLimit
.
Execer
==
newExecer
{
if
dailyLimit
.
Symbol
==
newSymbol
&&
dailyLimit
.
Execer
==
newExecer
{
...
@@ -709,7 +709,7 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
...
@@ -709,7 +709,7 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
//组装receiptLog
//组装receiptLog
receiptLogTx
:=
&
mty
.
ReceiptMultiSigTx
{}
receiptLogTx
:=
&
mty
.
ReceiptMultiSigTx
{}
multiSigTxOwner
:=
&
mty
.
MultiSigTxOwner
{
multiSigTx
.
MultiSigAddr
,
multiSigTx
.
Txid
,
owner
}
multiSigTxOwner
:=
&
mty
.
MultiSigTxOwner
{
MultiSigAddr
:
multiSigTx
.
MultiSigAddr
,
Txid
:
multiSigTx
.
Txid
,
ConfirmedOwner
:
owner
}
receiptLogTx
.
MultiSigTxOwner
=
multiSigTxOwner
receiptLogTx
.
MultiSigTxOwner
=
multiSigTxOwner
receiptLogTx
.
PrevExecuted
=
prevExecutes
receiptLogTx
.
PrevExecuted
=
prevExecutes
...
@@ -732,8 +732,8 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
...
@@ -732,8 +732,8 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
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
.
MultiSigExecTransfer
,
confOwner
*
mty
.
Owner
,
subOrConfirm
bool
)
(
*
types
.
Receipt
,
error
)
{
//获取对应资产的每日限额信息
//获取对应资产的每日限额信息
var
findindex
int
=
0
var
findindex
int
curDailyLimit
:=
&
mty
.
DailyLimit
{
transfer
.
Symbol
,
transfer
.
Execname
,
0
,
0
,
0
}
curDailyLimit
:=
&
mty
.
DailyLimit
{
Symbol
:
transfer
.
Symbol
,
Execer
:
transfer
.
Execname
,
DailyLimit
:
0
,
SpentToday
:
0
,
LastDay
:
0
}
for
Index
,
dailyLimit
:=
range
multiSigAcc
.
DailyLimits
{
for
Index
,
dailyLimit
:=
range
multiSigAcc
.
DailyLimits
{
if
dailyLimit
.
Symbol
==
transfer
.
Symbol
&&
dailyLimit
.
Execer
==
transfer
.
Execname
{
if
dailyLimit
.
Symbol
==
transfer
.
Symbol
&&
dailyLimit
.
Execer
==
transfer
.
Execname
{
curDailyLimit
.
DailyLimit
=
dailyLimit
.
DailyLimit
curDailyLimit
.
DailyLimit
=
dailyLimit
.
DailyLimit
...
@@ -963,7 +963,7 @@ func (a *action) executeOwnerOperateTx(multiSigAccount *mty.MultiSig, newMultiSi
...
@@ -963,7 +963,7 @@ func (a *action) executeOwnerOperateTx(multiSigAccount *mty.MultiSig, newMultiSi
func
(
a
*
action
)
confirmTransaction
(
multiSigTx
*
mty
.
MultiSigTx
,
multiSigTxOwner
*
mty
.
MultiSigTxOwner
,
ConfirmOrRevoke
bool
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
confirmTransaction
(
multiSigTx
*
mty
.
MultiSigTx
,
multiSigTxOwner
*
mty
.
MultiSigTxOwner
,
ConfirmOrRevoke
bool
)
(
*
types
.
Receipt
,
error
)
{
receiptLog
:=
&
types
.
ReceiptLog
{}
receiptLog
:=
&
types
.
ReceiptLog
{}
receiptLogUnConfirmTx
:=
&
mty
.
ReceiptConfirmTx
{
multiSigTxOwner
,
ConfirmOrRevoke
}
receiptLogUnConfirmTx
:=
&
mty
.
ReceiptConfirmTx
{
MultiSigTxOwner
:
multiSigTxOwner
,
ConfirmeOrRevoke
:
ConfirmOrRevoke
}
if
ConfirmOrRevoke
{
if
ConfirmOrRevoke
{
receiptLog
.
Ty
=
mty
.
TyLogMultiSigConfirmTx
receiptLog
.
Ty
=
mty
.
TyLogMultiSigConfirmTx
}
else
{
}
else
{
...
...
plugin/dapp/multisig/executor/exec_test.go
View file @
04d2dd7b
...
@@ -50,7 +50,7 @@ var (
...
@@ -50,7 +50,7 @@ var (
NewRequiredweight
uint64
=
4
NewRequiredweight
uint64
=
4
CoinsBtyDailylimit
uint64
=
100
CoinsBtyDailylimit
uint64
=
100
NewCoinsBtyDailylimit
uint64
=
10
NewCoinsBtyDailylimit
uint64
=
10
PrintFlag
bool
=
false
PrintFlag
=
false
InAmount
int64
=
10
InAmount
int64
=
10
OutAmount
int64
=
5
OutAmount
int64
=
5
)
)
...
@@ -168,7 +168,7 @@ func testMultiSigAccCreate(t *testing.T, driver drivers.Driver, env execEnv, loc
...
@@ -168,7 +168,7 @@ func testMultiSigAccCreate(t *testing.T, driver drivers.Driver, env execEnv, loc
DailyLimit
:
symboldailylimit
,
DailyLimit
:
symboldailylimit
,
}
}
tx
,
err
:=
multiSigAccCreate
(
param
)
tx
,
_
:=
multiSigAccCreate
(
param
)
tx
,
_
=
signTx
(
tx
,
PrivKeyA
)
tx
,
_
=
signTx
(
tx
,
PrivKeyA
)
addr
:=
address
.
PubKeyToAddress
(
tx
.
Hash
())
addr
:=
address
.
PubKeyToAddress
(
tx
.
Hash
())
...
@@ -207,7 +207,7 @@ func testMultiSigOwnerAdd(t *testing.T, driver drivers.Driver, env execEnv, mult
...
@@ -207,7 +207,7 @@ func testMultiSigOwnerAdd(t *testing.T, driver drivers.Driver, env execEnv, mult
OperateFlag
:
mty
.
OwnerAdd
,
OperateFlag
:
mty
.
OwnerAdd
,
}
}
tx
,
err
:=
multiSigOwnerOperate
(
params
)
tx
,
_
:=
multiSigOwnerOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -271,7 +271,7 @@ func testMultiSigOwnerDel(t *testing.T, driver drivers.Driver, env execEnv, mult
...
@@ -271,7 +271,7 @@ func testMultiSigOwnerDel(t *testing.T, driver drivers.Driver, env execEnv, mult
OperateFlag
:
mty
.
OwnerDel
,
OperateFlag
:
mty
.
OwnerDel
,
}
}
tx
,
err
:=
multiSigOwnerOperate
(
params
)
tx
,
_
:=
multiSigOwnerOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -334,7 +334,7 @@ func testMultiSigOwnerModify(t *testing.T, driver drivers.Driver, env execEnv, m
...
@@ -334,7 +334,7 @@ func testMultiSigOwnerModify(t *testing.T, driver drivers.Driver, env execEnv, m
NewWeight
:
NewWeight
,
NewWeight
:
NewWeight
,
OperateFlag
:
mty
.
OwnerModify
,
OperateFlag
:
mty
.
OwnerModify
,
}
}
tx
,
err
:=
multiSigOwnerOperate
(
params
)
tx
,
_
:=
multiSigOwnerOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -406,7 +406,7 @@ func testMultiSigOwnerReplace(t *testing.T, driver drivers.Driver, env execEnv,
...
@@ -406,7 +406,7 @@ func testMultiSigOwnerReplace(t *testing.T, driver drivers.Driver, env execEnv,
NewOwner
:
AddrB
,
NewOwner
:
AddrB
,
OperateFlag
:
mty
.
OwnerReplace
,
OperateFlag
:
mty
.
OwnerReplace
,
}
}
tx
,
err
:=
multiSigOwnerOperate
(
params
)
tx
,
_
:=
multiSigOwnerOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -472,7 +472,7 @@ func testMultiSigAccWeightModify(t *testing.T, driver drivers.Driver, env execEn
...
@@ -472,7 +472,7 @@ func testMultiSigAccWeightModify(t *testing.T, driver drivers.Driver, env execEn
OperateFlag
:
mty
.
AccWeightOp
,
OperateFlag
:
mty
.
AccWeightOp
,
}
}
tx
,
err
:=
multiSigAccOperate
(
params
)
tx
,
_
:=
multiSigAccOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -542,7 +542,7 @@ func testMultiSigAccDailyLimitModify(t *testing.T, driver drivers.Driver, env ex
...
@@ -542,7 +542,7 @@ func testMultiSigAccDailyLimitModify(t *testing.T, driver drivers.Driver, env ex
OperateFlag
:
mty
.
AccDailyLimitOp
,
OperateFlag
:
mty
.
AccDailyLimitOp
,
}
}
tx
,
err
:=
multiSigAccOperate
(
params
)
tx
,
_
:=
multiSigAccOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -624,7 +624,7 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
...
@@ -624,7 +624,7 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
OperateFlag
:
mty
.
AccWeightOp
,
OperateFlag
:
mty
.
AccWeightOp
,
}
}
tx
,
err
:=
multiSigAccOperate
(
params
)
tx
,
_
:=
multiSigAccOperate
(
params
)
tx
,
_
=
signTx
(
tx
,
PrivKeyB
)
tx
,
_
=
signTx
(
tx
,
PrivKeyB
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -684,7 +684,7 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
...
@@ -684,7 +684,7 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
ConfirmOrRevoke
:
false
,
ConfirmOrRevoke
:
false
,
}
}
txConfirm
,
err
:=
multiSigConfirmTx
(
param
)
txConfirm
,
_
:=
multiSigConfirmTx
(
param
)
txConfirm
,
_
=
signTx
(
txConfirm
,
PrivKeyB
)
txConfirm
,
_
=
signTx
(
txConfirm
,
PrivKeyB
)
receipt
,
err
=
driver
.
Exec
(
txConfirm
,
env
.
index
)
receipt
,
err
=
driver
.
Exec
(
txConfirm
,
env
.
index
)
...
@@ -718,7 +718,7 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
...
@@ -718,7 +718,7 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
ConfirmOrRevoke
:
true
,
ConfirmOrRevoke
:
true
,
}
}
txConfirm
,
err
=
multiSigConfirmTx
(
para
)
txConfirm
,
_
=
multiSigConfirmTx
(
para
)
txConfirm
,
_
=
signTx
(
txConfirm
,
PrivKeyD
)
txConfirm
,
_
=
signTx
(
txConfirm
,
PrivKeyD
)
receipt
,
err
=
driver
.
Exec
(
txConfirm
,
env
.
index
)
receipt
,
err
=
driver
.
Exec
(
txConfirm
,
env
.
index
)
...
@@ -772,7 +772,7 @@ func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env exec
...
@@ -772,7 +772,7 @@ func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env exec
To
:
multiSigAddr
,
To
:
multiSigAddr
,
}
}
tx
,
err
:=
multiSigExecTransfer
(
params
,
false
)
tx
,
_
:=
multiSigExecTransfer
(
params
,
false
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
tx
,
_
=
signTx
(
tx
,
PrivKeyD
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -845,7 +845,7 @@ func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env ex
...
@@ -845,7 +845,7 @@ func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env ex
To
:
AddrD
,
To
:
AddrD
,
}
}
tx
,
err
:=
multiSigExecTransfer
(
params
,
true
)
tx
,
_
:=
multiSigExecTransfer
(
params
,
true
)
tx
,
_
=
signTx
(
tx
,
PrivKeyB
)
tx
,
_
=
signTx
(
tx
,
PrivKeyB
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
receipt
,
err
:=
driver
.
Exec
(
tx
,
env
.
index
)
...
@@ -1002,11 +1002,10 @@ func multiSigExecTransfer(parm *mty.MultiSigExecTransfer, fromOrTo bool) (*types
...
@@ -1002,11 +1002,10 @@ func multiSigExecTransfer(parm *mty.MultiSigExecTransfer, fromOrTo bool) (*types
Value
:
&
mty
.
MultiSigAction_MultiSigExecTransferFrom
{
MultiSigExecTransferFrom
:
parm
},
Value
:
&
mty
.
MultiSigAction_MultiSigExecTransferFrom
{
MultiSigExecTransferFrom
:
parm
},
}
}
return
types
.
CreateFormatTx
(
types
.
ExecName
(
mty
.
MultiSigX
),
types
.
Encode
(
multiSig
))
return
types
.
CreateFormatTx
(
types
.
ExecName
(
mty
.
MultiSigX
),
types
.
Encode
(
multiSig
))
}
else
{
multiSig
:=
&
mty
.
MultiSigAction
{
Ty
:
mty
.
ActionMultiSigExecTransferTo
,
Value
:
&
mty
.
MultiSigAction_MultiSigExecTransferTo
{
MultiSigExecTransferTo
:
parm
},
}
return
types
.
CreateFormatTx
(
types
.
ExecName
(
mty
.
MultiSigX
),
types
.
Encode
(
multiSig
))
}
}
multiSig
:=
&
mty
.
MultiSigAction
{
Ty
:
mty
.
ActionMultiSigExecTransferTo
,
Value
:
&
mty
.
MultiSigAction_MultiSigExecTransferTo
{
MultiSigExecTransferTo
:
parm
},
}
return
types
.
CreateFormatTx
(
types
.
ExecName
(
mty
.
MultiSigX
),
types
.
Encode
(
multiSig
))
}
}
plugin/dapp/multisig/executor/multisig.go
View file @
04d2dd7b
...
@@ -114,8 +114,8 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
...
@@ -114,8 +114,8 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
return
nil
return
nil
}
}
func
checkAccountCreateTx
(
ato
*
mty
.
MultiSigAccCreate
)
error
{
func
checkAccountCreateTx
(
ato
*
mty
.
MultiSigAccCreate
)
error
{
var
totalweight
uint64
=
0
var
totalweight
uint64
var
ownerCount
int
=
0
var
ownerCount
int
requiredWeight
:=
ato
.
GetRequiredWeight
()
requiredWeight
:=
ato
.
GetRequiredWeight
()
if
requiredWeight
==
0
{
if
requiredWeight
==
0
{
...
@@ -732,9 +732,8 @@ func (m *MultiSig) saveMultiSigTx(execTx mty.ReceiptMultiSigTx, addOrRollback bo
...
@@ -732,9 +732,8 @@ func (m *MultiSig) saveMultiSigTx(execTx mty.ReceiptMultiSigTx, addOrRollback bo
if
multiSigTx
!=
nil
{
if
multiSigTx
!=
nil
{
multisiglog
.
Error
(
"saveMultiSigTx"
,
"addOrRollback"
,
addOrRollback
,
"execTx"
,
execTx
)
multisiglog
.
Error
(
"saveMultiSigTx"
,
"addOrRollback"
,
addOrRollback
,
"execTx"
,
execTx
)
return
nil
,
mty
.
ErrTxidHasExist
return
nil
,
mty
.
ErrTxidHasExist
}
else
{
multiSigTx
=
temMultiSigTx
}
}
multiSigTx
=
temMultiSigTx
}
}
index
,
exist
:=
isOwnerConfirmedTx
(
multiSigTx
,
owner
.
OwnerAddr
)
index
,
exist
:=
isOwnerConfirmedTx
(
multiSigTx
,
owner
.
OwnerAddr
)
...
@@ -874,11 +873,11 @@ func (m *MultiSig) getMultiSigAccAssets(multiSigAddr string, assets *mty.Assets)
...
@@ -874,11 +873,11 @@ func (m *MultiSig) getMultiSigAccAssets(multiSigAddr string, assets *mty.Assets)
//获取指定owner的weight权重,owner所在的index,所有owners的weight权重之和,以及owner是否存在
//获取指定owner的weight权重,owner所在的index,所有owners的weight权重之和,以及owner是否存在
func
getOwnerInfoByAddr
(
multiSigAcc
*
mty
.
MultiSig
,
oldowner
string
)
(
uint64
,
int
,
uint64
,
int
,
bool
)
{
func
getOwnerInfoByAddr
(
multiSigAcc
*
mty
.
MultiSig
,
oldowner
string
)
(
uint64
,
int
,
uint64
,
int
,
bool
)
{
//首先遍历所有owners,确定对应的owner已近存在.
//首先遍历所有owners,确定对应的owner已近存在.
var
findindex
int
=
0
var
findindex
int
var
flag
bool
=
false
var
totalweight
uint64
var
totalweight
uint64
=
0
var
oldweight
uint64
var
oldweight
uint64
=
0
var
totalowner
int
var
totalowner
int
=
0
flag
:=
false
for
index
,
owner
:=
range
multiSigAcc
.
Owners
{
for
index
,
owner
:=
range
multiSigAcc
.
Owners
{
if
owner
.
OwnerAddr
==
oldowner
{
if
owner
.
OwnerAddr
==
oldowner
{
...
@@ -892,29 +891,27 @@ func getOwnerInfoByAddr(multiSigAcc *mty.MultiSig, oldowner string) (uint64, int
...
@@ -892,29 +891,27 @@ func getOwnerInfoByAddr(multiSigAcc *mty.MultiSig, oldowner string) (uint64, int
//owner不存在
//owner不存在
if
!
flag
{
if
!
flag
{
return
0
,
0
,
totalweight
,
totalowner
,
false
return
0
,
0
,
totalweight
,
totalowner
,
false
}
else
{
return
oldweight
,
findindex
,
totalweight
,
totalowner
,
true
}
}
return
oldweight
,
findindex
,
totalweight
,
totalowner
,
true
}
}
//确认某笔交易是否已经达到确认需要的权重
//确认某笔交易是否已经达到确认需要的权重
func
isConfirmed
(
requiredWeight
uint64
,
multiSigTx
*
mty
.
MultiSigTx
)
bool
{
func
isConfirmed
(
requiredWeight
uint64
,
multiSigTx
*
mty
.
MultiSigTx
)
bool
{
var
totalweight
uint64
=
0
var
totalweight
uint64
for
_
,
owner
:=
range
multiSigTx
.
ConfirmedOwner
{
for
_
,
owner
:=
range
multiSigTx
.
ConfirmedOwner
{
totalweight
+=
owner
.
Weight
totalweight
+=
owner
.
Weight
}
}
if
totalweight
>=
requiredWeight
{
if
totalweight
>=
requiredWeight
{
return
true
return
true
}
else
{
return
false
}
}
return
false
}
}
//确认某笔交易的额度是否满足每日限额,返回是否满足,以及新的newLastDay时间
//确认某笔交易的额度是否满足每日限额,返回是否满足,以及新的newLastDay时间
func
isUnderLimit
(
blocktime
int64
,
amount
uint64
,
dailyLimit
*
mty
.
DailyLimit
)
(
bool
,
int64
)
{
func
isUnderLimit
(
blocktime
int64
,
amount
uint64
,
dailyLimit
*
mty
.
DailyLimit
)
(
bool
,
int64
)
{
var
lastDay
int64
=
0
var
lastDay
int64
var
newSpentToday
uint64
=
0
var
newSpentToday
uint64
nowtime
:=
blocktime
//types.Now().Unix()
nowtime
:=
blocktime
//types.Now().Unix()
newSpentToday
=
dailyLimit
.
SpentToday
newSpentToday
=
dailyLimit
.
SpentToday
...
@@ -927,9 +924,8 @@ func isUnderLimit(blocktime int64, amount uint64, dailyLimit *mty.DailyLimit) (b
...
@@ -927,9 +924,8 @@ func isUnderLimit(blocktime int64, amount uint64, dailyLimit *mty.DailyLimit) (b
if
newSpentToday
+
amount
>
dailyLimit
.
DailyLimit
||
newSpentToday
+
amount
<
newSpentToday
{
if
newSpentToday
+
amount
>
dailyLimit
.
DailyLimit
||
newSpentToday
+
amount
<
newSpentToday
{
return
false
,
lastDay
return
false
,
lastDay
}
else
{
return
true
,
lastDay
}
}
return
true
,
lastDay
}
}
//确定这个地址是否是此multiSigAcc多重签名账户的owner,如果是owner的话并返回weight权重
//确定这个地址是否是此multiSigAcc多重签名账户的owner,如果是owner的话并返回weight权重
...
...
plugin/dapp/multisig/executor/multisigdb.go
View file @
04d2dd7b
...
@@ -119,12 +119,12 @@ func updateMultiSigAccCount(cachedb dbm.KVDB, isadd bool) (*types.KeyValue, erro
...
@@ -119,12 +119,12 @@ func updateMultiSigAccCount(cachedb dbm.KVDB, isadd bool) (*types.KeyValue, erro
return
nil
,
err
return
nil
,
err
}
}
if
isadd
{
if
isadd
{
count
+=
1
count
++
}
else
{
}
else
{
if
count
==
0
{
if
count
==
0
{
return
nil
,
mty
.
ErrAccCountNoMatch
return
nil
,
mty
.
ErrAccCountNoMatch
}
}
count
-=
1
count
--
}
}
setMultiSigAccCount
(
cachedb
,
count
)
setMultiSigAccCount
(
cachedb
,
count
)
//keyvalue
//keyvalue
...
@@ -156,9 +156,8 @@ func setMultiSigAccount(db dbm.KVDB, multiSig *mty.MultiSig, isadd bool) error {
...
@@ -156,9 +156,8 @@ func setMultiSigAccount(db dbm.KVDB, multiSig *mty.MultiSig, isadd bool) error {
valuebytes
:=
types
.
Encode
(
multiSig
)
valuebytes
:=
types
.
Encode
(
multiSig
)
if
isadd
{
if
isadd
{
return
db
.
Set
(
calcMultiSigAcc
(
multiSig
.
MultiSigAddr
),
valuebytes
)
return
db
.
Set
(
calcMultiSigAcc
(
multiSig
.
MultiSigAddr
),
valuebytes
)
}
else
{
return
db
.
Set
(
calcMultiSigAcc
(
multiSig
.
MultiSigAddr
),
nil
)
}
}
return
db
.
Set
(
calcMultiSigAcc
(
multiSig
.
MultiSigAddr
),
nil
)
}
}
//获取多重签名账户的kv对
//获取多重签名账户的kv对
...
@@ -191,11 +190,11 @@ func updateMultiSigAccList(db dbm.KVDB, addr string, index int64, isadd bool) (*
...
@@ -191,11 +190,11 @@ func updateMultiSigAccList(db dbm.KVDB, addr string, index int64, isadd bool) (*
db
.
Set
(
calcMultiSigAllAcc
(
index
),
[]
byte
(
addr
))
db
.
Set
(
calcMultiSigAllAcc
(
index
),
[]
byte
(
addr
))
kv
:=
&
types
.
KeyValue
{
Key
:
calcMultiSigAllAcc
(
index
),
Value
:
[]
byte
(
addr
)}
kv
:=
&
types
.
KeyValue
{
Key
:
calcMultiSigAllAcc
(
index
),
Value
:
[]
byte
(
addr
)}
return
kv
,
nil
return
kv
,
nil
}
else
{
// 删除
db
.
Set
(
calcMultiSigAllAcc
(
index
),
nil
)
kv
:=
&
types
.
KeyValue
{
Key
:
calcMultiSigAllAcc
(
index
),
Value
:
nil
}
return
kv
,
nil
}
}
// 删除
db
.
Set
(
calcMultiSigAllAcc
(
index
),
nil
)
kv
:=
&
types
.
KeyValue
{
Key
:
calcMultiSigAllAcc
(
index
),
Value
:
nil
}
return
kv
,
nil
}
}
func
getMultiSigAccList
(
db
dbm
.
KVDB
,
index
int64
)
(
string
,
error
)
{
func
getMultiSigAccList
(
db
dbm
.
KVDB
,
index
int64
)
(
string
,
error
)
{
...
@@ -236,9 +235,8 @@ func setMultiSigTx(db dbm.KVDB, multiSigTx *mty.MultiSigTx, isadd bool) error {
...
@@ -236,9 +235,8 @@ func setMultiSigTx(db dbm.KVDB, multiSigTx *mty.MultiSigTx, isadd bool) error {
valuebytes
:=
types
.
Encode
(
multiSigTx
)
valuebytes
:=
types
.
Encode
(
multiSigTx
)
if
isadd
{
if
isadd
{
return
db
.
Set
(
calcMultiSigAccTx
(
multiSigTx
.
MultiSigAddr
,
multiSigTx
.
Txid
),
valuebytes
)
return
db
.
Set
(
calcMultiSigAccTx
(
multiSigTx
.
MultiSigAddr
,
multiSigTx
.
Txid
),
valuebytes
)
}
else
{
return
db
.
Set
(
calcMultiSigAccTx
(
multiSigTx
.
MultiSigAddr
,
multiSigTx
.
Txid
),
nil
)
}
}
return
db
.
Set
(
calcMultiSigAccTx
(
multiSigTx
.
MultiSigAddr
,
multiSigTx
.
Txid
),
nil
)
}
}
//获取多重签名账户交易的kv对
//获取多重签名账户交易的kv对
...
@@ -334,7 +332,7 @@ func setMultiSigAddress(db dbm.KVDB, createAddr, multiSigAddr string, isadd bool
...
@@ -334,7 +332,7 @@ func setMultiSigAddress(db dbm.KVDB, createAddr, multiSigAddr string, isadd bool
}
}
var
found
=
false
var
found
=
false
var
foundindex
int
=
0
var
foundindex
int
for
index
,
addr
:=
range
accAddress
.
Address
{
for
index
,
addr
:=
range
accAddress
.
Address
{
if
multiSigAddr
==
addr
{
if
multiSigAddr
==
addr
{
found
=
true
found
=
true
...
...
plugin/dapp/multisig/executor/query.go
View file @
04d2dd7b
...
@@ -154,7 +154,7 @@ func (m *MultiSig) Query_MultiSigTxids(in *mty.ReqMultiSigTxids) (types.Message,
...
@@ -154,7 +154,7 @@ func (m *MultiSig) Query_MultiSigTxids(in *mty.ReqMultiSigTxids) (types.Message,
multisiglog
.
Error
(
"Query_MultiSigTxids:getMultiSigTx"
,
"addr"
,
addr
,
"txid"
,
txid
,
"err"
,
err
)
multisiglog
.
Error
(
"Query_MultiSigTxids:getMultiSigTx"
,
"addr"
,
addr
,
"txid"
,
txid
,
"err"
,
err
)
continue
continue
}
}
var
findTxid
uint64
=
0
var
findTxid
uint64
findTxid
=
txid
findTxid
=
txid
//查找Pending/Executed的交易txid
//查找Pending/Executed的交易txid
if
in
.
Pending
&&
!
multiSigTx
.
Executed
||
in
.
Executed
&&
multiSigTx
.
Executed
{
if
in
.
Pending
&&
!
multiSigTx
.
Executed
||
in
.
Executed
&&
multiSigTx
.
Executed
{
...
@@ -222,7 +222,7 @@ func (m *MultiSig) Query_MultiSigTxConfirmedWeight(in *mty.ReqMultiSigTxInfo) (t
...
@@ -222,7 +222,7 @@ func (m *MultiSig) Query_MultiSigTxConfirmedWeight(in *mty.ReqMultiSigTxInfo) (t
if
multiSigTx
==
nil
{
if
multiSigTx
==
nil
{
return
nil
,
mty
.
ErrTxidNotExist
return
nil
,
mty
.
ErrTxidNotExist
}
}
var
totalWeight
uint64
=
0
var
totalWeight
uint64
for
_
,
owner
:=
range
multiSigTx
.
ConfirmedOwner
{
for
_
,
owner
:=
range
multiSigTx
.
ConfirmedOwner
{
totalWeight
+=
owner
.
Weight
totalWeight
+=
owner
.
Weight
}
}
...
@@ -230,7 +230,7 @@ func (m *MultiSig) Query_MultiSigTxConfirmedWeight(in *mty.ReqMultiSigTxInfo) (t
...
@@ -230,7 +230,7 @@ func (m *MultiSig) Query_MultiSigTxConfirmedWeight(in *mty.ReqMultiSigTxInfo) (t
return
&
mty
.
Uint64
{
Data
:
totalWeight
},
nil
return
&
mty
.
Uint64
{
Data
:
totalWeight
},
nil
}
}
//Query_MultiSigAccUnSpentToday 获取指定资产当日还能使用的免多重签名的余额
//Query_MultiSigAccUnSpentToday
获取指定资产当日还能使用的免多重签名的余额
//输入:
//输入:
//message ReqMultiSigAccUnSpentToday {
//message ReqMultiSigAccUnSpentToday {
// string multiSigAddr = 1;
// string multiSigAddr = 1;
...
@@ -239,7 +239,6 @@ func (m *MultiSig) Query_MultiSigTxConfirmedWeight(in *mty.ReqMultiSigTxInfo) (t
...
@@ -239,7 +239,6 @@ func (m *MultiSig) Query_MultiSigTxConfirmedWeight(in *mty.ReqMultiSigTxInfo) (t
//返回:
//返回:
//message ReplyMultiSigAccUnSpentToday {
//message ReplyMultiSigAccUnSpentToday {
// uint64 amount = 1;
// uint64 amount = 1;
func
(
m
*
MultiSig
)
Query_MultiSigAccUnSpentToday
(
in
*
mty
.
ReqAccAssets
)
(
types
.
Message
,
error
)
{
func
(
m
*
MultiSig
)
Query_MultiSigAccUnSpentToday
(
in
*
mty
.
ReqAccAssets
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
if
in
==
nil
{
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
...
@@ -302,7 +301,7 @@ func (m *MultiSig) Query_MultiSigAccUnSpentToday(in *mty.ReqAccAssets) (types.Me
...
@@ -302,7 +301,7 @@ func (m *MultiSig) Query_MultiSigAccUnSpentToday(in *mty.ReqAccAssets) (types.Me
return
replyUnSpentAssets
,
nil
return
replyUnSpentAssets
,
nil
}
}
//Query_MultiSigAccAssets 获取多重签名账户上的所有资产,或者指定资产
//Query_MultiSigAccAssets
获取多重签名账户上的所有资产,或者指定资产
//输入:
//输入:
//message ReqAccAssets {
//message ReqAccAssets {
// string multiSigAddr = 1;
// string multiSigAddr = 1;
...
@@ -313,7 +312,6 @@ func (m *MultiSig) Query_MultiSigAccUnSpentToday(in *mty.ReqAccAssets) (types.Me
...
@@ -313,7 +312,6 @@ func (m *MultiSig) Query_MultiSigAccUnSpentToday(in *mty.ReqAccAssets) (types.Me
// Assets assets = 1;
// Assets assets = 1;
// int64 recvAmount = 2;
// int64 recvAmount = 2;
// Account account = 3;
// Account account = 3;
func
(
m
*
MultiSig
)
Query_MultiSigAccAssets
(
in
*
mty
.
ReqAccAssets
)
(
types
.
Message
,
error
)
{
func
(
m
*
MultiSig
)
Query_MultiSigAccAssets
(
in
*
mty
.
ReqAccAssets
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
if
in
==
nil
{
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
...
@@ -371,7 +369,6 @@ func (m *MultiSig) Query_MultiSigAccAssets(in *mty.ReqAccAssets) (types.Message,
...
@@ -371,7 +369,6 @@ func (m *MultiSig) Query_MultiSigAccAssets(in *mty.ReqAccAssets) (types.Message,
//createaddr
//createaddr
//返回:
//返回:
//[]string
//[]string
func
(
m
*
MultiSig
)
Query_MultiSigAccAllAddress
(
in
*
mty
.
ReqMultiSigAccInfo
)
(
types
.
Message
,
error
)
{
func
(
m
*
MultiSig
)
Query_MultiSigAccAllAddress
(
in
*
mty
.
ReqMultiSigAccInfo
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
if
in
==
nil
{
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
...
...
plugin/dapp/multisig/rpc/types.go
View file @
04d2dd7b
...
@@ -4,18 +4,15 @@
...
@@ -4,18 +4,15 @@
package
rpc
package
rpc
import
(
import
(
"github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/rpc/types"
"github.com/33cn/chain33/rpc/types"
)
)
var
log
=
log15
.
New
(
"module"
,
"multisig.rpc"
)
// Jrpc 申明Jrpc结构体
// Jrpc 申明Jrpc结构体
type
Jrpc
struct
{
type
Jrpc
struct
{
cli
*
channelClient
cli
*
channelClient
}
}
//
J
rpc 申明Grpc结构体
//
G
rpc 申明Grpc结构体
type
Grpc
struct
{
type
Grpc
struct
{
*
channelClient
*
channelClient
}
}
...
...
plugin/dapp/multisig/types/const.go
View file @
04d2dd7b
...
@@ -13,27 +13,26 @@ import (
...
@@ -13,27 +13,26 @@ import (
var
multisiglog
=
log15
.
New
(
"module"
,
"execs.multisig"
)
var
multisiglog
=
log15
.
New
(
"module"
,
"execs.multisig"
)
var
(
var
(
//OwnerAdd owner操作类型
OwnerAdd
uint64
=
1
OwnerAdd
uint64
=
1
OwnerDel
uint64
=
2
OwnerDel
uint64
=
2
OwnerModify
uint64
=
3
OwnerModify
uint64
=
3
OwnerReplace
uint64
=
4
OwnerReplace
uint64
=
4
//AccWeightOp 账户属性的操作
//AccWeightOp 账户属性的操作
AccWeightOp
bool
=
true
AccWeightOp
=
true
AccDailyLimitOp
bool
=
false
AccDailyLimitOp
=
false
//OwnerOperate 多重签名交易类型:转账,owner操作,account操作
//OwnerOperate 多重签名交易类型:转账,owner操作,account操作
OwnerOperate
uint64
=
1
OwnerOperate
uint64
=
1
AccountOperate
uint64
=
2
AccountOperate
uint64
=
2
TransferOperate
uint64
=
3
TransferOperate
uint64
=
3
//IsSubmit :
//IsSubmit :
IsSubmit
bool
=
true
IsSubmit
=
true
IsConfirm
bool
=
false
IsConfirm
=
false
MultiSigX
=
"multisig"
MultiSigX
=
"multisig"
OneDaySecond
int64
=
24
*
3600
OneDaySecond
int64
=
24
*
3600
MinOwnersInit
int
=
2
MinOwnersInit
=
2
MinOwnersCount
int
=
1
//一个多重签名的账户最少要保留一个owner
MinOwnersCount
=
1
//一个多重签名的账户最少要保留一个owner
MaxOwnersCount
int
=
20
//一个多重签名的账户最多拥有20个owner
MaxOwnersCount
=
20
//一个多重签名的账户最多拥有20个owner
Multisiglog
=
log15
.
New
(
"module"
,
MultiSigX
)
Multisiglog
=
log15
.
New
(
"module"
,
MultiSigX
)
)
)
...
...
plugin/dapp/multisig/types/types.go
View file @
04d2dd7b
...
@@ -12,7 +12,7 @@ import (
...
@@ -12,7 +12,7 @@ import (
func
init
()
{
func
init
()
{
types
.
AllowUserExec
=
append
(
types
.
AllowUserExec
,
[]
byte
(
MultiSigX
))
types
.
AllowUserExec
=
append
(
types
.
AllowUserExec
,
[]
byte
(
MultiSigX
))
types
.
RegistorExecutor
(
MultiSigX
,
NewType
())
types
.
RegistorExecutor
(
MultiSigX
,
NewType
())
types
.
RegisterDappFork
(
MultiSigX
,
"Enable"
,
1
)
types
.
RegisterDappFork
(
MultiSigX
,
"Enable"
,
0
)
}
}
// MultiSigType multisig合约结构体
// MultiSigType multisig合约结构体
...
@@ -87,7 +87,7 @@ func (m MultiSigType) ActionName(tx *types.Transaction) string {
...
@@ -87,7 +87,7 @@ func (m MultiSigType) ActionName(tx *types.Transaction) string {
var
g
MultiSigAction
var
g
MultiSigAction
err
:=
types
.
Decode
(
tx
.
Payload
,
&
g
)
err
:=
types
.
Decode
(
tx
.
Payload
,
&
g
)
if
err
!=
nil
{
if
err
!=
nil
{
return
"unkown-MultiSig-action-err"
return
"unk
n
own-MultiSig-action-err"
}
}
if
g
.
Ty
==
ActionMultiSigAccCreate
&&
g
.
GetMultiSigAccCreate
()
!=
nil
{
if
g
.
Ty
==
ActionMultiSigAccCreate
&&
g
.
GetMultiSigAccCreate
()
!=
nil
{
return
"MultiSigAccCreate"
return
"MultiSigAccCreate"
...
@@ -102,5 +102,5 @@ func (m MultiSigType) ActionName(tx *types.Transaction) string {
...
@@ -102,5 +102,5 @@ func (m MultiSigType) ActionName(tx *types.Transaction) string {
}
else
if
g
.
Ty
==
ActionMultiSigExecTransferFrom
&&
g
.
GetMultiSigExecTransferFrom
()
!=
nil
{
}
else
if
g
.
Ty
==
ActionMultiSigExecTransferFrom
&&
g
.
GetMultiSigExecTransferFrom
()
!=
nil
{
return
"MultiSigAccExecTransfer"
return
"MultiSigAccExecTransfer"
}
}
return
"unkown"
return
"unk
n
own"
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment