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