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
f221521c
Commit
f221521c
authored
Jan 25, 2021
by
jiangpeng
Browse files
Options
Browse Files
Download
Plain Diff
merge upstream master
parents
216f5050
d4de6275
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
510 additions
and
201 deletions
+510
-201
chain33.para.toml
chain33.para.toml
+10
-3
go.mod
go.mod
+4
-3
go.sum
go.sum
+0
-0
dpos_test.go
plugin/consensus/dpos/dpos_test.go
+5
-4
paracommitmsg.go
plugin/consensus/para/paracommitmsg.go
+4
-0
parasync.go
plugin/consensus/para/parasync.go
+15
-10
parasync_test.go
plugin/consensus/para/parasync_test.go
+2
-2
pbft_test.go
plugin/consensus/pbft/pbft_test.go
+9
-9
raftPerf.go
plugin/consensus/raft/tools/raftPerf.go
+2
-0
state.go
plugin/consensus/tendermint/state.go
+1
-0
tendermint_test.go
plugin/consensus/tendermint/tendermint_test.go
+15
-5
vote_test.go
plugin/dapp/dposvote/commands/vote_test.go
+6
-4
echo.go
plugin/dapp/echo/types/echo/echo.go
+1
-0
evm.go
plugin/dapp/evm/commands/evm.go
+2
-2
rpc.go
plugin/dapp/evm/rpc/rpc.go
+3
-3
game_test.go
plugin/dapp/guess/commands/game_test.go
+5
-4
guess_test.go
plugin/dapp/guess/rpc/guess_test.go
+5
-4
paracross.go
plugin/dapp/paracross/commands/paracross.go
+43
-0
action.go
plugin/dapp/paracross/executor/action.go
+0
-65
exec.go
plugin/dapp/paracross/executor/exec.go
+1
-1
miner.go
plugin/dapp/paracross/executor/miner.go
+117
-0
nomal.go
plugin/dapp/paracross/executor/minerrewards/nomal.go
+55
-0
register.go
plugin/dapp/paracross/executor/minerrewards/register.go
+22
-0
reward.go
plugin/dapp/paracross/executor/reward.go
+33
-29
paracross.proto
plugin/dapp/paracross/proto/paracross.proto
+6
-0
cfg.go
plugin/dapp/paracross/testnode/cfg.go
+1
-0
paracross.go
plugin/dapp/paracross/types/paracross.go
+1
-0
paracross.pb.go
plugin/dapp/paracross/types/paracross.pb.go
+0
-0
type.go
plugin/dapp/paracross/types/type.go
+3
-0
privacy.go
plugin/dapp/privacy/wallet/privacy.go
+3
-0
privacy_test.go
plugin/dapp/privacy/wallet/privacy_test.go
+2
-1
relayd.go
plugin/dapp/relay/cmd/relayd/relayd/relayd.go
+10
-4
relay_test.go
plugin/dapp/relay/executor/relay_test.go
+3
-0
token_new_test.go
plugin/dapp/token/executor/token_new_test.go
+12
-0
types.go
plugin/dapp/unfreeze/types/types.go
+3
-0
exec.go
plugin/dapp/wasm/executor/exec.go
+22
-16
wasm.go
plugin/dapp/wasm/executor/wasm.go
+5
-1
wasm_test.go
plugin/dapp/wasm/executor/wasm_test.go
+53
-6
wasm.proto
plugin/dapp/wasm/proto/wasm.proto
+1
-1
wasm.pb.go
plugin/dapp/wasm/types/wasm.pb.go
+24
-24
exec_test.go
plugin/dapp/x2ethereum/executor/exec_test.go
+1
-0
No files found.
chain33.para.toml
View file @
f221521c
...
@@ -43,7 +43,7 @@ enableTxQuickIndex=true
...
@@ -43,7 +43,7 @@ enableTxQuickIndex=true
# 升级storedb是否重新执行localdb,bityuan主链升级不需要开启,平行链升级需要开启
# 升级storedb是否重新执行localdb,bityuan主链升级不需要开启,平行链升级需要开启
enableReExecLocal
=
true
enableReExecLocal
=
true
# 使能精简localdb
# 使能精简localdb
enableReduceLocaldb
=
tru
e
enableReduceLocaldb
=
fals
e
enablePushSubscribe
=
false
enablePushSubscribe
=
false
[p2p]
[p2p]
...
@@ -94,8 +94,13 @@ coinDevFund=12
...
@@ -94,8 +94,13 @@ coinDevFund=12
coinBaseReward
=
3
coinBaseReward
=
3
#委托账户最少解绑定时间(按小时)
#委托账户最少解绑定时间(按小时)
unBindTime
=
24
unBindTime
=
24
#支持挖矿奖励的1e8小数模式,比如18coin 需要配置成1800000000 以支持小数位后的配置
#支持挖矿奖励的1e8小数模式,比如18coin 需要配置成1800000000 以支持小数位后的配置,如果true,意味着已经打开即coinReward=1800000000
#decimalMode=true
decimalMode
=
false
#挖矿模式, normal:缺省挖矿,其他自定义,注册名字需要和配置名字保持一致
minerMode
=
"normal"
#挖矿减半周期,按高度减半
halvePeriod
=
1000
[consensus.sub.para]
[consensus.sub.para]
#主链节点的grpc服务器ip,当前可以支持多ip负载均衡,如“118.31.177.1:8802,39.97.2.127:8802”
#主链节点的grpc服务器ip,当前可以支持多ip负载均衡,如“118.31.177.1:8802,39.97.2.127:8802”
...
@@ -261,6 +266,8 @@ ForkLoopCheckCommitTxDone=0
...
@@ -261,6 +266,8 @@ ForkLoopCheckCommitTxDone=0
#仅平行链适用,自共识分阶段开启,缺省是0,若对应主链高度7200000之前开启过自共识,需要重新配置此分叉,并为之前自共识设置selfConsensEnablePreContract配置项
#仅平行链适用,自共识分阶段开启,缺省是0,若对应主链高度7200000之前开启过自共识,需要重新配置此分叉,并为之前自共识设置selfConsensEnablePreContract配置项
ForkParaSelfConsStages
=
0
ForkParaSelfConsStages
=
0
ForkParaAssetTransferRbk
=
0
ForkParaAssetTransferRbk
=
0
#仅平行链适用,开启挖矿交易的高度,已有代码版本可能未在0高度开启挖矿,需要设置这个高度,新版本默认从0开启挖矿,通过交易配置分阶段奖励
ForkParaFullMinerHeight
=
0
[fork.sub.evm]
[fork.sub.evm]
Enable
=
0
Enable
=
0
...
...
go.mod
View file @
f221521c
...
@@ -3,7 +3,7 @@ module github.com/33cn/plugin
...
@@ -3,7 +3,7 @@ module github.com/33cn/plugin
go 1.12
go 1.12
require (
require (
github.com/33cn/chain33 v1.65.1-0.202
01111090506-e2d7705ea453
github.com/33cn/chain33 v1.65.1-0.202
10115070259-1e4df1700e2e
github.com/BurntSushi/toml v0.3.1
github.com/BurntSushi/toml v0.3.1
github.com/NebulousLabs/Sia v1.3.7
github.com/NebulousLabs/Sia v1.3.7
github.com/NebulousLabs/errors v0.0.0-20181203160057-9f787ce8f69e // indirect
github.com/NebulousLabs/errors v0.0.0-20181203160057-9f787ce8f69e // indirect
...
@@ -41,9 +41,10 @@ require (
...
@@ -41,9 +41,10 @@ require (
github.com/tjfoc/gmsm v1.3.2
github.com/tjfoc/gmsm v1.3.2
github.com/valyala/fasthttp v1.5.0
github.com/valyala/fasthttp v1.5.0
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
go.uber.org/zap v1.16.0 // indirect
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9
golang.org/x/net v0.0.0-20200
301022130-244492dfa37a
golang.org/x/net v0.0.0-20200
520004742-59133d7f0dd7
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1
golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0 // indirect
golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0 // indirect
google.golang.org/grpc v1.2
8.0
google.golang.org/grpc v1.2
9.1
)
)
go.sum
View file @
f221521c
This diff is collapsed.
Click to expand it.
plugin/consensus/dpos/dpos_test.go
View file @
f221521c
...
@@ -124,7 +124,7 @@ func DposPerf() {
...
@@ -124,7 +124,7 @@ func DposPerf() {
fmt
.
Println
(
"=======start NormPut!======="
)
fmt
.
Println
(
"=======start NormPut!======="
)
for
i
:=
0
;
i
<
loopCount
;
i
++
{
for
i
:=
0
;
i
<
loopCount
;
i
++
{
NormPut
()
NormPut
(
cfg
)
time
.
Sleep
(
time
.
Second
)
time
.
Sleep
(
time
.
Second
)
}
}
...
@@ -462,7 +462,7 @@ func getprivkey(key string) crypto.PrivKey {
...
@@ -462,7 +462,7 @@ func getprivkey(key string) crypto.PrivKey {
return
priv
return
priv
}
}
func
prepareTxList
()
*
types
.
Transaction
{
func
prepareTxList
(
cfg
*
types
.
Chain33Config
)
*
types
.
Transaction
{
var
key
string
var
key
string
var
value
string
var
value
string
var
i
int
var
i
int
...
@@ -475,6 +475,7 @@ func prepareTxList() *types.Transaction {
...
@@ -475,6 +475,7 @@ func prepareTxList() *types.Transaction {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
return
tx
return
tx
}
}
...
@@ -489,8 +490,8 @@ func clearTestData() {
...
@@ -489,8 +490,8 @@ func clearTestData() {
fmt
.
Println
(
"test data clear successfully!"
)
fmt
.
Println
(
"test data clear successfully!"
)
}
}
func
NormPut
()
{
func
NormPut
(
cfg
*
types
.
Chain33Config
)
{
tx
:=
prepareTxList
()
tx
:=
prepareTxList
(
cfg
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/consensus/para/paracommitmsg.go
View file @
f221521c
...
@@ -490,6 +490,10 @@ func (client *commitMsgClient) getTxsGroup(txsArr *types.Transactions) (*types.T
...
@@ -490,6 +490,10 @@ func (client *commitMsgClient) getTxsGroup(txsArr *types.Transactions) (*types.T
func
(
client
*
commitMsgClient
)
getExecName
(
commitHeight
int64
)
string
{
func
(
client
*
commitMsgClient
)
getExecName
(
commitHeight
int64
)
string
{
cfg
:=
client
.
paraClient
.
GetAPI
()
.
GetConfig
()
cfg
:=
client
.
paraClient
.
GetAPI
()
.
GetConfig
()
if
cfg
.
IsDappFork
(
commitHeight
,
pt
.
ParaX
,
pt
.
ForkParaFullMinerHeight
)
{
return
paracross
.
GetExecName
(
cfg
)
}
if
cfg
.
IsDappFork
(
commitHeight
,
pt
.
ParaX
,
pt
.
ForkParaSelfConsStages
)
{
if
cfg
.
IsDappFork
(
commitHeight
,
pt
.
ParaX
,
pt
.
ForkParaSelfConsStages
)
{
return
paracross
.
GetExecName
(
cfg
)
return
paracross
.
GetExecName
(
cfg
)
}
}
...
...
plugin/consensus/para/parasync.go
View file @
f221521c
...
@@ -165,7 +165,7 @@ func (client *blockSyncClient) batchSyncBlocks() {
...
@@ -165,7 +165,7 @@ func (client *blockSyncClient) batchSyncBlocks() {
}
}
//没有需要同步的块,清理本地数据库中localCacheCount前的块
//没有需要同步的块,清理本地数据库中localCacheCount前的块
if
err
==
nil
&&
curSyncCaughtState
{
if
err
==
nil
&&
curSyncCaughtState
{
_
,
err
:=
client
.
clearLocalOldBlocks
()
err
:=
client
.
clearLocalOldBlocks
()
if
err
!=
nil
{
if
err
!=
nil
{
client
.
printError
(
err
)
client
.
printError
(
err
)
}
}
...
@@ -289,6 +289,8 @@ func (client *blockSyncClient) delLocalBlocks(startHeight int64, endHeight int64
...
@@ -289,6 +289,8 @@ func (client *blockSyncClient) delLocalBlocks(startHeight int64, endHeight int64
return
errors
.
New
(
"para sync - startHeight > endHeight,can't clear local blocks"
)
return
errors
.
New
(
"para sync - startHeight > endHeight,can't clear local blocks"
)
}
}
plog
.
Info
(
"Para sync - clear local blocks"
,
"startHeight:"
,
startHeight
,
"endHeight:"
,
endHeight
)
index
:=
startHeight
index
:=
startHeight
set
:=
&
types
.
LocalDBSet
{}
set
:=
&
types
.
LocalDBSet
{}
cfg
:=
client
.
paraClient
.
GetAPI
()
.
GetConfig
()
cfg
:=
client
.
paraClient
.
GetAPI
()
.
GetConfig
()
...
@@ -308,8 +310,6 @@ func (client *blockSyncClient) delLocalBlocks(startHeight int64, endHeight int64
...
@@ -308,8 +310,6 @@ func (client *blockSyncClient) delLocalBlocks(startHeight int64, endHeight int64
kv
:=
&
types
.
KeyValue
{
Key
:
key
,
Value
:
types
.
Encode
(
&
types
.
Int64
{
Data
:
endHeight
+
1
})}
kv
:=
&
types
.
KeyValue
{
Key
:
key
,
Value
:
types
.
Encode
(
&
types
.
Int64
{
Data
:
endHeight
+
1
})}
set
.
KV
=
append
(
set
.
KV
,
kv
)
set
.
KV
=
append
(
set
.
KV
,
kv
)
client
.
printDebugInfo
(
"Para sync - clear local blocks"
,
"startHeight:"
,
startHeight
,
"endHeight:"
,
endHeight
)
return
client
.
paraClient
.
setLocalDb
(
set
)
return
client
.
paraClient
.
setLocalDb
(
set
)
}
}
...
@@ -356,23 +356,28 @@ func (client *blockSyncClient) getFirstLocalHeight() (int64, error) {
...
@@ -356,23 +356,28 @@ func (client *blockSyncClient) getFirstLocalHeight() (int64, error) {
}
}
//清除指定数量(localCacheCount)以前的区块
//清除指定数量(localCacheCount)以前的区块
func
(
client
*
blockSyncClient
)
clearLocalOldBlocks
()
(
bool
,
error
)
{
func
(
client
*
blockSyncClient
)
clearLocalOldBlocks
()
error
{
lastLocalHeight
,
err
:=
client
.
paraClient
.
getLastLocalHeight
()
lastLocalHeight
,
err
:=
client
.
paraClient
.
getLastLocalHeight
()
if
err
!=
nil
{
if
err
!=
nil
{
return
false
,
err
return
err
}
}
firstLocalHeight
,
err
:=
client
.
getFirstLocalHeight
()
firstLocalHeight
,
err
:=
client
.
getFirstLocalHeight
()
if
err
!=
nil
{
if
err
!=
nil
{
return
false
,
err
return
err
}
}
canDelCount
:=
lastLocalHeight
-
firstLocalHeight
-
client
.
maxCacheCount
+
1
canDelCount
:=
lastLocalHeight
-
firstLocalHeight
-
client
.
maxCacheCount
+
1
if
canDelCount
<=
client
.
maxCacheCount
{
count
:=
canDelCount
/
client
.
maxCacheCount
return
false
,
nil
for
i
:=
int64
(
0
);
i
<
count
;
i
++
{
start
:=
firstLocalHeight
+
i
*
client
.
maxCacheCount
end
:=
start
+
client
.
maxCacheCount
-
1
err
=
client
.
delLocalBlocks
(
start
,
end
)
if
err
!=
nil
{
return
err
}
}
}
return
nil
return
true
,
client
.
delLocalBlocks
(
firstLocalHeight
,
firstLocalHeight
+
canDelCount
-
1
)
}
}
// miner tx need all para node create, but not all node has auth account, here just not sign to keep align
// miner tx need all para node create, but not all node has auth account, here just not sign to keep align
...
...
plugin/consensus/para/parasync_test.go
View file @
f221521c
...
@@ -350,13 +350,13 @@ func testCreateGenesisBlock(t *testing.T, para *client, testLoopCount int32) {
...
@@ -350,13 +350,13 @@ func testCreateGenesisBlock(t *testing.T, para *client, testLoopCount int32) {
//测试清理localdb缓存数据
//测试清理localdb缓存数据
func
testClearLocalOldBlocks
(
t
*
testing
.
T
,
para
*
client
,
testLoopCount
int32
)
{
func
testClearLocalOldBlocks
(
t
*
testing
.
T
,
para
*
client
,
testLoopCount
int32
)
{
isCleaned
,
err
:=
para
.
blockSyncClient
.
clearLocalOldBlocks
()
err
:=
para
.
blockSyncClient
.
clearLocalOldBlocks
()
switch
testLoopCount
{
switch
testLoopCount
{
case
0
:
case
0
:
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
case
1
:
case
1
:
assert
.
Equal
(
t
,
true
,
!
isCleaned
&&
err
==
nil
)
assert
.
Equal
(
t
,
true
,
err
==
nil
)
default
:
//2
default
:
//2
assert
.
Error
(
t
,
err
)
assert
.
Error
(
t
,
err
)
}
}
...
...
plugin/consensus/pbft/pbft_test.go
View file @
f221521c
...
@@ -19,7 +19,6 @@ import (
...
@@ -19,7 +19,6 @@ import (
"github.com/33cn/chain33/common/limits"
"github.com/33cn/chain33/common/limits"
"github.com/33cn/chain33/common/log"
"github.com/33cn/chain33/common/log"
"github.com/33cn/chain33/executor"
"github.com/33cn/chain33/executor"
"github.com/33cn/chain33/mempool"
"github.com/33cn/chain33/p2p"
"github.com/33cn/chain33/p2p"
"github.com/33cn/chain33/queue"
"github.com/33cn/chain33/queue"
"github.com/33cn/chain33/store"
"github.com/33cn/chain33/store"
...
@@ -47,9 +46,8 @@ func init() {
...
@@ -47,9 +46,8 @@ func init() {
log
.
SetLogLevel
(
"info"
)
log
.
SetLogLevel
(
"info"
)
}
}
func
TestPbft
(
t
*
testing
.
T
)
{
func
TestPbft
(
t
*
testing
.
T
)
{
q
,
chain
,
p2pnet
,
s
,
mem
,
exec
,
cs
,
wallet
:=
initEnvPbft
()
q
,
chain
,
p2pnet
,
s
,
exec
,
cs
,
wallet
:=
initEnvPbft
()
defer
chain
.
Close
()
defer
chain
.
Close
()
defer
mem
.
Close
()
defer
p2pnet
.
Close
()
defer
p2pnet
.
Close
()
defer
exec
.
Close
()
defer
exec
.
Close
()
defer
s
.
Close
()
defer
s
.
Close
()
...
@@ -62,7 +60,7 @@ func TestPbft(t *testing.T) {
...
@@ -62,7 +60,7 @@ func TestPbft(t *testing.T) {
clearTestData
()
clearTestData
()
}
}
func
initEnvPbft
()
(
queue
.
Queue
,
*
blockchain
.
BlockChain
,
*
p2p
.
Manager
,
queue
.
Module
,
queue
.
Module
,
*
executor
.
Executor
,
queue
.
Module
,
queue
.
Module
)
{
func
initEnvPbft
()
(
queue
.
Queue
,
*
blockchain
.
BlockChain
,
*
p2p
.
Manager
,
queue
.
Module
,
*
executor
.
Executor
,
queue
.
Module
,
queue
.
Module
)
{
flag
.
Parse
()
flag
.
Parse
()
chain33Cfg
:=
types
.
NewChain33Config
(
types
.
ReadFile
(
"chain33.test.toml"
))
chain33Cfg
:=
types
.
NewChain33Config
(
types
.
ReadFile
(
"chain33.test.toml"
))
var
q
=
queue
.
New
(
"channel"
)
var
q
=
queue
.
New
(
"channel"
)
...
@@ -72,8 +70,6 @@ func initEnvPbft() (queue.Queue, *blockchain.BlockChain, *p2p.Manager, queue.Mod
...
@@ -72,8 +70,6 @@ func initEnvPbft() (queue.Queue, *blockchain.BlockChain, *p2p.Manager, queue.Mod
chain
:=
blockchain
.
New
(
chain33Cfg
)
chain
:=
blockchain
.
New
(
chain33Cfg
)
chain
.
SetQueueClient
(
q
.
Client
())
chain
.
SetQueueClient
(
q
.
Client
())
mem
:=
mempool
.
New
(
chain33Cfg
)
mem
.
SetQueueClient
(
q
.
Client
())
exec
:=
executor
.
New
(
chain33Cfg
)
exec
:=
executor
.
New
(
chain33Cfg
)
exec
.
SetQueueClient
(
q
.
Client
())
exec
.
SetQueueClient
(
q
.
Client
())
chain33Cfg
.
SetMinFee
(
0
)
chain33Cfg
.
SetMinFee
(
0
)
...
@@ -86,7 +82,7 @@ func initEnvPbft() (queue.Queue, *blockchain.BlockChain, *p2p.Manager, queue.Mod
...
@@ -86,7 +82,7 @@ func initEnvPbft() (queue.Queue, *blockchain.BlockChain, *p2p.Manager, queue.Mod
walletm
:=
wallet
.
New
(
chain33Cfg
)
walletm
:=
wallet
.
New
(
chain33Cfg
)
walletm
.
SetQueueClient
(
q
.
Client
())
walletm
.
SetQueueClient
(
q
.
Client
())
return
q
,
chain
,
p2pnet
,
s
,
mem
,
exec
,
cs
,
walletm
return
q
,
chain
,
p2pnet
,
s
,
exec
,
cs
,
walletm
}
}
...
@@ -97,13 +93,15 @@ func sendReplyList(q queue.Queue) {
...
@@ -97,13 +93,15 @@ func sendReplyList(q queue.Queue) {
for
msg
:=
range
client
.
Recv
()
{
for
msg
:=
range
client
.
Recv
()
{
if
msg
.
Ty
==
types
.
EventTxList
{
if
msg
.
Ty
==
types
.
EventTxList
{
count
++
count
++
createReplyList
(
"test"
+
strconv
.
Itoa
(
count
))
createReplyList
(
client
.
GetConfig
(),
"test"
+
strconv
.
Itoa
(
count
))
msg
.
Reply
(
client
.
NewMessage
(
"consensus"
,
types
.
EventReplyTxList
,
msg
.
Reply
(
client
.
NewMessage
(
"consensus"
,
types
.
EventReplyTxList
,
&
types
.
ReplyTxList
{
Txs
:
transactions
}))
&
types
.
ReplyTxList
{
Txs
:
transactions
}))
if
count
==
5
{
if
count
==
5
{
time
.
Sleep
(
5
*
time
.
Second
)
time
.
Sleep
(
5
*
time
.
Second
)
break
break
}
}
}
else
if
msg
.
Ty
==
types
.
EventGetMempoolSize
{
msg
.
Reply
(
client
.
NewMessage
(
""
,
0
,
&
types
.
MempoolSize
{}))
}
}
}
}
}
}
...
@@ -124,7 +122,8 @@ func getprivkey(key string) crypto.PrivKey {
...
@@ -124,7 +122,8 @@ func getprivkey(key string) crypto.PrivKey {
return
priv
return
priv
}
}
func
createReplyList
(
account
string
)
{
func
createReplyList
(
cfg
*
types
.
Chain33Config
,
account
string
)
{
var
result
[]
*
types
.
Transaction
var
result
[]
*
types
.
Transaction
for
j
:=
0
;
j
<
txSize
;
j
++
{
for
j
:=
0
;
j
<
txSize
;
j
++
{
//tx := &types.Transaction{}
//tx := &types.Transaction{}
...
@@ -134,6 +133,7 @@ func createReplyList(account string) {
...
@@ -134,6 +133,7 @@ func createReplyList(account string) {
tx
.
To
=
"14qViLJfdGaP4EeHnDyJbEGQysnCpwn1gZ"
tx
.
To
=
"14qViLJfdGaP4EeHnDyJbEGQysnCpwn1gZ"
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
result
=
append
(
result
,
tx
)
result
=
append
(
result
,
tx
)
...
...
plugin/consensus/raft/tools/raftPerf.go
View file @
f221521c
...
@@ -334,6 +334,8 @@ func NormPut(privkey string, key string, value string) {
...
@@ -334,6 +334,8 @@ func NormPut(privkey string, key string, value string) {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
Nonce
=
r
.
Int63
()
tx
.
Nonce
=
r
.
Int63
()
version
,
_
:=
c
.
Version
(
context
.
Background
(),
nil
)
tx
.
ChainID
=
version
.
ChainID
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
privkey
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
privkey
))
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
...
...
plugin/consensus/tendermint/state.go
View file @
f221521c
...
@@ -440,6 +440,7 @@ func LoadProposer(source *tmtypes.Validator) (*ttypes.Validator, error) {
...
@@ -440,6 +440,7 @@ func LoadProposer(source *tmtypes.Validator) (*ttypes.Validator, error) {
// CreateBlockInfoTx make blockInfo to the first transaction of the block and execer is valnode
// CreateBlockInfoTx make blockInfo to the first transaction of the block and execer is valnode
func
CreateBlockInfoTx
(
pubkey
string
,
state
*
tmtypes
.
State
,
block
*
tmtypes
.
TendermintBlock
)
*
types
.
Transaction
{
func
CreateBlockInfoTx
(
pubkey
string
,
state
*
tmtypes
.
State
,
block
*
tmtypes
.
TendermintBlock
)
*
types
.
Transaction
{
blockSave
:=
*
block
blockSave
:=
*
block
blockSave
.
Data
=
nil
blockSave
.
Data
=
nil
blockInfo
:=
&
tmtypes
.
TendermintBlockInfo
{
blockInfo
:=
&
tmtypes
.
TendermintBlockInfo
{
...
...
plugin/consensus/tendermint/tendermint_test.go
View file @
f221521c
...
@@ -74,13 +74,13 @@ func TendermintPerf(t *testing.T) {
...
@@ -74,13 +74,13 @@ func TendermintPerf(t *testing.T) {
time
.
Sleep
(
2
*
time
.
Second
)
time
.
Sleep
(
2
*
time
.
Second
)
ConfigManager
()
ConfigManager
()
for
i
:=
0
;
i
<
loopCount
;
i
++
{
for
i
:=
0
;
i
<
loopCount
;
i
++
{
NormPut
()
NormPut
(
q
.
GetConfig
()
.
GetChainID
()
)
time
.
Sleep
(
time
.
Second
)
time
.
Sleep
(
time
.
Second
)
}
}
CheckState
(
t
,
cs
.
(
*
Client
))
CheckState
(
t
,
cs
.
(
*
Client
))
AddNode
()
AddNode
()
for
i
:=
0
;
i
<
loopCount
*
3
;
i
++
{
for
i
:=
0
;
i
<
loopCount
*
3
;
i
++
{
NormPut
()
NormPut
(
q
.
GetConfig
()
.
GetChainID
()
)
time
.
Sleep
(
time
.
Second
)
time
.
Sleep
(
time
.
Second
)
}
}
time
.
Sleep
(
2
*
time
.
Second
)
time
.
Sleep
(
2
*
time
.
Second
)
...
@@ -148,7 +148,7 @@ func generateValue(i, valI int) string {
...
@@ -148,7 +148,7 @@ func generateValue(i, valI int) string {
return
string
(
value
)
return
string
(
value
)
}
}
func
prepareTxList
()
*
types
.
Transaction
{
func
prepareTxList
(
chainid
int32
)
*
types
.
Transaction
{
var
key
string
var
key
string
var
value
string
var
value
string
var
i
int
var
i
int
...
@@ -161,6 +161,7 @@ func prepareTxList() *types.Transaction {
...
@@ -161,6 +161,7 @@ func prepareTxList() *types.Transaction {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
Nonce
=
r
.
Int63
()
tx
.
Nonce
=
r
.
Int63
()
tx
.
ChainID
=
chainid
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
return
tx
return
tx
}
}
...
@@ -173,8 +174,8 @@ func clearTestData() {
...
@@ -173,8 +174,8 @@ func clearTestData() {
fmt
.
Println
(
"test data clear successfully!"
)
fmt
.
Println
(
"test data clear successfully!"
)
}
}
func
NormPut
()
{
func
NormPut
(
chainid
int32
)
{
tx
:=
prepareTxList
()
tx
:=
prepareTxList
(
chainid
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -199,6 +200,10 @@ func AddNode() {
...
@@ -199,6 +200,10 @@ func AddNode() {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"valnode"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"valnode"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"valnode"
)
tx
.
To
=
address
.
ExecAddress
(
"valnode"
)
tx
.
Nonce
=
r
.
Int63
()
tx
.
Nonce
=
r
.
Int63
()
version
,
_
:=
c
.
Version
(
context
.
Background
(),
nil
)
if
version
!=
nil
{
tx
.
ChainID
=
version
.
ChainID
}
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
...
@@ -221,6 +226,11 @@ func ConfigManager() {
...
@@ -221,6 +226,11 @@ func ConfigManager() {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"manage"
),
Payload
:
types
.
Encode
(
modify
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"manage"
),
Payload
:
types
.
Encode
(
modify
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"manage"
)
tx
.
To
=
address
.
ExecAddress
(
"manage"
)
tx
.
Nonce
=
r
.
Int63
()
tx
.
Nonce
=
r
.
Int63
()
version
,
_
:=
c
.
Version
(
context
.
Background
(),
nil
)
if
version
!=
nil
{
tx
.
ChainID
=
version
.
ChainID
}
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
...
...
plugin/dapp/dposvote/commands/vote_test.go
View file @
f221521c
...
@@ -238,7 +238,7 @@ func DposPerf() {
...
@@ -238,7 +238,7 @@ func DposPerf() {
}
}
time
.
Sleep
(
2
*
time
.
Second
)
time
.
Sleep
(
2
*
time
.
Second
)
for
i
:=
0
;
i
<
loopCount
;
i
++
{
for
i
:=
0
;
i
<
loopCount
;
i
++
{
NormPut
()
NormPut
(
q
.
GetConfig
()
)
time
.
Sleep
(
time
.
Second
)
time
.
Sleep
(
time
.
Second
)
}
}
time
.
Sleep
(
2
*
time
.
Second
)
time
.
Sleep
(
2
*
time
.
Second
)
...
@@ -336,8 +336,8 @@ func getprivkey(key string) crypto.PrivKey {
...
@@ -336,8 +336,8 @@ func getprivkey(key string) crypto.PrivKey {
return
priv
return
priv
}
}
func
NormPut
()
{
func
NormPut
(
cfg
*
types
.
Chain33Config
)
{
tx
:=
prepareTxList
()
tx
:=
prepareTxList
(
cfg
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -350,7 +350,8 @@ func NormPut() {
...
@@ -350,7 +350,8 @@ func NormPut() {
}
}
}
}
func
prepareTxList
()
*
types
.
Transaction
{
func
prepareTxList
(
cfg
*
types
.
Chain33Config
)
*
types
.
Transaction
{
var
key
string
var
key
string
var
value
string
var
value
string
var
i
int
var
i
int
...
@@ -363,6 +364,7 @@ func prepareTxList() *types.Transaction {
...
@@ -363,6 +364,7 @@ func prepareTxList() *types.Transaction {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
genesisKey
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
genesisKey
))
return
tx
return
tx
}
}
...
...
plugin/dapp/echo/types/echo/echo.go
View file @
f221521c
...
@@ -43,6 +43,7 @@ func createPingTx(cfg *types.Chain33Config, op string, parm *Tx) (*types.Transac
...
@@ -43,6 +43,7 @@ func createPingTx(cfg *types.Chain33Config, op string, parm *Tx) (*types.Transac
Payload
:
types
.
Encode
(
action
),
Payload
:
types
.
Encode
(
action
),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
EchoX
)),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
EchoX
)),
ChainID
:
cfg
.
GetChainID
(),
}
}
return
tx
,
nil
return
tx
,
nil
}
}
...
...
plugin/dapp/evm/commands/evm.go
View file @
f221521c
...
@@ -296,7 +296,7 @@ func createEvmTx(cfg *types.Chain33Config, action proto.Message, execer, caller,
...
@@ -296,7 +296,7 @@ func createEvmTx(cfg *types.Chain33Config, action proto.Message, execer, caller,
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
txHex
:=
types
.
Encode
(
tx
)
txHex
:=
types
.
Encode
(
tx
)
rawTx
:=
hex
.
EncodeToString
(
txHex
)
rawTx
:=
hex
.
EncodeToString
(
txHex
)
...
@@ -348,7 +348,7 @@ func createEvmTransferTx(cfg *types.Chain33Config, cmd *cobra.Command, caller, e
...
@@ -348,7 +348,7 @@ func createEvmTransferTx(cfg *types.Chain33Config, cmd *cobra.Command, caller, e
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
txHex
:=
types
.
Encode
(
tx
)
txHex
:=
types
.
Encode
(
tx
)
rawTx
:=
hex
.
EncodeToString
(
txHex
)
rawTx
:=
hex
.
EncodeToString
(
txHex
)
...
...
plugin/dapp/evm/rpc/rpc.go
View file @
f221521c
...
@@ -40,7 +40,7 @@ func (c *channelClient) Create(ctx context.Context, in evmtypes.EvmContractCreat
...
@@ -40,7 +40,7 @@ func (c *channelClient) Create(ctx context.Context, in evmtypes.EvmContractCreat
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
txHex
:=
types
.
Encode
(
tx
)
txHex
:=
types
.
Encode
(
tx
)
return
&
types
.
UnsignTx
{
Data
:
txHex
},
nil
return
&
types
.
UnsignTx
{
Data
:
txHex
},
nil
...
@@ -69,7 +69,7 @@ func (c *channelClient) Call(ctx context.Context, in evmtypes.EvmContractCallReq
...
@@ -69,7 +69,7 @@ func (c *channelClient) Call(ctx context.Context, in evmtypes.EvmContractCallReq
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
txHex
:=
types
.
Encode
(
tx
)
txHex
:=
types
.
Encode
(
tx
)
return
&
types
.
UnsignTx
{
Data
:
txHex
},
nil
return
&
types
.
UnsignTx
{
Data
:
txHex
},
nil
...
@@ -103,7 +103,7 @@ func (c *channelClient) Transfer(ctx context.Context, in evmtypes.EvmContractTra
...
@@ -103,7 +103,7 @@ func (c *channelClient) Transfer(ctx context.Context, in evmtypes.EvmContractTra
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
random
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
txHex
:=
types
.
Encode
(
tx
)
txHex
:=
types
.
Encode
(
tx
)
return
&
types
.
UnsignTx
{
Data
:
txHex
},
nil
return
&
types
.
UnsignTx
{
Data
:
txHex
},
nil
...
...
plugin/dapp/guess/commands/game_test.go
View file @
f221521c
...
@@ -361,7 +361,7 @@ func testGuessImp(t *testing.T) {
...
@@ -361,7 +361,7 @@ func testGuessImp(t *testing.T) {
fmt
.
Println
(
"=======start NormPut!======="
)
fmt
.
Println
(
"=======start NormPut!======="
)
for
i
:=
0
;
i
<
loopCount
;
i
++
{
for
i
:=
0
;
i
<
loopCount
;
i
++
{
NormPut
()
NormPut
(
cfg
)
time
.
Sleep
(
time
.
Second
)
time
.
Sleep
(
time
.
Second
)
}
}
...
@@ -503,7 +503,7 @@ func getprivkey(key string) crypto.PrivKey {
...
@@ -503,7 +503,7 @@ func getprivkey(key string) crypto.PrivKey {
return
priv
return
priv
}
}
func
prepareTxList
()
*
types
.
Transaction
{
func
prepareTxList
(
cfg
*
types
.
Chain33Config
)
*
types
.
Transaction
{
var
key
string
var
key
string
var
value
string
var
value
string
var
i
int
var
i
int
...
@@ -516,12 +516,13 @@ func prepareTxList() *types.Transaction {
...
@@ -516,12 +516,13 @@ func prepareTxList() *types.Transaction {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
return
tx
return
tx
}
}
func
NormPut
()
{
func
NormPut
(
cfg
*
types
.
Chain33Config
)
{
tx
:=
prepareTxList
()
tx
:=
prepareTxList
(
cfg
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/guess/rpc/guess_test.go
View file @
f221521c
...
@@ -363,7 +363,7 @@ func testGuessImp(t *testing.T) {
...
@@ -363,7 +363,7 @@ func testGuessImp(t *testing.T) {
fmt
.
Println
(
"=======start NormPut!======="
)
fmt
.
Println
(
"=======start NormPut!======="
)
for
i
:=
0
;
i
<
loopCount
;
i
++
{
for
i
:=
0
;
i
<
loopCount
;
i
++
{
NormPut
()
NormPut
(
cfg
)
time
.
Sleep
(
time
.
Second
)
time
.
Sleep
(
time
.
Second
)
}
}
...
@@ -721,7 +721,7 @@ func getprivkey(key string) crypto.PrivKey {
...
@@ -721,7 +721,7 @@ func getprivkey(key string) crypto.PrivKey {
return
priv
return
priv
}
}
func
prepareTxList
()
*
types
.
Transaction
{
func
prepareTxList
(
cfg
*
types
.
Chain33Config
)
*
types
.
Transaction
{
var
key
string
var
key
string
var
value
string
var
value
string
var
i
int
var
i
int
...
@@ -734,12 +734,13 @@ func prepareTxList() *types.Transaction {
...
@@ -734,12 +734,13 @@ func prepareTxList() *types.Transaction {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
"norm"
),
Payload
:
types
.
Encode
(
action
),
Fee
:
fee
}
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
To
=
address
.
ExecAddress
(
"norm"
)
tx
.
Nonce
=
random
.
Int63
()
tx
.
Nonce
=
random
.
Int63
()
tx
.
ChainID
=
cfg
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
tx
.
Sign
(
types
.
SECP256K1
,
getprivkey
(
"CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
))
return
tx
return
tx
}
}
func
NormPut
()
{
func
NormPut
(
cfg
*
types
.
Chain33Config
)
{
tx
:=
prepareTxList
()
tx
:=
prepareTxList
(
cfg
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
c
.
SendTransaction
(
context
.
Background
(),
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/paracross/commands/paracross.go
View file @
f221521c
...
@@ -842,6 +842,7 @@ func paraConfigCmd() *cobra.Command {
...
@@ -842,6 +842,7 @@ func paraConfigCmd() *cobra.Command {
Short
:
"parachain config cmd"
,
Short
:
"parachain config cmd"
,
}
}
cmd
.
AddCommand
(
paraStageConfigCmd
())
cmd
.
AddCommand
(
paraStageConfigCmd
())
cmd
.
AddCommand
(
issueCoinsCmd
())
return
cmd
return
cmd
}
}
...
@@ -1513,3 +1514,45 @@ func GetConsensDoneInfoCmd() *cobra.Command {
...
@@ -1513,3 +1514,45 @@ func GetConsensDoneInfoCmd() *cobra.Command {
addConsensDoneCmdFlags
(
cmd
)
addConsensDoneCmdFlags
(
cmd
)
return
cmd
return
cmd
}
}
func
issueCoinsCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"issue"
,
Short
:
"issue new coins by super manager"
,
Run
:
createIssueCoinsTx
,
}
addIssueCoinsFlags
(
cmd
)
return
cmd
}
func
addIssueCoinsFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"a"
,
0
,
"new issue amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
}
func
createIssueCoinsTx
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
coins
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
if
!
strings
.
HasPrefix
(
paraName
,
"user.p"
)
{
fmt
.
Fprintln
(
os
.
Stderr
,
"paraName is not right, paraName format like `user.p.guodun.`"
)
return
}
if
coins
==
0
{
fmt
.
Fprintln
(
os
.
Stderr
,
"coins should bigger than 0"
)
}
payload
:=
&
pt
.
ParacrossMinerAction
{
AddIssueCoins
:
int64
(
coins
)}
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
getRealExecName
(
paraName
,
pt
.
ParaX
),
ActionName
:
"Miner"
,
Payload
:
types
.
MustPBToJSON
(
payload
),
}
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.CreateTransaction"
,
params
,
nil
)
ctx
.
RunWithoutMarshal
()
}
plugin/dapp/paracross/executor/action.go
View file @
f221521c
...
@@ -1254,71 +1254,6 @@ func (a *action) CrossAssetTransfer(transfer *pt.CrossAssetTransfer) (*types.Rec
...
@@ -1254,71 +1254,6 @@ func (a *action) CrossAssetTransfer(transfer *pt.CrossAssetTransfer) (*types.Rec
return
receipt
,
nil
return
receipt
,
nil
}
}
//当前miner tx不需要校验上一个区块的衔接性,因为tx就是本节点发出,高度,preHash等都在本区块里面的blockchain做了校验
func
(
a
*
action
)
Miner
(
miner
*
pt
.
ParacrossMinerAction
)
(
*
types
.
Receipt
,
error
)
{
cfg
:=
a
.
api
.
GetConfig
()
if
miner
.
Status
.
Title
!=
cfg
.
GetTitle
()
||
miner
.
Status
.
MainBlockHash
==
nil
{
return
nil
,
pt
.
ErrParaMinerExecErr
}
var
logs
[]
*
types
.
ReceiptLog
var
receipt
=
&
pt
.
ReceiptParacrossMiner
{}
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pt
.
TyLogParacrossMiner
receipt
.
Status
=
miner
.
Status
log
.
Log
=
types
.
Encode
(
receipt
)
logs
=
append
(
logs
,
log
)
minerReceipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
nil
,
Logs
:
logs
}
//自共识分阶段使能,综合考虑挖矿奖励和共识分配奖励,判断是否自共识使能需要采用共识的高度,而不能采用当前区块高度a.height
//考虑自共识使能区块高度100,如果采用区块高度判断,则在100高度可能收到80~99的20条共识交易,这20条交易在100高度参与共识,则无奖励可分配,而且共识高度将是80而不是100
//采用共识高度miner.Status.Height判断,则严格执行了产生奖励和分配奖励,且共识高度从100开始
isSelfConsensOn
:=
miner
.
IsSelfConsensus
if
cfg
.
IsDappFork
(
a
.
height
,
pt
.
ParaX
,
pt
.
ForkParaSelfConsStages
)
{
var
err
error
isSelfConsensOn
,
err
=
isSelfConsOn
(
a
.
db
,
miner
.
Status
.
Height
)
if
err
!=
nil
&&
errors
.
Cause
(
err
)
!=
pt
.
ErrKeyNotExist
{
clog
.
Error
(
"paracross miner getConsensus "
,
"height"
,
miner
.
Status
.
Height
,
"err"
,
err
)
return
nil
,
err
}
}
//自共识后才挖矿
if
isSelfConsensOn
{
//增发coins到paracross合约中,只处理发放,不做分配
totalReward
:=
int64
(
0
)
coinReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinReward"
,
a
.
height
)
fundReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinDevFund"
,
a
.
height
)
if
coinReward
>
0
{
totalReward
+=
coinReward
}
if
fundReward
>
0
{
totalReward
+=
fundReward
}
decimalMode
:=
cfg
.
MIsEnable
(
"mver.consensus.paracross.decimalMode"
,
a
.
height
)
if
!
decimalMode
{
totalReward
*=
types
.
Coin
}
if
totalReward
>
0
{
issueReceipt
,
err
:=
a
.
coinsAccount
.
ExecIssueCoins
(
a
.
execaddr
,
totalReward
)
if
err
!=
nil
{
clog
.
Error
(
"paracross miner issue err"
,
"height"
,
miner
.
Status
.
Height
,
"execAddr"
,
a
.
execaddr
,
"amount"
,
totalReward
)
return
nil
,
err
}
minerReceipt
=
mergeReceipt
(
minerReceipt
,
issueReceipt
)
}
}
return
minerReceipt
,
nil
}
func
getTitleFrom
(
exec
[]
byte
)
([]
byte
,
error
)
{
func
getTitleFrom
(
exec
[]
byte
)
([]
byte
,
error
)
{
last
:=
bytes
.
LastIndex
(
exec
,
[]
byte
(
"."
))
last
:=
bytes
.
LastIndex
(
exec
,
[]
byte
(
"."
))
if
last
==
-
1
{
if
last
==
-
1
{
...
...
plugin/dapp/paracross/executor/exec.go
View file @
f221521c
...
@@ -73,7 +73,7 @@ func (e *Paracross) Exec_CrossAssetTransfer(payload *pt.CrossAssetTransfer, tx *
...
@@ -73,7 +73,7 @@ func (e *Paracross) Exec_CrossAssetTransfer(payload *pt.CrossAssetTransfer, tx *
//Exec_Miner miner tx exec process
//Exec_Miner miner tx exec process
func
(
e
*
Paracross
)
Exec_Miner
(
payload
*
pt
.
ParacrossMinerAction
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
func
(
e
*
Paracross
)
Exec_Miner
(
payload
*
pt
.
ParacrossMinerAction
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
if
index
!=
0
{
if
index
!=
0
&&
payload
.
AddIssueCoins
<=
0
{
return
nil
,
pt
.
ErrParaMinerBaseIndex
return
nil
,
pt
.
ErrParaMinerBaseIndex
}
}
cfg
:=
e
.
GetAPI
()
.
GetConfig
()
cfg
:=
e
.
GetAPI
()
.
GetConfig
()
...
...
plugin/dapp/paracross/executor/miner.go
0 → 100644
View file @
f221521c
// 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
executor
import
(
"github.com/33cn/chain33/types"
"github.com/33cn/plugin/plugin/dapp/paracross/executor/minerrewards"
pt
"github.com/33cn/plugin/plugin/dapp/paracross/types"
"github.com/pkg/errors"
)
//当前miner tx不需要校验上一个区块的衔接性,因为tx就是本节点发出,高度,preHash等都在本区块里面的blockchain做了校验
//note: 平行链的Miner从Height=1开始, 创世区块不挖矿
//因为bug原因,支持手动增发一部分coin到执行器地址,这部分coin不会对现有账户产生影响。因为转账到合约下的coin,同时会存到合约子账户下
func
(
a
*
action
)
Miner
(
miner
*
pt
.
ParacrossMinerAction
)
(
*
types
.
Receipt
,
error
)
{
cfg
:=
a
.
api
.
GetConfig
()
//增发coin
if
miner
.
AddIssueCoins
>
0
{
return
a
.
addIssueCoins
(
miner
.
AddIssueCoins
)
}
if
miner
.
Status
.
Title
!=
cfg
.
GetTitle
()
||
miner
.
Status
.
MainBlockHash
==
nil
{
return
nil
,
pt
.
ErrParaMinerExecErr
}
var
logs
[]
*
types
.
ReceiptLog
var
receipt
=
&
pt
.
ReceiptParacrossMiner
{}
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pt
.
TyLogParacrossMiner
receipt
.
Status
=
miner
.
Status
log
.
Log
=
types
.
Encode
(
receipt
)
logs
=
append
(
logs
,
log
)
minerReceipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
nil
,
Logs
:
logs
}
on
,
err
:=
a
.
isSelfConsensOn
(
miner
)
if
err
!=
nil
{
return
nil
,
err
}
//自共识后才挖矿
if
on
{
r
,
err
:=
a
.
issueCoins
(
miner
)
if
err
!=
nil
{
return
nil
,
err
}
minerReceipt
=
mergeReceipt
(
minerReceipt
,
r
)
}
return
minerReceipt
,
nil
}
// 主链走None执行器,只在平行链执行,只是平行链的manager 账户允许发行,目前也只是发行到paracross执行器,不会对个人账户任何影响
func
(
a
*
action
)
addIssueCoins
(
amount
int64
)
(
*
types
.
Receipt
,
error
)
{
cfg
:=
a
.
api
.
GetConfig
()
if
!
isSuperManager
(
cfg
,
a
.
fromaddr
)
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrNotAllow
,
"addr=%s,is not super manager"
,
a
.
fromaddr
)
}
issueReceipt
,
err
:=
a
.
coinsAccount
.
ExecIssueCoins
(
a
.
execaddr
,
amount
)
if
err
!=
nil
{
clog
.
Error
(
"paracross miner issue err"
,
"execAddr"
,
a
.
execaddr
,
"amount"
,
amount
)
return
nil
,
errors
.
Wrap
(
err
,
"issueCoins"
)
}
return
issueReceipt
,
nil
}
func
(
a
*
action
)
isSelfConsensOn
(
miner
*
pt
.
ParacrossMinerAction
)
(
bool
,
error
)
{
cfg
:=
a
.
api
.
GetConfig
()
//ForkParaInitMinerHeight高度后,默认全部挖矿,产生在paracross执行器地址,如果自共识分阶段,也只是分阶段奖励,挖矿一直产生
if
cfg
.
IsDappFork
(
a
.
height
,
pt
.
ParaX
,
pt
.
ForkParaFullMinerHeight
)
{
return
true
,
nil
}
isSelfConsensOn
:=
miner
.
IsSelfConsensus
//自共识分阶段使能,综合考虑挖矿奖励和共识分配奖励,判断是否自共识使能需要采用共识的高度,而不能采用当前区块高度a.height
//考虑自共识使能区块高度100,如果采用区块高度判断,则在100高度可能收到80~99的20条共识交易,这20条交易在100高度参与共识,则无奖励可分配,而且共识高度将是80而不是100
//采用共识高度miner.Status.Height判断,则严格执行了产生奖励和分配奖励,且共识高度从100开始
if
cfg
.
IsDappFork
(
a
.
height
,
pt
.
ParaX
,
pt
.
ForkParaSelfConsStages
)
{
var
err
error
isSelfConsensOn
,
err
=
isSelfConsOn
(
a
.
db
,
miner
.
Status
.
Height
)
if
err
!=
nil
&&
errors
.
Cause
(
err
)
!=
pt
.
ErrKeyNotExist
{
clog
.
Error
(
"paracross miner getConsensus "
,
"height"
,
miner
.
Status
.
Height
,
"err"
,
err
)
return
false
,
err
}
}
return
isSelfConsensOn
,
nil
}
func
(
a
*
action
)
issueCoins
(
miner
*
pt
.
ParacrossMinerAction
)
(
*
types
.
Receipt
,
error
)
{
cfg
:=
a
.
api
.
GetConfig
()
mode
:=
cfg
.
MGStr
(
"mver.consensus.paracross.minerMode"
,
a
.
height
)
if
_
,
ok
:=
minerrewards
.
MinerRewards
[
mode
];
!
ok
{
panic
(
"getTotalReward not be set depend on consensus.paracross.minerMode"
)
}
coinReward
,
coinFundReward
,
_
:=
minerrewards
.
MinerRewards
[
mode
]
.
GetConfigReward
(
cfg
,
a
.
height
)
totalReward
:=
coinReward
+
coinFundReward
if
totalReward
>
0
{
issueReceipt
,
err
:=
a
.
coinsAccount
.
ExecIssueCoins
(
a
.
execaddr
,
totalReward
)
if
err
!=
nil
{
clog
.
Error
(
"paracross miner issue err"
,
"height"
,
miner
.
Status
.
Height
,
"execAddr"
,
a
.
execaddr
,
"amount"
,
totalReward
)
return
nil
,
err
}
return
issueReceipt
,
nil
}
return
nil
,
nil
}
plugin/dapp/paracross/executor/minerrewards/nomal.go
0 → 100644
View file @
f221521c
package
minerrewards
import
(
"github.com/33cn/chain33/types"
pt
"github.com/33cn/plugin/plugin/dapp/paracross/types"
)
type
normal
struct
{}
func
init
()
{
register
(
"normal"
,
&
normal
{})
}
//获取配置的奖励数值
func
(
n
*
normal
)
GetConfigReward
(
cfg
*
types
.
Chain33Config
,
height
int64
)
(
int64
,
int64
,
int64
)
{
coinReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinReward"
,
height
)
fundReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinDevFund"
,
height
)
coinBaseReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinBaseReward"
,
height
)
if
coinReward
<
0
||
fundReward
<
0
||
coinBaseReward
<
0
{
panic
(
"para config consensus.paracross.coinReward should bigger than 0"
)
}
//decimalMode=false,意味着精简模式,需要乘1e8
decimalMode
:=
cfg
.
MIsEnable
(
"mver.consensus.paracross.decimalMode"
,
height
)
if
!
decimalMode
{
coinReward
*=
types
.
Coin
fundReward
*=
types
.
Coin
coinBaseReward
*=
types
.
Coin
}
//防止coinBaseReward 设置出错场景, coinBaseReward 一定要比coinReward小
if
coinBaseReward
>=
coinReward
{
coinBaseReward
=
coinReward
/
10
}
return
coinReward
,
fundReward
,
coinBaseReward
}
//奖励矿工算法
func
(
n
*
normal
)
RewardMiners
(
cfg
*
types
.
Chain33Config
,
coinReward
int64
,
miners
[]
string
,
height
int64
)
([]
*
pt
.
ParaMinerReward
,
int64
)
{
//找零
var
change
int64
var
rewards
[]
*
pt
.
ParaMinerReward
//分配给矿工的平均奖励
minerUnit
:=
coinReward
/
int64
(
len
(
miners
))
if
minerUnit
>
0
{
for
_
,
m
:=
range
miners
{
r
:=
&
pt
.
ParaMinerReward
{
Addr
:
m
,
Amount
:
minerUnit
}
rewards
=
append
(
rewards
,
r
)
}
//如果不等分转到发展基金
change
=
coinReward
%
minerUnit
}
return
rewards
,
change
}
plugin/dapp/paracross/executor/minerrewards/register.go
0 → 100644
View file @
f221521c
package
minerrewards
import
(
"fmt"
"github.com/33cn/chain33/types"
pt
"github.com/33cn/plugin/plugin/dapp/paracross/types"
)
type
RewardPolicy
interface
{
GetConfigReward
(
cfg
*
types
.
Chain33Config
,
height
int64
)
(
int64
,
int64
,
int64
)
RewardMiners
(
cfg
*
types
.
Chain33Config
,
coinReward
int64
,
miners
[]
string
,
height
int64
)
([]
*
pt
.
ParaMinerReward
,
int64
)
}
var
MinerRewards
=
make
(
map
[
string
]
RewardPolicy
)
func
register
(
ty
string
,
policy
RewardPolicy
)
{
if
_
,
ok
:=
MinerRewards
[
ty
];
ok
{
panic
(
fmt
.
Sprintf
(
"paracross minerreward ty=%s registered"
,
ty
))
}
MinerRewards
[
ty
]
=
policy
}
plugin/dapp/paracross/executor/reward.go
View file @
f221521c
...
@@ -3,6 +3,8 @@ package executor
...
@@ -3,6 +3,8 @@ package executor
import
(
import
(
"bytes"
"bytes"
"github.com/33cn/plugin/plugin/dapp/paracross/executor/minerrewards"
"github.com/pkg/errors"
"github.com/pkg/errors"
dbm
"github.com/33cn/chain33/common/db"
dbm
"github.com/33cn/chain33/common/db"
...
@@ -41,27 +43,35 @@ func (a *action) getBindAddrs(nodes []string, statusHeight int64) (*pt.ParaNodeB
...
@@ -41,27 +43,35 @@ func (a *action) getBindAddrs(nodes []string, statusHeight int64) (*pt.ParaNodeB
}
}
func
(
a
*
action
)
rewardSuperNode
(
coinReward
int64
,
miners
[]
string
,
statusHeight
int64
)
(
*
types
.
Receipt
,
int64
,
error
)
{
func
(
a
*
action
)
rewardSuperNode
(
coinReward
int64
,
miners
[]
string
,
statusHeight
int64
)
(
*
types
.
Receipt
,
int64
,
error
)
{
//分配给矿工的单位奖励
cfg
:=
a
.
api
.
GetConfig
()
minerUnit
:=
coinReward
/
int64
(
len
(
miners
))
var
change
int64
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
if
minerUnit
>
0
{
//如果不等分转到发展基金
change
=
coinReward
%
minerUnit
for
_
,
addr
:=
range
miners
{
rep
,
err
:=
a
.
coinsAccount
.
ExecDeposit
(
addr
,
a
.
execaddr
,
minerUnit
)
if
err
!=
nil
{
mode
:=
cfg
.
MGStr
(
"mver.consensus.paracross.minerMode"
,
a
.
height
)
clog
.
Error
(
"paracross super node reward deposit err"
,
"height"
,
statusHeight
,
"execAddr"
,
a
.
execaddr
,
"minerAddr"
,
addr
,
"amount"
,
minerUnit
,
"err"
,
err
)
rewards
,
change
:=
minerrewards
.
MinerRewards
[
mode
]
.
RewardMiners
(
cfg
,
coinReward
,
miners
,
statusHeight
)
return
nil
,
0
,
err
resp
,
err
:=
a
.
rewardDeposit
(
rewards
,
statusHeight
)
}
if
err
!=
nil
{
receipt
=
mergeReceipt
(
receipt
,
rep
)
return
nil
,
0
,
err
}
}
}
receipt
=
mergeReceipt
(
receipt
,
resp
)
return
receipt
,
change
,
nil
return
receipt
,
change
,
nil
}
}
func
(
a
*
action
)
rewardDeposit
(
rewards
[]
*
pt
.
ParaMinerReward
,
statusHeight
int64
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
for
_
,
v
:=
range
rewards
{
rep
,
err
:=
a
.
coinsAccount
.
ExecDeposit
(
v
.
Addr
,
a
.
execaddr
,
v
.
Amount
)
if
err
!=
nil
{
clog
.
Error
(
"paracross super node reward deposit err"
,
"height"
,
statusHeight
,
"execAddr"
,
a
.
execaddr
,
"minerAddr"
,
v
.
Addr
,
"amount"
,
v
.
Amount
,
"err"
,
err
)
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
rep
)
}
return
receipt
,
nil
}
//奖励委托挖矿账户
//奖励委托挖矿账户
func
(
a
*
action
)
rewardBindAddr
(
coinReward
int64
,
bindList
*
pt
.
ParaNodeBindList
,
statusHeight
int64
)
(
*
types
.
Receipt
,
int64
,
error
)
{
func
(
a
*
action
)
rewardBindAddr
(
coinReward
int64
,
bindList
*
pt
.
ParaNodeBindList
,
statusHeight
int64
)
(
*
types
.
Receipt
,
int64
,
error
)
{
if
coinReward
<=
0
{
if
coinReward
<=
0
{
...
@@ -107,24 +117,18 @@ func (a *action) rewardBindAddr(coinReward int64, bindList *pt.ParaNodeBindList,
...
@@ -107,24 +117,18 @@ func (a *action) rewardBindAddr(coinReward int64, bindList *pt.ParaNodeBindList,
func
(
a
*
action
)
reward
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
reward
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
)
(
*
types
.
Receipt
,
error
)
{
//获取挖矿相关配置,这里需注意是共识的高度,而不是交易的高度
//获取挖矿相关配置,这里需注意是共识的高度,而不是交易的高度
cfg
:=
a
.
api
.
GetConfig
()
cfg
:=
a
.
api
.
GetConfig
()
coinReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinReward"
,
nodeStatus
.
Height
)
//此分叉后 0高度不产生挖矿奖励,也就是以后的新版本默认0高度不产生挖矿奖励
fundReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinDevFund"
,
nodeStatus
.
Height
)
if
nodeStatus
.
Height
==
0
&&
cfg
.
IsDappFork
(
nodeStatus
.
Height
,
pt
.
ParaX
,
pt
.
ForkParaFullMinerHeight
)
{
coinBaseReward
:=
cfg
.
MGInt
(
"mver.consensus.paracross.coinBaseReward"
,
nodeStatus
.
Height
)
return
nil
,
nil
decimalMode
:=
cfg
.
MIsEnable
(
"mver.consensus.paracross.decimalMode"
,
nodeStatus
.
Height
)
if
!
decimalMode
{
coinReward
*=
types
.
Coin
fundReward
*=
types
.
Coin
coinBaseReward
*=
types
.
Coin
}
}
fundAddr
:=
cfg
.
MGStr
(
"mver.consensus.fundKeyAddr"
,
nodeStatus
.
Height
)
mode
:=
cfg
.
MGStr
(
"mver.consensus.paracross.minerMode"
,
a
.
height
)
if
_
,
ok
:=
minerrewards
.
MinerRewards
[
mode
];
!
ok
{
//防止coinBaseReward 设置出错场景, coinBaseReward 一定要比coinReward小
panic
(
"getReward not be set depend on consensus.paracross.minerMode"
)
if
coinBaseReward
>=
coinReward
{
coinBaseReward
=
coinReward
/
10
}
}
coinReward
,
fundReward
,
coinBaseReward
:=
minerrewards
.
MinerRewards
[
mode
]
.
GetConfigReward
(
cfg
,
nodeStatus
.
Height
)
fundAddr
:=
cfg
.
MGStr
(
"mver.consensus.fundKeyAddr"
,
nodeStatus
.
Height
)
//超级节点地址
//超级节点地址
nodeAddrs
:=
getSuperNodes
(
stat
.
Details
,
nodeStatus
.
BlockHash
)
nodeAddrs
:=
getSuperNodes
(
stat
.
Details
,
nodeStatus
.
BlockHash
)
//委托地址
//委托地址
...
...
plugin/dapp/paracross/proto/paracross.proto
View file @
f221521c
...
@@ -321,6 +321,12 @@ message ParacrossCommitAction {
...
@@ -321,6 +321,12 @@ message ParacrossCommitAction {
message
ParacrossMinerAction
{
message
ParacrossMinerAction
{
ParacrossNodeStatus
status
=
1
;
ParacrossNodeStatus
status
=
1
;
bool
isSelfConsensus
=
2
;
bool
isSelfConsensus
=
2
;
int64
addIssueCoins
=
3
;
}
message
ParaMinerReward
{
string
addr
=
1
;
int64
amount
=
2
;
}
}
message
CrossAssetTransfer
{
message
CrossAssetTransfer
{
...
...
plugin/dapp/paracross/testnode/cfg.go
View file @
f221521c
...
@@ -97,6 +97,7 @@ targetTimePerBlock = 16
...
@@ -97,6 +97,7 @@ targetTimePerBlock = 16
[mver.consensus.paracross]
[mver.consensus.paracross]
coinReward = 18
coinReward = 18
coinDevFund = 12
coinDevFund = 12
minerMode="normal"
[consensus.sub.para]
[consensus.sub.para]
...
...
plugin/dapp/paracross/types/paracross.go
View file @
f221521c
...
@@ -260,6 +260,7 @@ func CreateRawMinerTx(cfg *types.Chain33Config, value *ParacrossMinerAction) (*t
...
@@ -260,6 +260,7 @@ func CreateRawMinerTx(cfg *types.Chain33Config, value *ParacrossMinerAction) (*t
Payload
:
types
.
Encode
(
action
),
Payload
:
types
.
Encode
(
action
),
Nonce
:
0
,
//for consensus purpose, block hash need same, different auth node need keep totally same vote tx
Nonce
:
0
,
//for consensus purpose, block hash need same, different auth node need keep totally same vote tx
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
ParaX
)),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
ParaX
)),
ChainID
:
cfg
.
GetChainID
(),
}
}
err
:=
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
err
:=
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/paracross/types/paracross.pb.go
View file @
f221521c
This diff is collapsed.
Click to expand it.
plugin/dapp/paracross/types/type.go
View file @
f221521c
...
@@ -28,6 +28,8 @@ var (
...
@@ -28,6 +28,8 @@ var (
ForkParaSelfConsStages
=
"ForkParaSelfConsStages"
ForkParaSelfConsStages
=
"ForkParaSelfConsStages"
// ForkParaAssetTransferRbk 平行链资产转移平行链失败主链回滚
// ForkParaAssetTransferRbk 平行链资产转移平行链失败主链回滚
ForkParaAssetTransferRbk
=
"ForkParaAssetTransferRbk"
ForkParaAssetTransferRbk
=
"ForkParaAssetTransferRbk"
// ForkParaFullMinerHeight 平行链全挖矿开启高度
ForkParaFullMinerHeight
=
"ForkParaFullMinerHeight"
// ParaConsSubConf sub
// ParaConsSubConf sub
ParaConsSubConf
=
"consensus.sub.para"
ParaConsSubConf
=
"consensus.sub.para"
...
@@ -59,6 +61,7 @@ func InitFork(cfg *types.Chain33Config) {
...
@@ -59,6 +61,7 @@ func InitFork(cfg *types.Chain33Config) {
//只在平行链启用
//只在平行链启用
cfg
.
RegisterDappFork
(
ParaX
,
ForkParaSelfConsStages
,
types
.
MaxHeight
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkParaSelfConsStages
,
types
.
MaxHeight
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkParaFullMinerHeight
,
types
.
MaxHeight
)
}
}
//InitExecutor ...
//InitExecutor ...
...
...
plugin/dapp/privacy/wallet/privacy.go
View file @
f221521c
...
@@ -537,6 +537,7 @@ func (policy *privacyPolicy) createPublic2PrivacyTx(req *privacytypes.ReqCreateP
...
@@ -537,6 +537,7 @@ func (policy *privacyPolicy) createPublic2PrivacyTx(req *privacytypes.ReqCreateP
Payload
:
types
.
Encode
(
action
),
Payload
:
types
.
Encode
(
action
),
Nonce
:
policy
.
getWalletOperate
()
.
Nonce
(),
Nonce
:
policy
.
getWalletOperate
()
.
Nonce
(),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
privacytypes
.
PrivacyX
)),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
privacytypes
.
PrivacyX
)),
ChainID
:
cfg
.
GetChainID
(),
}
}
tx
.
SetExpire
(
cfg
,
time
.
Duration
(
req
.
Expire
))
tx
.
SetExpire
(
cfg
,
time
.
Duration
(
req
.
Expire
))
tx
.
Signature
=
&
types
.
Signature
{
tx
.
Signature
=
&
types
.
Signature
{
...
@@ -621,6 +622,7 @@ func (policy *privacyPolicy) createPrivacy2PrivacyTx(req *privacytypes.ReqCreate
...
@@ -621,6 +622,7 @@ func (policy *privacyPolicy) createPrivacy2PrivacyTx(req *privacytypes.ReqCreate
Fee
:
privacytypes
.
PrivacyTxFee
,
Fee
:
privacytypes
.
PrivacyTxFee
,
Nonce
:
policy
.
getWalletOperate
()
.
Nonce
(),
Nonce
:
policy
.
getWalletOperate
()
.
Nonce
(),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
privacytypes
.
PrivacyX
)),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
privacytypes
.
PrivacyX
)),
ChainID
:
cfg
.
GetChainID
(),
}
}
tx
.
SetExpire
(
cfg
,
time
.
Duration
(
req
.
Expire
))
tx
.
SetExpire
(
cfg
,
time
.
Duration
(
req
.
Expire
))
if
!
isMainetCoins
{
if
!
isMainetCoins
{
...
@@ -711,6 +713,7 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP
...
@@ -711,6 +713,7 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP
Fee
:
privacytypes
.
PrivacyTxFee
,
Fee
:
privacytypes
.
PrivacyTxFee
,
Nonce
:
policy
.
getWalletOperate
()
.
Nonce
(),
Nonce
:
policy
.
getWalletOperate
()
.
Nonce
(),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
privacytypes
.
PrivacyX
)),
To
:
address
.
ExecAddress
(
cfg
.
ExecName
(
privacytypes
.
PrivacyX
)),
ChainID
:
cfg
.
GetChainID
(),
}
}
tx
.
SetExpire
(
cfg
,
time
.
Duration
(
req
.
Expire
))
tx
.
SetExpire
(
cfg
,
time
.
Duration
(
req
.
Expire
))
if
!
isMainetCoins
{
if
!
isMainetCoins
{
...
...
plugin/dapp/privacy/wallet/privacy_test.go
View file @
f221521c
...
@@ -190,6 +190,7 @@ func (mock *PrivacyMock) CreateUTXOs(sender string, pubkeypair string, amount in
...
@@ -190,6 +190,7 @@ func (mock *PrivacyMock) CreateUTXOs(sender string, pubkeypair string, amount in
}
}
func
(
mock
*
PrivacyMock
)
createPublic2PrivacyTx
(
req
*
ty
.
ReqCreatePrivacyTx
)
*
types
.
Transaction
{
func
(
mock
*
PrivacyMock
)
createPublic2PrivacyTx
(
req
*
ty
.
ReqCreatePrivacyTx
)
*
types
.
Transaction
{
cfg
:=
mock
.
walletOp
.
GetAPI
()
.
GetConfig
()
viewPubSlice
,
spendPubSlice
,
err
:=
parseViewSpendPubKeyPair
(
req
.
GetPubkeypair
())
viewPubSlice
,
spendPubSlice
,
err
:=
parseViewSpendPubKeyPair
(
req
.
GetPubkeypair
())
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
return
nil
...
@@ -217,8 +218,8 @@ func (mock *PrivacyMock) createPublic2PrivacyTx(req *ty.ReqCreatePrivacyTx) *typ
...
@@ -217,8 +218,8 @@ func (mock *PrivacyMock) createPublic2PrivacyTx(req *ty.ReqCreatePrivacyTx) *typ
Payload
:
types
.
Encode
(
action
),
Payload
:
types
.
Encode
(
action
),
Nonce
:
mock
.
walletOp
.
Nonce
(),
Nonce
:
mock
.
walletOp
.
Nonce
(),
To
:
address
.
ExecAddress
(
ty
.
PrivacyX
),
To
:
address
.
ExecAddress
(
ty
.
PrivacyX
),
ChainID
:
cfg
.
GetChainID
(),
}
}
cfg
:=
mock
.
walletOp
.
GetAPI
()
.
GetConfig
()
txSize
:=
types
.
Size
(
tx
)
+
ty
.
SignatureSize
txSize
:=
types
.
Size
(
tx
)
+
ty
.
SignatureSize
realFee
:=
int64
((
txSize
+
1023
)
>>
ty
.
Size1Kshiftlen
)
*
cfg
.
GetMinTxFeeRate
()
realFee
:=
int64
((
txSize
+
1023
)
>>
ty
.
Size1Kshiftlen
)
*
cfg
.
GetMinTxFeeRate
()
tx
.
Fee
=
realFee
tx
.
Fee
=
realFee
...
...
plugin/dapp/relay/cmd/relayd/relayd/relayd.go
View file @
f221521c
...
@@ -318,17 +318,23 @@ func (r *Relayd) syncBlockHeaders() {
...
@@ -318,17 +318,23 @@ func (r *Relayd) syncBlockHeaders() {
}
}
func
(
r
*
Relayd
)
transaction
(
payload
[]
byte
)
*
types
.
Transaction
{
func
(
r
*
Relayd
)
transaction
(
payload
[]
byte
)
*
types
.
Transaction
{
var
chainID
int32
minFee
:=
types
.
DefaultMinFee
//chain33的配置中获取chainID和minFee
if
r
.
config
.
Chain33Cfg
!=
nil
{
chainID
=
r
.
config
.
Chain33Cfg
.
GetChainID
()
minFee
=
r
.
config
.
Chain33Cfg
.
GetMinTxFeeRate
()
}
tx
:=
&
types
.
Transaction
{
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
ty
.
RelayX
),
Execer
:
[]
byte
(
ty
.
RelayX
),
Payload
:
payload
,
Payload
:
payload
,
Nonce
:
rand
.
Int63
(),
Nonce
:
rand
.
Int63
(),
To
:
address
.
ExecAddress
(
ty
.
RelayX
),
To
:
address
.
ExecAddress
(
ty
.
RelayX
),
ChainID
:
chainID
,
}
}
minFee
:=
types
.
DefaultMinFee
if
r
.
config
.
Chain33Cfg
!=
nil
{
minFee
=
r
.
config
.
Chain33Cfg
.
GetMinTxFeeRate
()
}
fee
,
_
:=
tx
.
GetRealFee
(
minFee
)
fee
,
_
:=
tx
.
GetRealFee
(
minFee
)
tx
.
Fee
=
fee
tx
.
Fee
=
fee
tx
.
Sign
(
types
.
SECP256K1
,
r
.
privateKey
)
tx
.
Sign
(
types
.
SECP256K1
,
r
.
privateKey
)
...
...
plugin/dapp/relay/executor/relay_test.go
View file @
f221521c
...
@@ -139,6 +139,7 @@ func (s *suiteRelay) TestExec_1() {
...
@@ -139,6 +139,7 @@ func (s *suiteRelay) TestExec_1() {
tx
.
Execer
=
[]
byte
(
ty
.
RelayX
)
tx
.
Execer
=
[]
byte
(
ty
.
RelayX
)
tx
.
To
=
address
.
ExecAddress
(
ty
.
RelayX
)
tx
.
To
=
address
.
ExecAddress
(
ty
.
RelayX
)
tx
.
Nonce
=
1
//for different order id
tx
.
Nonce
=
1
//for different order id
tx
.
ChainID
=
chainTestCfg
.
GetChainID
()
tx
.
Payload
=
types
.
Encode
(
sell
)
tx
.
Payload
=
types
.
Encode
(
sell
)
tx
.
Sign
(
types
.
SECP256K1
,
privFrom
)
tx
.
Sign
(
types
.
SECP256K1
,
privFrom
)
...
@@ -489,6 +490,8 @@ func (s *suiteBtcHeader) TestSaveBtcHead_1() {
...
@@ -489,6 +490,8 @@ func (s *suiteBtcHeader) TestSaveBtcHead_1() {
tx
.
Execer
=
[]
byte
(
ty
.
RelayX
)
tx
.
Execer
=
[]
byte
(
ty
.
RelayX
)
tx
.
To
=
address
.
ExecAddress
(
ty
.
RelayX
)
tx
.
To
=
address
.
ExecAddress
(
ty
.
RelayX
)
tx
.
Nonce
=
2
//for different order id
tx
.
Nonce
=
2
//for different order id
tx
.
ChainID
=
chainTestCfg
.
GetChainID
()
tx
.
Payload
=
types
.
Encode
(
sell
)
tx
.
Payload
=
types
.
Encode
(
sell
)
tx
.
Sign
(
types
.
SECP256K1
,
privFrom
)
tx
.
Sign
(
types
.
SECP256K1
,
privFrom
)
...
...
plugin/dapp/token/executor/token_new_test.go
View file @
f221521c
...
@@ -164,12 +164,14 @@ func TestPrecreate(t *testing.T) {
...
@@ -164,12 +164,14 @@ func TestPrecreate(t *testing.T) {
Ty
:
pty
.
TokenActionPreCreate
,
Ty
:
pty
.
TokenActionPreCreate
,
Value
:
&
pty
.
TokenAction_TokenPreCreate
{
TokenPreCreate
:
v
},
Value
:
&
pty
.
TokenAction_TokenPreCreate
{
TokenPreCreate
:
v
},
}
}
version
,
_
:=
mainClient
.
Version
(
context
.
Background
(),
nil
)
tx
:=
&
types
.
Transaction
{
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
execName
),
Execer
:
[]
byte
(
execName
),
Payload
:
types
.
Encode
(
precreate
),
Payload
:
types
.
Encode
(
precreate
),
Fee
:
feeForToken
,
Fee
:
feeForToken
,
Nonce
:
r
.
Int63
(),
Nonce
:
r
.
Int63
(),
To
:
address
.
ExecAddress
(
execName
),
To
:
address
.
ExecAddress
(
execName
),
ChainID
:
version
.
GetChainID
(),
}
}
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
...
@@ -205,12 +207,15 @@ func TestFinish(t *testing.T) {
...
@@ -205,12 +207,15 @@ func TestFinish(t *testing.T) {
Ty
:
pty
.
TokenActionFinishCreate
,
Ty
:
pty
.
TokenActionFinishCreate
,
Value
:
&
pty
.
TokenAction_TokenFinishCreate
{
TokenFinishCreate
:
v
},
Value
:
&
pty
.
TokenAction_TokenFinishCreate
{
TokenFinishCreate
:
v
},
}
}
version
,
_
:=
mainClient
.
Version
(
context
.
Background
(),
nil
)
tx
:=
&
types
.
Transaction
{
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
execName
),
Execer
:
[]
byte
(
execName
),
Payload
:
types
.
Encode
(
finish
),
Payload
:
types
.
Encode
(
finish
),
Fee
:
feeForToken
,
Fee
:
feeForToken
,
Nonce
:
r
.
Int63
(),
Nonce
:
r
.
Int63
(),
To
:
address
.
ExecAddress
(
execName
),
To
:
address
.
ExecAddress
(
execName
),
ChainID
:
version
.
GetChainID
(),
}
}
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
...
@@ -246,6 +251,9 @@ func TestTransferToken(t *testing.T) {
...
@@ -246,6 +251,9 @@ func TestTransferToken(t *testing.T) {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
execName
),
Payload
:
types
.
Encode
(
transfer
),
Fee
:
fee
,
To
:
addrexec
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
execName
),
Payload
:
types
.
Encode
(
transfer
),
Fee
:
fee
,
To
:
addrexec
}
tx
.
Nonce
=
r
.
Int63
()
tx
.
Nonce
=
r
.
Int63
()
version
,
_
:=
mainClient
.
Version
(
context
.
Background
(),
nil
)
tx
.
ChainID
=
version
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
reply
,
err
:=
mainClient
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
mainClient
.
SendTransaction
(
context
.
Background
(),
tx
)
...
@@ -326,6 +334,10 @@ func TestTokenMint(t *testing.T) {
...
@@ -326,6 +334,10 @@ func TestTokenMint(t *testing.T) {
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
execName
),
Payload
:
types
.
Encode
(
transfer
),
Fee
:
fee
,
To
:
addrexec
}
tx
:=
&
types
.
Transaction
{
Execer
:
[]
byte
(
execName
),
Payload
:
types
.
Encode
(
transfer
),
Fee
:
fee
,
To
:
addrexec
}
tx
.
Nonce
=
r
.
Int63
()
tx
.
Nonce
=
r
.
Int63
()
version
,
_
:=
mainClient
.
Version
(
context
.
Background
(),
nil
)
tx
.
ChainID
=
version
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
tx
.
Sign
(
types
.
SECP256K1
,
privkey
)
reply
,
err
:=
mainClient
.
SendTransaction
(
context
.
Background
(),
tx
)
reply
,
err
:=
mainClient
.
SendTransaction
(
context
.
Background
(),
tx
)
...
...
plugin/dapp/unfreeze/types/types.go
View file @
f221521c
...
@@ -147,6 +147,7 @@ func CreateUnfreezeCreateTx(cfg *types.Chain33Config, title string, parm *Unfree
...
@@ -147,6 +147,7 @@ func CreateUnfreezeCreateTx(cfg *types.Chain33Config, title string, parm *Unfree
Payload
:
types
.
Encode
(
create
),
Payload
:
types
.
Encode
(
create
),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
To
:
address
.
ExecAddress
(
getRealExecName
(
cfg
,
cfg
.
GetParaName
())),
To
:
address
.
ExecAddress
(
getRealExecName
(
cfg
,
cfg
.
GetParaName
())),
ChainID
:
cfg
.
GetChainID
(),
}
}
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
return
tx
,
nil
return
tx
,
nil
...
@@ -176,6 +177,7 @@ func CreateUnfreezeWithdrawTx(cfg *types.Chain33Config, title string, parm *Unfr
...
@@ -176,6 +177,7 @@ func CreateUnfreezeWithdrawTx(cfg *types.Chain33Config, title string, parm *Unfr
Payload
:
types
.
Encode
(
withdraw
),
Payload
:
types
.
Encode
(
withdraw
),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
To
:
address
.
ExecAddress
(
getRealExecName
(
cfg
,
cfg
.
GetParaName
())),
To
:
address
.
ExecAddress
(
getRealExecName
(
cfg
,
cfg
.
GetParaName
())),
ChainID
:
cfg
.
GetChainID
(),
}
}
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
return
tx
,
nil
return
tx
,
nil
...
@@ -205,6 +207,7 @@ func CreateUnfreezeTerminateTx(cfg *types.Chain33Config, title string, parm *Unf
...
@@ -205,6 +207,7 @@ func CreateUnfreezeTerminateTx(cfg *types.Chain33Config, title string, parm *Unf
Payload
:
types
.
Encode
(
terminate
),
Payload
:
types
.
Encode
(
terminate
),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
Nonce
:
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
.
Int63
(),
To
:
address
.
ExecAddress
(
getRealExecName
(
cfg
,
cfg
.
GetParaName
())),
To
:
address
.
ExecAddress
(
getRealExecName
(
cfg
,
cfg
.
GetParaName
())),
ChainID
:
cfg
.
GetChainID
(),
}
}
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
tx
.
SetRealFee
(
cfg
.
GetMinTxFeeRate
())
return
tx
,
nil
return
tx
,
nil
...
...
plugin/dapp/wasm/executor/exec.go
View file @
f221521c
...
@@ -74,7 +74,6 @@ func (w *Wasm) Exec_Create(payload *types2.WasmCreate, tx *types.Transaction, in
...
@@ -74,7 +74,6 @@ func (w *Wasm) Exec_Create(payload *types2.WasmCreate, tx *types.Transaction, in
}
}
func
(
w
*
Wasm
)
Exec_Call
(
payload
*
types2
.
WasmCall
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
func
(
w
*
Wasm
)
Exec_Call
(
payload
*
types2
.
WasmCall
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
log
.
Info
(
"into wasm Exec_Call..."
)
if
payload
==
nil
{
if
payload
==
nil
{
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
...
@@ -83,18 +82,26 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
...
@@ -83,18 +82,26 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
}
}
w
.
stateKVC
=
dapp
.
NewKVCreator
(
w
.
GetStateDB
(),
calcStatePrefix
(
payload
.
Contract
),
nil
)
w
.
stateKVC
=
dapp
.
NewKVCreator
(
w
.
GetStateDB
(),
calcStatePrefix
(
payload
.
Contract
),
nil
)
code
,
err
:=
w
.
stateKVC
.
GetNoPrefix
(
contractKey
(
payload
.
Contract
))
var
vm
*
exec
.
VirtualMachine
if
err
!=
nil
{
var
ok
bool
return
nil
,
err
if
vm
,
ok
=
w
.
VMCache
[
payload
.
Contract
];
!
ok
{
}
code
,
err
:=
w
.
stateKVC
.
GetNoPrefix
(
contractKey
(
payload
.
Contract
))
vm
,
err
:=
exec
.
NewVirtualMachine
(
code
,
exec
.
VMConfig
{
if
err
!=
nil
{
DefaultMemoryPages
:
128
,
return
nil
,
err
DefaultTableSize
:
128
,
}
DisableFloatingPoint
:
true
,
vm
,
err
=
exec
.
NewVirtualMachine
(
code
,
exec
.
VMConfig
{
GasLimit
:
uint64
(
tx
.
Fee
),
DefaultMemoryPages
:
128
,
},
new
(
Resolver
),
&
compiler
.
SimpleGasPolicy
{
GasPerInstruction
:
1
})
DefaultTableSize
:
128
,
if
err
!=
nil
{
DisableFloatingPoint
:
true
,
return
nil
,
err
GasLimit
:
uint64
(
tx
.
Fee
),
},
new
(
Resolver
),
&
compiler
.
SimpleGasPolicy
{
GasPerInstruction
:
1
})
if
err
!=
nil
{
return
nil
,
err
}
w
.
VMCache
[
payload
.
Contract
]
=
vm
}
else
{
vm
.
Config
.
GasLimit
=
uint64
(
tx
.
Fee
)
vm
.
Gas
=
0
}
}
// Get the function ID of the entry function to be executed.
// Get the function ID of the entry function to be executed.
...
@@ -115,7 +122,6 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
...
@@ -115,7 +122,6 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
var
kvs
[]
*
types
.
KeyValue
var
kvs
[]
*
types
.
KeyValue
kvs
=
append
(
kvs
,
w
.
kvs
...
)
kvs
=
append
(
kvs
,
w
.
kvs
...
)
kvs
=
append
(
kvs
,
w
.
stateKVC
.
KVList
()
...
)
kvs
=
append
(
kvs
,
w
.
stateKVC
.
KVList
()
...
)
...
@@ -124,7 +130,7 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
...
@@ -124,7 +130,7 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
logs
=
append
(
logs
,
&
types
.
ReceiptLog
{
Ty
:
types2
.
TyLogWasmCall
,
Log
:
types
.
Encode
(
&
types2
.
CallContractLog
{
logs
=
append
(
logs
,
&
types
.
ReceiptLog
{
Ty
:
types2
.
TyLogWasmCall
,
Log
:
types
.
Encode
(
&
types2
.
CallContractLog
{
Contract
:
payload
.
Contract
,
Contract
:
payload
.
Contract
,
Method
:
payload
.
Method
,
Method
:
payload
.
Method
,
Result
:
ret
,
Result
:
int32
(
ret
)
,
})})
})})
logs
=
append
(
logs
,
w
.
receiptLogs
...
)
logs
=
append
(
logs
,
w
.
receiptLogs
...
)
logs
=
append
(
logs
,
&
types
.
ReceiptLog
{
Ty
:
types2
.
TyLogCustom
,
Log
:
types
.
Encode
(
&
types2
.
CustomLog
{
logs
=
append
(
logs
,
&
types
.
ReceiptLog
{
Ty
:
types2
.
TyLogCustom
,
Log
:
types
.
Encode
(
&
types2
.
CustomLog
{
...
@@ -142,7 +148,7 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
...
@@ -142,7 +148,7 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
KV
:
kvs
,
KV
:
kvs
,
Logs
:
logs
,
Logs
:
logs
,
}
}
if
ret
<
0
{
if
int32
(
ret
)
<
0
||
int16
(
ret
)
<
0
{
receipt
.
Ty
=
types
.
ExecPack
receipt
.
Ty
=
types
.
ExecPack
}
}
...
...
plugin/dapp/wasm/executor/wasm.go
View file @
f221521c
...
@@ -6,6 +6,7 @@ import (
...
@@ -6,6 +6,7 @@ import (
drivers
"github.com/33cn/chain33/system/dapp"
drivers
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
types2
"github.com/33cn/plugin/plugin/dapp/wasm/types"
types2
"github.com/33cn/plugin/plugin/dapp/wasm/types"
"github.com/perlin-network/life/exec"
)
)
var
driverName
=
types2
.
WasmX
var
driverName
=
types2
.
WasmX
...
@@ -36,10 +37,13 @@ type Wasm struct {
...
@@ -36,10 +37,13 @@ type Wasm struct {
customLogs
[]
string
customLogs
[]
string
execAddr
string
execAddr
string
contractName
string
contractName
string
VMCache
map
[
string
]
*
exec
.
VirtualMachine
}
}
func
newWasm
()
drivers
.
Driver
{
func
newWasm
()
drivers
.
Driver
{
d
:=
&
Wasm
{}
d
:=
&
Wasm
{
VMCache
:
make
(
map
[
string
]
*
exec
.
VirtualMachine
),
}
d
.
SetChild
(
d
)
d
.
SetChild
(
d
)
d
.
SetExecutorType
(
types
.
LoadExecutorType
(
driverName
))
d
.
SetExecutorType
(
types
.
LoadExecutorType
(
driverName
))
return
d
return
d
...
...
plugin/dapp/wasm/executor/wasm_test.go
View file @
f221521c
package
executor
package
executor
import
(
import
(
"encoding/hex"
"io/ioutil"
"io/ioutil"
"strings"
"strings"
"testing"
"testing"
...
@@ -41,10 +42,54 @@ func init() {
...
@@ -41,10 +42,54 @@ func init() {
Init
(
types2
.
WasmX
,
cfg
,
nil
)
Init
(
types2
.
WasmX
,
cfg
,
nil
)
}
}
func
BenchmarkWasm_Exec_Call
(
b
*
testing
.
B
)
{
dir
,
ldb
,
kvdb
:=
util
.
CreateTestDB
()
defer
util
.
CloseTestDB
(
dir
,
ldb
)
acc
:=
initAccount
(
ldb
)
testCreate
(
b
,
acc
,
kvdb
)
testCall
(
b
,
acc
,
kvdb
)
payload
:=
types2
.
WasmAction
{
Ty
:
types2
.
WasmActionCall
,
Value
:
&
types2
.
WasmAction_Call
{
Call
:
&
types2
.
WasmCall
{
Contract
:
"dice"
,
Method
:
"play"
,
Parameters
:
[]
int64
{
1
,
10
},
},
},
}
tx
:=
&
types
.
Transaction
{
Payload
:
types
.
Encode
(
&
payload
),
}
tx
,
err
:=
types
.
FormatTx
(
cfg
,
types2
.
WasmX
,
tx
)
require
.
Nil
(
b
,
err
,
"format tx error"
)
err
=
signTx
(
tx
,
PrivKeys
[
1
])
require
.
Nil
(
b
,
err
)
wasm
:=
newWasm
()
wasm
.
SetCoinsAccount
(
acc
)
wasm
.
SetStateDB
(
kvdb
)
api
:=
mocks
.
QueueProtocolAPI
{}
api
.
On
(
"GetConfig"
)
.
Return
(
cfg
)
api
.
On
(
"GetRandNum"
,
mock
.
Anything
)
.
Return
(
hex
.
DecodeString
(
"0x0b1f047927e1c42327bdd3222558eaf7b10b998e7a9bb8144e4b2a27ffa53df3"
))
wasm
.
SetAPI
(
&
api
)
wasmCB
=
wasm
.
(
*
Wasm
)
err
=
transferToExec
(
Addrs
[
1
],
wasmAddr
,
1e9
)
require
.
Nil
(
b
,
err
)
wasmCB
=
nil
b
.
ResetTimer
()
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
_
,
err
:=
wasm
.
Exec
(
tx
,
0
)
require
.
Nil
(
b
,
err
)
}
b
.
StopTimer
()
}
func
TestWasm_Exec
(
t
*
testing
.
T
)
{
func
TestWasm_Exec
(
t
*
testing
.
T
)
{
dir
,
ldb
,
kvdb
:=
util
.
CreateTestDB
()
dir
,
ldb
,
kvdb
:=
util
.
CreateTestDB
()
defer
util
.
CloseTestDB
(
dir
,
ldb
)
defer
util
.
CloseTestDB
(
dir
,
ldb
)
acc
:=
initAccount
(
t
,
ldb
)
acc
:=
initAccount
(
ldb
)
testCreate
(
t
,
acc
,
kvdb
)
testCreate
(
t
,
acc
,
kvdb
)
testCall
(
t
,
acc
,
kvdb
)
testCall
(
t
,
acc
,
kvdb
)
...
@@ -54,7 +99,7 @@ func TestWasm_Callback(t *testing.T) {
...
@@ -54,7 +99,7 @@ func TestWasm_Callback(t *testing.T) {
dir
,
ldb
,
kvdb
:=
util
.
CreateTestDB
()
dir
,
ldb
,
kvdb
:=
util
.
CreateTestDB
()
defer
util
.
CloseTestDB
(
dir
,
ldb
)
defer
util
.
CloseTestDB
(
dir
,
ldb
)
wasmCB
=
newWasm
()
.
(
*
Wasm
)
wasmCB
=
newWasm
()
.
(
*
Wasm
)
acc
:=
initAccount
(
t
,
ldb
)
acc
:=
initAccount
(
ldb
)
wasmCB
.
SetCoinsAccount
(
acc
)
wasmCB
.
SetCoinsAccount
(
acc
)
wasmCB
.
SetStateDB
(
kvdb
)
wasmCB
.
SetStateDB
(
kvdb
)
wasmCB
.
SetLocalDB
(
kvdb
)
wasmCB
.
SetLocalDB
(
kvdb
)
...
@@ -218,7 +263,7 @@ func TestWasm_Callback(t *testing.T) {
...
@@ -218,7 +263,7 @@ func TestWasm_Callback(t *testing.T) {
t
.
Log
(
random
)
t
.
Log
(
random
)
}
}
func
testCreate
(
t
*
testing
.
T
,
acc
*
account
.
DB
,
stateDB
db
.
KV
)
{
func
testCreate
(
t
testing
.
TB
,
acc
*
account
.
DB
,
stateDB
db
.
KV
)
{
code
,
err
:=
ioutil
.
ReadFile
(
"../contracts/dice/dice.wasm"
)
code
,
err
:=
ioutil
.
ReadFile
(
"../contracts/dice/dice.wasm"
)
require
.
Nil
(
t
,
err
,
"read wasm file error"
)
require
.
Nil
(
t
,
err
,
"read wasm file error"
)
payload
:=
types2
.
WasmAction
{
payload
:=
types2
.
WasmAction
{
...
@@ -253,7 +298,7 @@ func testCreate(t *testing.T, acc *account.DB, stateDB db.KV) {
...
@@ -253,7 +298,7 @@ func testCreate(t *testing.T, acc *account.DB, stateDB db.KV) {
require
.
Nil
(
t
,
err
)
require
.
Nil
(
t
,
err
)
}
}
func
testCall
(
t
*
testing
.
T
,
acc
*
account
.
DB
,
stateDB
db
.
KV
)
{
func
testCall
(
t
testing
.
TB
,
acc
*
account
.
DB
,
stateDB
db
.
KV
)
{
payload
:=
types2
.
WasmAction
{
payload
:=
types2
.
WasmAction
{
Ty
:
types2
.
WasmActionCall
,
Ty
:
types2
.
WasmActionCall
,
Value
:
&
types2
.
WasmAction_Call
{
Value
:
&
types2
.
WasmAction_Call
{
...
@@ -287,10 +332,12 @@ func testCall(t *testing.T, acc *account.DB, stateDB db.KV) {
...
@@ -287,10 +332,12 @@ func testCall(t *testing.T, acc *account.DB, stateDB db.KV) {
require
.
Equal
(
t
,
int32
(
types2
.
TyLogWasmCall
),
receipt
.
Logs
[
0
]
.
Ty
)
require
.
Equal
(
t
,
int32
(
types2
.
TyLogWasmCall
),
receipt
.
Logs
[
0
]
.
Ty
)
}
}
func
initAccount
(
t
*
testing
.
T
,
db
db
.
KV
)
*
account
.
DB
{
func
initAccount
(
db
db
.
KV
)
*
account
.
DB
{
wasmAddr
=
address
.
ExecAddress
(
cfg
.
ExecName
(
types2
.
WasmX
))
wasmAddr
=
address
.
ExecAddress
(
cfg
.
ExecName
(
types2
.
WasmX
))
acc
,
err
:=
account
.
NewAccountDB
(
cfg
,
"coins"
,
"bty"
,
db
)
acc
,
err
:=
account
.
NewAccountDB
(
cfg
,
"coins"
,
"bty"
,
db
)
require
.
Nil
(
t
,
err
,
"new account db error"
)
if
err
!=
nil
{
panic
(
err
)
}
acc
.
SaveAccount
(
&
types
.
Account
{
acc
.
SaveAccount
(
&
types
.
Account
{
Balance
:
1e10
,
Balance
:
1e10
,
Addr
:
Addrs
[
0
],
Addr
:
Addrs
[
0
],
...
...
plugin/dapp/wasm/proto/wasm.proto
View file @
f221521c
...
@@ -37,7 +37,7 @@ message createContractLog {
...
@@ -37,7 +37,7 @@ message createContractLog {
message
callContractLog
{
message
callContractLog
{
string
contract
=
1
;
string
contract
=
1
;
string
method
=
2
;
string
method
=
2
;
int
64
result
=
3
;
int
32
result
=
3
;
}
}
message
localDataLog
{
message
localDataLog
{
...
...
plugin/dapp/wasm/types/wasm.pb.go
View file @
f221521c
...
@@ -339,7 +339,7 @@ func (m *CreateContractLog) GetCode() string {
...
@@ -339,7 +339,7 @@ func (m *CreateContractLog) GetCode() string {
type
CallContractLog
struct
{
type
CallContractLog
struct
{
Contract
string
`protobuf:"bytes,1,opt,name=contract,proto3" json:"contract,omitempty"`
Contract
string
`protobuf:"bytes,1,opt,name=contract,proto3" json:"contract,omitempty"`
Method
string
`protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"`
Method
string
`protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"`
Result
int
64
`protobuf:"varint,3,opt,name=result,proto3" json:"result,omitempty"`
Result
int
32
`protobuf:"varint,3,opt,name=result,proto3" json:"result,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -384,7 +384,7 @@ func (m *CallContractLog) GetMethod() string {
...
@@ -384,7 +384,7 @@ func (m *CallContractLog) GetMethod() string {
return
""
return
""
}
}
func
(
m
*
CallContractLog
)
GetResult
()
int
64
{
func
(
m
*
CallContractLog
)
GetResult
()
int
32
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Result
return
m
.
Result
}
}
...
@@ -454,26 +454,26 @@ func init() {
...
@@ -454,26 +454,26 @@ func init() {
}
}
var
fileDescriptor_7d78909ad64e3bbb
=
[]
byte
{
var
fileDescriptor_7d78909ad64e3bbb
=
[]
byte
{
// 32
8
bytes of a gzipped FileDescriptorProto
// 32
7
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x9c
,
0x92
,
0x
31
,
0x4f
,
0xc3
,
0x3
0
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x9c
,
0x92
,
0x
4f
,
0x4b
,
0xc3
,
0x4
0
,
0x10
,
0x
85
,
0x9b
,
0xba
,
0x0d
,
0xcd
,
0x51
,
0x51
,
0x6a
,
0xa1
,
0x2a
,
0x62
,
0x80
,
0xc8
,
0x12
,
0x52
,
0x10
,
0x
c5
,
0x9b
,
0xa6
,
0x8d
,
0xcd
,
0x58
,
0xac
,
0x5d
,
0xa4
,
0x04
,
0x0f
,
0x1a
,
0x16
,
0x84
,
0x80
,
0x
24
,
0xa4
,
0x0e
,
0x80
,
0x58
,
0x98
,
0xa0
,
0x0c
,
0x1d
,
0x98
,
0xbc
,
0x83
,
0x64
,
0x5c
,
0x43
,
0xab
,
0x
d0
,
0x83
,
0x8a
,
0x17
,
0x4f
,
0x5a
,
0x0f
,
0x3d
,
0x78
,
0xda
,
0xbb
,
0xc2
,
0xba
,
0x5d
,
0x6d
,
0xe9
,
0x
3a
,
0x71
,
0x71
,
0x2e
,
0xa0
,
0xfc
,
0x7b
,
0x64
,
0xc7
,
0x45
,
0x19
,
0x10
,
0x03
,
0xdb
,
0xdd
,
0xf9
,
0x
26
,
0x5b
,
0x37
,
0x13
,
0x25
,
0xdf
,
0x5e
,
0xf6
,
0x4f
,
0x25
,
0x07
,
0xf1
,
0xe0
,
0x6d
,
0x66
,
0xf6
,
0x
bb
,
0xf7
,
0x72
,
0x77
,
0x01
,
0xf8
,
0x12
,
0x55
,
0x31
,
0xdf
,
0x59
,
0x83
,
0x86
,
0x0e
,
0xb1
,
0xd9
,
0x
37
,
0xef
,
0x65
,
0x66
,
0x02
,
0xf0
,
0xc5
,
0xeb
,
0x72
,
0xbe
,
0x33
,
0x1a
,
0x35
,
0x19
,
0x62
,
0xbb
,
0x
a9
,
0x8a
,
0x35
,
0x6d
,
0xf1
,
0x5e
,
0xe2
,
0xc6
,
0x94
,
0xf4
,
0x12
,
0x62
,
0x69
,
0x95
,
0x40
,
0x95
,
0x
93
,
0x35
,
0x6d
,
0x7d
,
0xf1
,
0x5e
,
0xe0
,
0x46
,
0x57
,
0xe4
,
0x12
,
0x12
,
0x61
,
0x24
,
0x47
,
0x99
,
0x4
6
,
0x59
,
0x94
,
0x1f
,
0x5e
,
0x4d
,
0xe7
,
0x9e
,
0x9a
,
0x3b
,
0x64
,
0xe1
,
0x1f
,
0x96
,
0x3d
,
0x1e
,
0x4
5
,
0x79
,
0x54
,
0x1c
,
0x5e
,
0x4d
,
0xe7
,
0x8e
,
0x9a
,
0x5b
,
0x64
,
0xe1
,
0x1e
,
0x96
,
0x3d
,
0x16
,
0x10
,
0x7
a
,
0x01
,
0x03
,
0x29
,
0xb4
,
0x4e
,
0xfb
,
0x1e
,
0x9d
,
0x74
,
0x51
,
0xa1
,
0xf5
,
0xb2
,
0xc7
,
0x10
,
0x7
2
,
0x01
,
0x03
,
0xc1
,
0x95
,
0xca
,
0xfa
,
0x0e
,
0x9d
,
0x74
,
0x51
,
0xae
,
0xd4
,
0xb2
,
0xc7
,
0x
fd
,
0x33
,
0x3d
,
0x82
,
0x3e
,
0x36
,
0x29
,
0xc9
,
0xa2
,
0x7c
,
0xc8
,
0xfb
,
0xd8
,
0x3c
,
0x1c
,
0xc
0
,
0x
dc
,
0x33
,
0x39
,
0x82
,
0x3e
,
0xb6
,
0x59
,
0x9c
,
0x47
,
0xc5
,
0x90
,
0xf5
,
0xb1
,
0x7d
,
0x38
,
0x8
0
,
0x
f0
,
0x53
,
0xe8
,
0x5a
,
0xb1
,
0x9b
,
0xd6
,
0xba
,
0xd5
,
0xa5
,
0x14
,
0x06
,
0xa5
,
0x28
,
0x5a
,
0xe3
,
0x
e1
,
0x27
,
0x57
,
0x8d
,
0xa4
,
0x37
,
0xde
,
0xda
,
0xeb
,
0x12
,
0x02
,
0x83
,
0x8a
,
0x97
,
0xde
,
0x38
,
0x
84
,
0xfb
,
0xd8
,
0xd5
,
0xa4
,
0x59
,
0x29
,
0xef
,
0x30
,
0xe6
,
0x3e
,
0x66
,
0x2f
,
0x30
,
0xda
,
0x5b
,
0x
65
,
0x2e
,
0xb6
,
0x35
,
0xa1
,
0x57
,
0xd2
,
0x39
,
0x8c
,
0x99
,
0x8b
,
0xe9
,
0x0b
,
0x8c
,
0xf6
,
0x16
,
0x
d0
,
0x53
,
0x18
,
0x49
,
0x53
,
0xa2
,
0x15
,
0x12
,
0x43
,
0xdf
,
0x4f
,
0x4e
,
0x67
,
0x10
,
0x17
,
0x0a
,
0x
e4
,
0x14
,
0x46
,
0x42
,
0x57
,
0x68
,
0xb8
,
0xc0
,
0xd0
,
0xf7
,
0x93
,
0x93
,
0x19
,
0x24
,
0xa5
,
0xc4
,
0x
d7
,
0x66
,
0xe5
,
0xbb
,
0x13
,
0x1e
,
0x32
,
0x7a
,
0x06
,
0xb0
,
0x13
,
0x56
,
0x14
,
0x0a
,
0x95
,
0xad
,
0x
b5
,
0x5e
,
0xb9
,
0xee
,
0x94
,
0x85
,
0x8c
,
0x9c
,
0x01
,
0xec
,
0xb8
,
0xe1
,
0xa5
,
0x44
,
0x69
,
0xea
,
0x
52
,
0x92
,
0x91
,
0x9c
,
0xf0
,
0x4e
,
0x85
,
0xe5
,
0x40
,
0x3f
,
0x6a
,
0x65
,
0x9b
,
0xc5
,
0x5a
,
0xc9
,
0x
2c
,
0xce
,
0xe3
,
0x22
,
0x66
,
0x9d
,
0x0a
,
0x2d
,
0x80
,
0x7c
,
0x34
,
0xd2
,
0xb4
,
0x8b
,
0xb5
,
0x14
,
0x
ed
,
0x62
,
0xaf
,
0xf6
,
0xcb
,
0xd7
,
0xb1
,
0x73
,
0x48
,
0x64
,
0x5d
,
0xa1
,
0x29
,
0x9e
,
0xcc
,
0xbb
,
0x
db
,
0xc5
,
0x5e
,
0xed
,
0x97
,
0xaf
,
0xa3
,
0xe7
,
0x90
,
0x8a
,
0xa6
,
0x46
,
0x5d
,
0x3e
,
0xe9
,
0x77
,
0x0
3
,
0x36
,
0xe5
,
0x9b
,
0x49
,
0xa3
,
0x8c
,
0x38
,
0xc0
,
0xc5
,
0xec
,
0x0e
,
0xa6
,
0xed
,
0xaa
,
0xf6
,
0x0
b
,
0x6c
,
0xaa
,
0x37
,
0x9d
,
0x45
,
0x79
,
0x6c
,
0x01
,
0x1b
,
0xd3
,
0x3b
,
0x98
,
0xfa
,
0x55
,
0xed
,
0x
32
,
0x01
,
0xfc
,
0x73
,
0xce
,
0x24
,
0xcc
,
0xf9
,
0x0c
,
0x13
,
0xb7
,
0xbe
,
0x6e
,
0xeb
,
0x7f
,
0xc6
,
0x
65
,
0x02
,
0xf8
,
0xe7
,
0x9c
,
0x69
,
0x98
,
0xf3
,
0x19
,
0x26
,
0x76
,
0x7d
,
0xdd
,
0xd6
,
0xff
,
0x8c
,
0x
9d
,
0x41
,
0x6c
,
0x55
,
0x55
,
0x6b
,
0xf4
,
0x17
,
0x20
,
0x3c
,
0x64
,
0xec
,
0x16
,
0xc6
,
0xda
,
0x48
,
0x
3b
,
0x83
,
0xc4
,
0xc8
,
0xba
,
0x51
,
0x18
,
0x2e
,
0x10
,
0x32
,
0x7a
,
0x0b
,
0x63
,
0xa5
,
0x05
,
0x57
,
0x
a1
,
0x1f
,
0x05
,
0x0a
,
0xa7
,
0x7d
,
0x0c
,
0x64
,
0xab
,
0x1a
,
0x2f
,
0x3b
,
0xe6
,
0x2e
,
0xa4
,
0x27
,
0x
8f
,
0x1c
,
0xb9
,
0xd5
,
0x3e
,
0x86
,
0x78
,
0x2b
,
0x5b
,
0x27
,
0x3b
,
0x66
,
0x36
,
0x24
,
0x27
,
0xe1
,
0x
e1
,
0x4e
,
0x61
,
0xfb
,
0x6d
,
0xf2
,
0x1a
,
0xfb
,
0xbf
,
0xe7
,
0xfa
,
0x3b
,
0x00
,
0x00
,
0xff
,
0xff
,
0x
4e
,
0x61
,
0xfb
,
0x3e
,
0x79
,
0x4d
,
0xdc
,
0xdf
,
0x73
,
0xfd
,
0x1d
,
0x00
,
0x00
,
0xff
,
0xff
,
0xc3
,
0x
24
,
0x00
,
0xa4
,
0xe6
,
0x4b
,
0x02
,
0x00
,
0x00
,
0x
c2
,
0x9e
,
0xbb
,
0x4b
,
0x02
,
0x00
,
0x00
,
}
}
plugin/dapp/x2ethereum/executor/exec_test.go
View file @
f221521c
...
@@ -75,6 +75,7 @@ func (x *suiteX2Ethereum) SetupSuite() {
...
@@ -75,6 +75,7 @@ func (x *suiteX2Ethereum) SetupSuite() {
tx
.
Execer
=
[]
byte
(
types2
.
X2ethereumX
)
tx
.
Execer
=
[]
byte
(
types2
.
X2ethereumX
)
tx
.
To
=
address
.
ExecAddress
(
types2
.
X2ethereumX
)
tx
.
To
=
address
.
ExecAddress
(
types2
.
X2ethereumX
)
tx
.
Nonce
=
1
tx
.
Nonce
=
1
tx
.
ChainID
=
chainTestCfg
.
GetChainID
()
tx
.
Sign
(
types
.
SECP256K1
,
privFrom
)
tx
.
Sign
(
types
.
SECP256K1
,
privFrom
)
x
.
action
=
newAction
(
x2eth
,
tx
,
0
)
x
.
action
=
newAction
(
x2eth
,
tx
,
0
)
...
...
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