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
c7dfe374
Commit
c7dfe374
authored
Mar 25, 2020
by
harrylee
Committed by
vipwzw
Apr 04, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update accountmanager
parent
7275013e
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
241 additions
and
34 deletions
+241
-34
account_test.go
plugin/dapp/accountmanager/executor/account_test.go
+115
-22
accountdb.go
plugin/dapp/accountmanager/executor/accountdb.go
+0
-0
exec.go
plugin/dapp/accountmanager/executor/exec.go
+3
-2
exec_local.go
plugin/dapp/accountmanager/executor/exec_local.go
+36
-1
query.go
plugin/dapp/accountmanager/executor/query.go
+11
-1
tables.go
plugin/dapp/accountmanager/executor/tables.go
+4
-2
tables_test.go
plugin/dapp/accountmanager/executor/tables_test.go
+49
-3
accountmanager.proto
plugin/dapp/accountmanager/proto/accountmanager.proto
+21
-3
accountmanager.go
plugin/dapp/accountmanager/types/accountmanager.go
+2
-0
accountmanager.pb.go
plugin/dapp/accountmanager/types/accountmanager.pb.go
+0
-0
No files found.
plugin/dapp/accountmanager/executor/account_test.go
View file @
c7dfe374
...
@@ -85,7 +85,7 @@ func TestAccountManager(t *testing.T) {
...
@@ -85,7 +85,7 @@ func TestAccountManager(t *testing.T) {
}
}
// set config key
// set config key
item
:=
&
types
.
ConfigItem
{
item
:=
&
types
.
ConfigItem
{
Key
:
"mavl-manage-"
+
ConfNameActiveTime
,
Key
:
"mavl-manage-"
+
ConfNameActiveTime
,
Value
:
&
types
.
ConfigItem_Arr
{
Value
:
&
types
.
ConfigItem_Arr
{
Arr
:
&
types
.
ArrayConfig
{
Value
:
[]
string
{
"10"
}},
Arr
:
&
types
.
ArrayConfig
{
Value
:
[]
string
{
"10"
}},
},
},
...
@@ -93,7 +93,7 @@ func TestAccountManager(t *testing.T) {
...
@@ -93,7 +93,7 @@ func TestAccountManager(t *testing.T) {
stateDB
.
Set
([]
byte
(
item
.
Key
),
types
.
Encode
(
item
))
stateDB
.
Set
([]
byte
(
item
.
Key
),
types
.
Encode
(
item
))
item2
:=
&
types
.
ConfigItem
{
item2
:=
&
types
.
ConfigItem
{
Key
:
"mavl-manage-"
+
ConfNameManagerAddr
,
Key
:
"mavl-manage-"
+
ConfNameManagerAddr
,
Value
:
&
types
.
ConfigItem_Arr
{
Value
:
&
types
.
ConfigItem_Arr
{
Arr
:
&
types
.
ArrayConfig
{
Value
:
[]
string
{
string
(
Nodes
[
0
])}},
Arr
:
&
types
.
ArrayConfig
{
Value
:
[]
string
{
string
(
Nodes
[
0
])}},
},
},
...
@@ -101,31 +101,92 @@ func TestAccountManager(t *testing.T) {
...
@@ -101,31 +101,92 @@ func TestAccountManager(t *testing.T) {
stateDB
.
Set
([]
byte
(
item2
.
Key
),
types
.
Encode
(
item2
))
stateDB
.
Set
([]
byte
(
item2
.
Key
),
types
.
Encode
(
item2
))
item3
:=
&
types
.
ConfigItem
{
item3
:=
&
types
.
ConfigItem
{
Key
:
"mavl-manage-"
+
ConfNameLockTime
,
Key
:
"mavl-manage-"
+
ConfNameLockTime
,
Value
:
&
types
.
ConfigItem_Arr
{
Value
:
&
types
.
ConfigItem_Arr
{
Arr
:
&
types
.
ArrayConfig
{
Value
:
[]
string
{
"
15
"
}},
Arr
:
&
types
.
ArrayConfig
{
Value
:
[]
string
{
"
2
"
}},
},
},
}
}
stateDB
.
Set
([]
byte
(
item3
.
Key
),
types
.
Encode
(
item3
))
stateDB
.
Set
([]
byte
(
item3
.
Key
),
types
.
Encode
(
item3
))
//注册
//注册
tx1
,
err
:=
CreateRegister
(
&
et
.
Register
{
AccountID
:
"harrylee2015"
},
PrivKeyB
)
tx1
,
err
:=
CreateRegister
(
&
et
.
Register
{
AccountID
:
"harrylee2015"
},
PrivKeyB
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Error
(
err
)
t
.
Error
(
err
)
}
}
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx1
)
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx1
)
tx2
,
err
:=
CreateRegister
(
&
et
.
Register
{
AccountID
:
"harrylee2015"
},
PrivKeyC
)
tx2
,
err
:=
CreateRegister
(
&
et
.
Register
{
AccountID
:
"harrylee2015"
},
PrivKeyC
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx2
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx2
)
assert
.
Equal
(
t
,
err
,
et
.
ErrAccountIDExist
)
assert
.
Equal
(
t
,
err
,
et
.
ErrAccountIDExist
)
tx3
,
err
:=
CreateRegister
(
&
et
.
Register
{
AccountID
:
"harrylee2020"
},
PrivKeyC
)
tx3
,
err
:=
CreateRegister
(
&
et
.
Register
{
AccountID
:
"harrylee2020"
},
PrivKeyC
)
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx3
)
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx3
)
//转账
tx4
,
err
:=
CreateTransfer
(
&
et
.
Transfer
{
FromAccountID
:
"harrylee2015"
,
ToAccountID
:
"harrylee2020"
,
Amount
:
1e8
,
Asset
:
&
et
.
Asset
{
Execer
:
"coins"
,
Symbol
:
"bty"
}},
PrivKeyB
)
assert
.
Equal
(
t
,
err
,
nil
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx4
)
assert
.
Equal
(
t
,
err
,
nil
)
//重置公钥
tx5
,
err
:=
CreateReset
(
&
et
.
ResetKey
{
Addr
:
"1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
,
AccountID
:
"harrylee2015"
},
PrivKeyA
)
assert
.
Equal
(
t
,
err
,
nil
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx5
)
//在锁定期内撤回请求
tx6
,
err
:=
CreateApply
(
&
et
.
Apply
{
Op
:
et
.
RevokeReset
,
AccountID
:
"harrylee2015"
},
PrivKeyB
)
assert
.
Equal
(
t
,
err
,
nil
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx6
)
assert
.
Equal
(
t
,
err
,
nil
)
//重置公钥
tx5
,
err
=
CreateReset
(
&
et
.
ResetKey
{
Addr
:
"1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
,
AccountID
:
"harrylee2015"
},
PrivKeyA
)
assert
.
Equal
(
t
,
err
,
nil
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx5
)
time
.
Sleep
(
time
.
Second
)
//过了锁定期,申请生效
tx6
,
err
=
CreateApply
(
&
et
.
Apply
{
Op
:
et
.
EnforceReset
,
AccountID
:
"harrylee2015"
},
PrivKeyD
)
assert
.
Equal
(
t
,
err
,
nil
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx6
)
tx7
,
_
:=
CreateTransfer
(
&
et
.
Transfer
{
FromAccountID
:
"harrylee2015"
,
ToAccountID
:
"harrylee2015"
,
Amount
:
1e8
,
Asset
:
&
et
.
Asset
{
Execer
:
"coins"
,
Symbol
:
"bty"
}},
PrivKeyD
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx7
)
assert
.
Equal
(
t
,
err
,
nil
)
balance
,
err
:=
Exec_QueryBalanceByID
(
&
et
.
QueryBalanceByID
{
AccountID
:
"harrylee2015"
,
Asset
:
&
et
.
Asset
{
Symbol
:
"bty"
,
Execer
:
"coins"
}},
stateDB
,
kvdb
)
assert
.
Equal
(
t
,
err
,
nil
)
assert
.
Equal
(
t
,
balance
.
Balance
,
199
*
types
.
Coin
)
//将某个账户冻结
tx8
,
_
:=
CreateSupervise
(
&
et
.
Supervise
{
AccountIDs
:
[]
string
{
"harrylee2015"
},
Op
:
et
.
Freeze
,
},
PrivKeyA
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx8
)
assert
.
Equal
(
t
,
err
,
nil
)
//根据状态查询
accounts
,
err
:=
Exec_QueryAccountsByStatus
(
et
.
Frozen
,
stateDB
,
kvdb
)
assert
.
Equal
(
t
,
err
,
nil
)
assert
.
Equal
(
t
,
accounts
.
Accounts
[
0
]
.
Status
,
et
.
Frozen
)
balance
,
err
=
Exec_QueryBalanceByID
(
&
et
.
QueryBalanceByID
{
Asset
:
&
et
.
Asset
{
Execer
:
"coins"
,
Symbol
:
"bty"
},
AccountID
:
"harrylee2015"
},
stateDB
,
kvdb
)
assert
.
Equal
(
t
,
err
,
nil
)
assert
.
Equal
(
t
,
balance
.
Frozen
,
199
*
types
.
Coin
)
tx4
,
err
:=
CreateTransfer
(
&
et
.
Transfer
{
FromAccountID
:
"harrylee2015"
,
ToAccountID
:
"harrylee2020"
,
Amount
:
1e8
,
Asset
:&
et
.
Asset
{
Execer
:
"coins"
,
Symbol
:
"bty"
}},
PrivKeyB
)
//解冻账户
if
err
!=
nil
{
tx9
,
_
:=
CreateSupervise
(
&
et
.
Supervise
{
AccountIDs
:
[]
string
{
"harrylee2015"
},
Op
:
et
.
UnFreeze
,
},
PrivKeyA
)
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx9
)
assert
.
Equal
(
t
,
err
,
nil
)
//根据状态查询
accounts
,
err
=
Exec_QueryAccountsByStatus
(
et
.
Frozen
,
stateDB
,
kvdb
)
assert
.
NotEqual
(
t
,
err
,
nil
)
balance
,
err
=
Exec_QueryBalanceByID
(
&
et
.
QueryBalanceByID
{
Asset
:
&
et
.
Asset
{
Execer
:
"coins"
,
Symbol
:
"bty"
},
AccountID
:
"harrylee2015"
},
stateDB
,
kvdb
)
assert
.
Equal
(
t
,
err
,
nil
)
assert
.
Equal
(
t
,
balance
.
Balance
,
199
*
types
.
Coin
)
//过期账户查询
time
.
Sleep
(
10
*
time
.
Second
)
t
.
Log
(
time
.
Now
()
.
Unix
())
accs
,
err
:=
Exec_QueryExpiredAccounts
(
time
.
Now
()
.
Unix
(),
stateDB
,
kvdb
)
if
err
!=
nil
{
t
.
Error
(
err
)
t
.
Error
(
err
)
}
}
err
=
Exec_Block
(
t
,
stateDB
,
kvdb
,
env
,
tx4
)
t
.
Log
(
accs
)
assert
.
Equal
(
t
,
err
,
nil
)
}
}
func
CreateRegister
(
register
*
et
.
Register
,
privKey
string
)
(
tx
*
types
.
Transaction
,
err
error
)
{
func
CreateRegister
(
register
*
et
.
Register
,
privKey
string
)
(
tx
*
types
.
Transaction
,
err
error
)
{
...
@@ -206,7 +267,7 @@ func CreateSupervise(supervise *et.Supervise, privKey string) (tx *types.Transac
...
@@ -206,7 +267,7 @@ func CreateSupervise(supervise *et.Supervise, privKey string) (tx *types.Transac
func
CreateApply
(
apply
*
et
.
Apply
,
privKey
string
)
(
tx
*
types
.
Transaction
,
err
error
)
{
func
CreateApply
(
apply
*
et
.
Apply
,
privKey
string
)
(
tx
*
types
.
Transaction
,
err
error
)
{
ety
:=
types
.
LoadExecutorType
(
et
.
AccountmanagerX
)
ety
:=
types
.
LoadExecutorType
(
et
.
AccountmanagerX
)
tx
,
err
=
ety
.
Create
(
et
.
Name
Supervise
Action
,
apply
)
tx
,
err
=
ety
.
Create
(
et
.
Name
Apply
Action
,
apply
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -222,6 +283,7 @@ func CreateApply(apply *et.Apply, privKey string) (tx *types.Transaction, err er
...
@@ -222,6 +283,7 @@ func CreateApply(apply *et.Apply, privKey string) (tx *types.Transaction, err er
}
}
return
tx
,
nil
return
tx
,
nil
}
}
//模拟区块中交易得执行过程
//模拟区块中交易得执行过程
func
Exec_Block
(
t
*
testing
.
T
,
stateDB
db
.
DB
,
kvdb
db
.
KVDB
,
env
*
execEnv
,
txs
...*
types
.
Transaction
)
error
{
func
Exec_Block
(
t
*
testing
.
T
,
stateDB
db
.
DB
,
kvdb
db
.
KVDB
,
env
*
execEnv
,
txs
...*
types
.
Transaction
)
error
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
...
@@ -285,6 +347,22 @@ func Exec_QueryAccountByID(accountID string, stateDB db.KV, kvdb db.KVDB) (*et.A
...
@@ -285,6 +347,22 @@ func Exec_QueryAccountByID(accountID string, stateDB db.KV, kvdb db.KVDB) (*et.A
return
msg
.
(
*
et
.
Account
),
err
return
msg
.
(
*
et
.
Account
),
err
}
}
func
Exec_QueryAccountByAddr
(
addr
string
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
Account
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
newAccountmanager
()
q
:=
queue
.
New
(
"channel"
)
q
.
SetConfig
(
cfg
)
api
,
_
:=
client
.
New
(
q
.
Client
(),
nil
)
exec
.
SetAPI
(
api
)
exec
.
SetStateDB
(
stateDB
)
exec
.
SetLocalDB
(
kvdb
)
msg
,
err
:=
exec
.
Query
(
et
.
FuncNameQueryAccountByAddr
,
types
.
Encode
(
&
et
.
QueryAccountByAddr
{
Addr
:
addr
}))
if
err
!=
nil
{
return
nil
,
err
}
return
msg
.
(
*
et
.
Account
),
err
}
func
Exec_QueryAccountsByStatus
(
status
int32
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
ReplyAccountList
,
error
)
{
func
Exec_QueryAccountsByStatus
(
status
int32
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
ReplyAccountList
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
...
@@ -296,14 +374,14 @@ func Exec_QueryAccountsByStatus(status int32, stateDB db.KV, kvdb db.KVDB) (*et.
...
@@ -296,14 +374,14 @@ func Exec_QueryAccountsByStatus(status int32, stateDB db.KV, kvdb db.KVDB) (*et.
exec
.
SetAPI
(
api
)
exec
.
SetAPI
(
api
)
exec
.
SetStateDB
(
stateDB
)
exec
.
SetStateDB
(
stateDB
)
exec
.
SetLocalDB
(
kvdb
)
exec
.
SetLocalDB
(
kvdb
)
msg
,
err
:=
exec
.
Query
(
et
.
FuncNameQueryAccountsByStatus
,
types
.
Encode
(
&
et
.
QueryAccountsByStatus
{
Status
:
status
}))
msg
,
err
:=
exec
.
Query
(
et
.
FuncNameQueryAccountsByStatus
,
types
.
Encode
(
&
et
.
QueryAccountsByStatus
{
Status
:
status
}))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
msg
.
(
*
et
.
ReplyAccountList
),
err
return
msg
.
(
*
et
.
ReplyAccountList
),
err
}
}
func
Exec_Query
ExpiredAccounts
(
status
int32
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
ReplyAccountList
,
error
)
{
func
Exec_Query
BalanceByID
(
in
*
et
.
QueryBalanceByID
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
Balance
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
newAccountmanager
()
exec
:=
newAccountmanager
()
...
@@ -313,14 +391,29 @@ func Exec_QueryExpiredAccounts(status int32, stateDB db.KV, kvdb db.KVDB) (*et.R
...
@@ -313,14 +391,29 @@ func Exec_QueryExpiredAccounts(status int32, stateDB db.KV, kvdb db.KVDB) (*et.R
exec
.
SetAPI
(
api
)
exec
.
SetAPI
(
api
)
exec
.
SetStateDB
(
stateDB
)
exec
.
SetStateDB
(
stateDB
)
exec
.
SetLocalDB
(
kvdb
)
exec
.
SetLocalDB
(
kvdb
)
msg
,
err
:=
exec
.
Query
(
et
.
FuncNameQuery
ExpiredAccounts
,
types
.
Encode
(
&
et
.
QueryExpiredAccounts
{}
))
msg
,
err
:=
exec
.
Query
(
et
.
FuncNameQuery
BalanceByID
,
types
.
Encode
(
in
))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
msg
.
(
*
et
.
ReplyAccountList
),
err
return
msg
.
(
*
et
.
Balance
),
err
}
}
func
Exec_QueryExpiredAccounts
(
expiredtime
int64
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
ReplyAccountList
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
newAccountmanager
()
q
:=
queue
.
New
(
"channel"
)
q
.
SetConfig
(
cfg
)
api
,
_
:=
client
.
New
(
q
.
Client
(),
nil
)
exec
.
SetAPI
(
api
)
exec
.
SetStateDB
(
stateDB
)
exec
.
SetLocalDB
(
kvdb
)
msg
,
err
:=
exec
.
Query
(
et
.
FuncNameQueryExpiredAccounts
,
types
.
Encode
(
&
et
.
QueryExpiredAccounts
{
ExpiredTime
:
expiredtime
,
Direction
:
0
}))
if
err
!=
nil
{
return
nil
,
err
}
return
msg
.
(
*
et
.
ReplyAccountList
),
err
}
func
signTx
(
tx
*
types
.
Transaction
,
hexPrivKey
string
)
(
*
types
.
Transaction
,
error
)
{
func
signTx
(
tx
*
types
.
Transaction
,
hexPrivKey
string
)
(
*
types
.
Transaction
,
error
)
{
signType
:=
types
.
SECP256K1
signType
:=
types
.
SECP256K1
c
,
err
:=
crypto
.
New
(
types
.
GetSignName
(
""
,
signType
))
c
,
err
:=
crypto
.
New
(
types
.
GetSignName
(
""
,
signType
))
...
...
plugin/dapp/accountmanager/executor/accountdb.go
View file @
c7dfe374
This diff is collapsed.
Click to expand it.
plugin/dapp/accountmanager/executor/exec.go
View file @
c7dfe374
...
@@ -15,7 +15,7 @@ func (a *accountmanager) Exec_Register(payload *aty.Register, tx *types.Transact
...
@@ -15,7 +15,7 @@ func (a *accountmanager) Exec_Register(payload *aty.Register, tx *types.Transact
return
action
.
Register
(
payload
)
return
action
.
Register
(
payload
)
}
}
func
(
a
*
accountmanager
)
Exec_Reset
k
ey
(
payload
*
aty
.
ResetKey
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
accountmanager
)
Exec_Reset
K
ey
(
payload
*
aty
.
ResetKey
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
action
:=
NewAction
(
a
,
tx
,
index
)
action
:=
NewAction
(
a
,
tx
,
index
)
return
action
.
Reset
(
payload
)
return
action
.
Reset
(
payload
)
}
}
...
@@ -31,5 +31,6 @@ func (a *accountmanager) Exec_Supervise(payload *aty.Supervise, tx *types.Transa
...
@@ -31,5 +31,6 @@ func (a *accountmanager) Exec_Supervise(payload *aty.Supervise, tx *types.Transa
}
}
func
(
a
*
accountmanager
)
Exec_Apply
(
payload
*
aty
.
Apply
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
accountmanager
)
Exec_Apply
(
payload
*
aty
.
Apply
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
return
nil
,
types
.
ErrActionNotSupport
action
:=
NewAction
(
a
,
tx
,
index
)
return
action
.
Apply
(
payload
)
}
}
plugin/dapp/accountmanager/executor/exec_local.go
View file @
c7dfe374
...
@@ -94,7 +94,20 @@ func (a *accountmanager) ExecLocal_Transfer(payload *et.Transfer, tx *types.Tran
...
@@ -94,7 +94,20 @@ func (a *accountmanager) ExecLocal_Transfer(payload *et.Transfer, tx *types.Tran
for
_
,
log
:=
range
receiptData
.
Logs
{
for
_
,
log
:=
range
receiptData
.
Logs
{
switch
log
.
Ty
{
switch
log
.
Ty
{
case
et
.
TyResetLog
:
case
et
.
TyResetLog
:
//账户信息不变更,不需要处理
receipt
:=
&
et
.
TransferReceipt
{}
if
err
:=
types
.
Decode
(
log
.
Log
,
receipt
);
err
!=
nil
{
return
nil
,
err
}
accountTable
:=
NewAccountTable
(
a
.
GetLocalDB
())
err
:=
accountTable
.
Replace
(
receipt
.
FromAccount
)
if
err
!=
nil
{
return
nil
,
err
}
kvs
,
err
:=
accountTable
.
Save
()
if
err
!=
nil
{
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
}
}
}
}
}
}
...
@@ -112,6 +125,26 @@ func (a *accountmanager) ExecLocal_Supervise(payload *et.Supervise, tx *types.Tr
...
@@ -112,6 +125,26 @@ func (a *accountmanager) ExecLocal_Supervise(payload *et.Supervise, tx *types.Tr
return
nil
,
err
return
nil
,
err
}
}
accountTable
:=
NewAccountTable
(
a
.
GetLocalDB
())
accountTable
:=
NewAccountTable
(
a
.
GetLocalDB
())
//当时续期操作得话,需要重建
if
receipt
.
Op
==
et
.
AddExpire
{
for
_
,
account
:=
range
receipt
.
Accounts
{
err
:=
accountTable
.
DelRow
(
account
)
if
err
!=
nil
{
return
nil
,
err
}
//重置主键
account
.
Index
=
receipt
.
Index
err
=
accountTable
.
Replace
(
account
)
if
err
!=
nil
{
return
nil
,
err
}
}
kvs
,
err
:=
accountTable
.
Save
()
if
err
!=
nil
{
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
}
else
{
for
_
,
account
:=
range
receipt
.
Accounts
{
for
_
,
account
:=
range
receipt
.
Accounts
{
err
:=
accountTable
.
Replace
(
account
)
err
:=
accountTable
.
Replace
(
account
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -124,6 +157,8 @@ func (a *accountmanager) ExecLocal_Supervise(payload *et.Supervise, tx *types.Tr
...
@@ -124,6 +157,8 @@ func (a *accountmanager) ExecLocal_Supervise(payload *et.Supervise, tx *types.Tr
}
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
}
}
}
}
}
}
}
return
a
.
addAutoRollBack
(
tx
,
dbSet
.
KV
),
nil
return
a
.
addAutoRollBack
(
tx
,
dbSet
.
KV
),
nil
...
...
plugin/dapp/accountmanager/executor/query.go
View file @
c7dfe374
...
@@ -10,6 +10,11 @@ func (s *accountmanager) Query_QueryAccountByID(in *et.QueryAccountByID) (types.
...
@@ -10,6 +10,11 @@ func (s *accountmanager) Query_QueryAccountByID(in *et.QueryAccountByID) (types.
return
findAccountByID
(
s
.
GetLocalDB
(),
in
.
AccountID
)
return
findAccountByID
(
s
.
GetLocalDB
(),
in
.
AccountID
)
}
}
//根据ID查询账户信息
func
(
s
*
accountmanager
)
Query_QueryAccountByAddr
(
in
*
et
.
QueryAccountByAddr
)
(
types
.
Message
,
error
)
{
return
findAccountByAddr
(
s
.
GetLocalDB
(),
in
.
Addr
)
}
//根据状态查询账户列表|| 账户状态 1 正常, 2表示冻结, 3表示锁定 4,过期注销
//根据状态查询账户列表|| 账户状态 1 正常, 2表示冻结, 3表示锁定 4,过期注销
func
(
s
*
accountmanager
)
Query_QueryAccountsByStatus
(
in
*
et
.
QueryAccountsByStatus
)
(
types
.
Message
,
error
)
{
func
(
s
*
accountmanager
)
Query_QueryAccountsByStatus
(
in
*
et
.
QueryAccountsByStatus
)
(
types
.
Message
,
error
)
{
return
findAccountListByStatus
(
s
.
GetLocalDB
(),
in
.
Status
,
in
.
Direction
,
in
.
PrimaryKey
)
return
findAccountListByStatus
(
s
.
GetLocalDB
(),
in
.
Status
,
in
.
Direction
,
in
.
PrimaryKey
)
...
@@ -17,5 +22,10 @@ func (s *accountmanager) Query_QueryAccountsByStatus(in *et.QueryAccountsByStatu
...
@@ -17,5 +22,10 @@ func (s *accountmanager) Query_QueryAccountsByStatus(in *et.QueryAccountsByStatu
//查询逾期注销的账户列表
//查询逾期注销的账户列表
func
(
s
*
accountmanager
)
Query_QueryExpiredAccounts
(
in
*
et
.
QueryExpiredAccounts
)
(
types
.
Message
,
error
)
{
func
(
s
*
accountmanager
)
Query_QueryExpiredAccounts
(
in
*
et
.
QueryExpiredAccounts
)
(
types
.
Message
,
error
)
{
return
findAccountListByIndex
(
s
.
GetLocalDB
(),
in
.
Direction
,
in
.
PrimaryKey
)
return
findAccountListByIndex
(
s
.
GetLocalDB
(),
in
.
ExpiredTime
,
in
.
PrimaryKey
)
}
//根据ID查询账户余额
func
(
s
*
accountmanager
)
Query_QueryBalanceByID
(
in
*
et
.
QueryBalanceByID
)
(
types
.
Message
,
error
)
{
return
queryBalanceByID
(
s
.
GetStateDB
(),
s
.
GetLocalDB
(),
s
.
GetAPI
()
.
GetConfig
(),
s
.
GetName
(),
in
)
}
}
plugin/dapp/accountmanager/executor/tables.go
View file @
c7dfe374
...
@@ -25,7 +25,7 @@ var opt_account = &table.Option{
...
@@ -25,7 +25,7 @@ var opt_account = &table.Option{
Prefix
:
KeyPrefixLocalDB
,
Prefix
:
KeyPrefixLocalDB
,
Name
:
"account"
,
Name
:
"account"
,
Primary
:
"index"
,
Primary
:
"index"
,
Index
:
[]
string
{
"status"
,
"accountID"
},
Index
:
[]
string
{
"status"
,
"accountID"
,
"addr"
},
}
}
//状态数据库中存储具体账户信息
//状态数据库中存储具体账户信息
...
@@ -74,7 +74,9 @@ func (m *AccountRow) Get(key string) ([]byte, error) {
...
@@ -74,7 +74,9 @@ func (m *AccountRow) Get(key string) ([]byte, error) {
}
else
if
key
==
"status"
{
}
else
if
key
==
"status"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%d"
,
m
.
Status
)),
nil
return
[]
byte
(
fmt
.
Sprintf
(
"%d"
,
m
.
Status
)),
nil
}
else
if
key
==
"index"
{
}
else
if
key
==
"index"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%014d"
,
m
.
GetIndex
())),
nil
return
[]
byte
(
fmt
.
Sprintf
(
"%018d"
,
m
.
GetIndex
())),
nil
}
else
if
key
==
"addr"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s"
,
m
.
GetAddr
())),
nil
}
}
return
nil
,
types
.
ErrNotFound
return
nil
,
types
.
ErrNotFound
}
}
plugin/dapp/accountmanager/executor/tables_test.go
View file @
c7dfe374
package
executor
package
executor
import
(
import
(
"fmt"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/util"
et
"github.com/33cn/plugin/plugin/dapp/accountmanager/types"
"testing"
"testing"
"time"
)
)
func
Test
(
t
*
testing
.
T
)
{
func
TestAccountTable
(
t
*
testing
.
T
)
{
t
.
Log
(
fmt
.
Sprintf
(
"%-s"
,
"aaaa100000b"
))
_
,
_
,
kvdb
:=
util
.
CreateTestDB
()
table
:=
NewAccountTable
(
kvdb
)
now
:=
time
.
Now
()
.
Unix
()
row1
:=
&
et
.
Account
{
Index
:
now
*
int64
(
types
.
MaxTxsPerBlock
),
AccountID
:
"harry2015"
,
Status
:
1
,
ExpireTime
:
now
+
10
,
Addr
:
"xxxx"
}
row2
:=
&
et
.
Account
{
Index
:
now
*
int64
(
types
.
MaxTxsPerBlock
)
+
1
,
AccountID
:
"harry2020"
,
Status
:
1
,
ExpireTime
:
now
,
Addr
:
"xxxx"
}
table
.
Add
(
row1
)
table
.
Add
(
row2
)
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
t
.
Error
(
err
)
}
for
_
,
kv
:=
range
kvs
{
kvdb
.
Set
(
kv
.
Key
,
kv
.
Value
)
}
time
.
Sleep
(
2
*
time
.
Second
)
list
,
err
:=
findAccountListByIndex
(
kvdb
,
time
.
Now
()
.
Unix
(),
""
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
t
.
Log
(
list
)
list
,
err
=
findAccountListByStatus
(
kvdb
,
et
.
Normal
,
0
,
""
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
t
.
Log
(
list
)
row1
.
Status
=
et
.
Frozen
err
=
table
.
Replace
(
row1
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
kvs
,
err
=
table
.
Save
()
if
err
!=
nil
{
t
.
Error
(
err
)
}
for
_
,
kv
:=
range
kvs
{
kvdb
.
Set
(
kv
.
Key
,
kv
.
Value
)
}
list
,
err
=
findAccountListByStatus
(
kvdb
,
et
.
Frozen
,
0
,
""
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
t
.
Log
(
list
)
}
}
\ No newline at end of file
plugin/dapp/accountmanager/proto/accountmanager.proto
View file @
c7dfe374
...
@@ -100,21 +100,24 @@ message TransferReceipt{
...
@@ -100,21 +100,24 @@ message TransferReceipt{
account
ToAccount
=
2
;
account
ToAccount
=
2
;
int64
blockTime
=
3
;
int64
index
=
3
;
}
}
//回执日志
//回执日志
message
SuperviseReceipt
{
message
SuperviseReceipt
{
repeated
account
accounts
=
1
;
repeated
account
accounts
=
1
;
int32
op
=
2
;
int32
op
=
2
;
int64
blockTime
=
3
;
int64
index
=
3
;
}
}
message
QueryExpiredAccounts
{
message
QueryExpiredAccounts
{
string
primaryKey
=
1
;
string
primaryKey
=
1
;
//第一次需要传入逾期时间,时间戳
int64
expiredTime
=
2
;
//单页返回多少条记录,默认返回10条
//单页返回多少条记录,默认返回10条
// 0降序,1升序,默认降序
// 0降序,1升序,默认降序
int32
direction
=
2
;
int32
direction
=
3
;
}
}
message
QueryAccountsByStatus
{
message
QueryAccountsByStatus
{
...
@@ -129,6 +132,21 @@ message QueryAccountsByStatus{
...
@@ -129,6 +132,21 @@ message QueryAccountsByStatus{
message
QueryAccountByID
{
message
QueryAccountByID
{
string
accountID
=
1
;
string
accountID
=
1
;
}
}
message
QueryAccountByAddr
{
string
addr
=
1
;
}
message
QueryBalanceByID
{
string
accountID
=
1
;
asset
asset
=
2
;
}
message
balance
{
int64
balance
=
1
;
int64
frozen
=
2
;
}
service
accountmanager
{
service
accountmanager
{
}
}
plugin/dapp/accountmanager/types/accountmanager.go
View file @
c7dfe374
...
@@ -30,6 +30,8 @@ const (
...
@@ -30,6 +30,8 @@ const (
FuncNameQueryAccountByID
=
"QueryAccountByID"
FuncNameQueryAccountByID
=
"QueryAccountByID"
FuncNameQueryAccountsByStatus
=
"QueryAccountsByStatus"
FuncNameQueryAccountsByStatus
=
"QueryAccountsByStatus"
FuncNameQueryExpiredAccounts
=
"QueryExpiredAccounts"
FuncNameQueryExpiredAccounts
=
"QueryExpiredAccounts"
FuncNameQueryAccountByAddr
=
"QueryAccountByAddr"
FuncNameQueryBalanceByID
=
"QueryBalanceByID"
)
)
// log类型id值
// log类型id值
...
...
plugin/dapp/accountmanager/types/accountmanager.pb.go
View file @
c7dfe374
This diff is collapsed.
Click to expand it.
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