Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
contract-case
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
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
duanjinfei
contract-case
Commits
b1df3f4a
Commit
b1df3f4a
authored
Jun 26, 2023
by
duanjinfei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add case
parent
c7e1fe00
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
90 additions
and
1 deletion
+90
-1
operator.go
operator/operator.go
+6
-1
partlyRelatedCase.go
operator/partlyRelatedCase.go
+84
-0
No files found.
operator/operator.go
View file @
b1df3f4a
...
@@ -448,7 +448,7 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
...
@@ -448,7 +448,7 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
// 部分相关-单层-写变量-合约发送者相关
// 部分相关-单层-写变量-合约发送者相关
case
20
:
case
20
:
{
{
return
PrSpWRTranCase
(
arr
,
contractArr
[
0
],
nonceMap
,
txArr
,
client
)
return
PrSpWRTranCase
(
arr
,
contractArr
[
1
],
nonceMap
,
txArr
,
client
)
}
}
// 部分相关-多层-写变量-合约接受者相关
// 部分相关-多层-写变量-合约接受者相关
case
21
:
case
21
:
...
@@ -501,6 +501,11 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
...
@@ -501,6 +501,11 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
{
{
return
PrReErc721TranFromCase
(
startIndex
,
txCount
,
arr
,
contractArr
[
5
],
nonceMap
,
txArr
,
client
)
return
PrReErc721TranFromCase
(
startIndex
,
txCount
,
arr
,
contractArr
[
5
],
nonceMap
,
txArr
,
client
)
}
}
case
31
:
{
return
PrReContractOneCoinTranCase1
(
txCount
,
arr
,
contractArr
,
nonceMap
,
txArr
,
client
)
}
default
:
default
:
{
{
return
nil
,
nil
return
nil
,
nil
...
...
operator/partlyRelatedCase.go
View file @
b1df3f4a
...
@@ -61,17 +61,21 @@ func PrReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa
...
@@ -61,17 +61,21 @@ func PrReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa
fromAddr
:=
testAccArr
.
FromAddr
[
i
]
fromAddr
:=
testAccArr
.
FromAddr
[
i
]
sendAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
sendAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
if
sendAfterBal
==
nil
{
if
sendAfterBal
==
nil
{
log
.
Error
(
"普通转账-接受者相关"
,
"sendAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
sendBeforeBal
[
fromAddr
]
.
Sub
(
sendBeforeBal
[
fromAddr
],
sendAfterBal
)
.
Cmp
(
amount
)
!=
1
{
if
sendBeforeBal
[
fromAddr
]
.
Sub
(
sendBeforeBal
[
fromAddr
],
sendAfterBal
)
.
Cmp
(
amount
)
!=
1
{
log
.
Error
(
"普通转账-接受者相关"
,
"from balance error"
)
res
=
false
res
=
false
}
}
}
}
reToAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
reToAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
if
reToAfterBal
==
nil
{
if
reToAfterBal
==
nil
{
log
.
Error
(
"普通转账-接受者相关"
,
"reToAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
reToAfterBal
.
Sub
(
reToAfterBal
,
beforeToBal
)
.
Cmp
(
amount
.
Mul
(
amount
,
big
.
NewInt
(
int64
(
txCount
))))
!=
0
{
if
reToAfterBal
.
Sub
(
reToAfterBal
,
beforeToBal
)
.
Cmp
(
amount
.
Mul
(
amount
,
big
.
NewInt
(
int64
(
txCount
))))
!=
0
{
log
.
Error
(
"普通转账-接受者相关"
,
"to balance error"
)
res
=
false
res
=
false
}
}
return
res
return
res
...
@@ -121,17 +125,21 @@ func PrSpCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa
...
@@ -121,17 +125,21 @@ func PrSpCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa
toAddr
:=
testAccArr
.
ToAddr
[
i
]
toAddr
:=
testAccArr
.
ToAddr
[
i
]
reAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
reAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
if
reAfterBal
==
nil
{
if
reAfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者相关"
,
"reAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
reAfterBal
.
Sub
(
reAfterBal
,
reBeforeBal
[
toAddr
])
.
Cmp
(
amount
)
!=
0
{
if
reAfterBal
.
Sub
(
reAfterBal
,
reBeforeBal
[
toAddr
])
.
Cmp
(
amount
)
!=
0
{
log
.
Error
(
"普通转账-发送者相关"
,
"to balance error"
,
toAddr
.
Hex
())
res
=
false
res
=
false
}
}
}
}
sendAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
sendAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
if
sendAfterBal
==
nil
{
if
sendAfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者相关"
,
"sendAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
beforeFromBal
.
Sub
(
beforeFromBal
,
sendAfterBal
)
.
Cmp
(
amount
.
Mul
(
amount
,
big
.
NewInt
(
int64
(
txCount
))))
!=
1
{
if
beforeFromBal
.
Sub
(
beforeFromBal
,
sendAfterBal
)
.
Cmp
(
amount
.
Mul
(
amount
,
big
.
NewInt
(
int64
(
txCount
))))
!=
1
{
log
.
Error
(
"普通转账-发送者相关"
,
"from balance error"
)
res
=
false
res
=
false
}
}
return
res
return
res
...
@@ -190,25 +198,31 @@ func PrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonce
...
@@ -190,25 +198,31 @@ func PrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonce
// A账户余额校验
// A账户余额校验
sendFromAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
sendFromAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
if
sendFromAfterBal
==
nil
{
if
sendFromAfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者和接受者部分相关"
,
"sendFromAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
beforeFromBal
.
Sub
(
beforeFromBal
,
sendFromAfterBal
)
.
Cmp
(
amount
)
!=
1
{
if
beforeFromBal
.
Sub
(
beforeFromBal
,
sendFromAfterBal
)
.
Cmp
(
amount
)
!=
1
{
log
.
Error
(
"普通转账-发送者和接受者部分相关"
,
"from balance error"
)
res
=
false
res
=
false
}
}
// B账户余额校验
// B账户余额校验
reToAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
reToAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
if
reToAfterBal
==
nil
{
if
reToAfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者和接受者部分相关"
,
"reToAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
beforeToBal
.
Sub
(
beforeToBal
,
reToAfterBal
)
.
Cmp
(
big
.
NewInt
(
0
))
!=
1
{
if
beforeToBal
.
Sub
(
beforeToBal
,
reToAfterBal
)
.
Cmp
(
big
.
NewInt
(
0
))
!=
1
{
log
.
Error
(
"普通转账-发送者和接受者部分相关"
,
"beforeToBal balance error"
)
res
=
false
res
=
false
}
}
// C账户余额校验
// C账户余额校验
reTo1AfterBal
:=
util
.
GetAccBal
(
client
,
toAddr1
)
reTo1AfterBal
:=
util
.
GetAccBal
(
client
,
toAddr1
)
if
reTo1AfterBal
==
nil
{
if
reTo1AfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者和接受者部分相关"
,
"reToAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
reTo1AfterBal
.
Sub
(
reTo1AfterBal
,
beforeTo1Bal
)
.
Cmp
(
amount
)
!=
0
{
if
reTo1AfterBal
.
Sub
(
reTo1AfterBal
,
beforeTo1Bal
)
.
Cmp
(
amount
)
!=
0
{
log
.
Error
(
"普通转账-发送者和接受者部分相关"
,
"reTo1AfterBal balance error"
)
res
=
false
res
=
false
}
}
return
res
return
res
...
@@ -262,17 +276,21 @@ func AllPrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNo
...
@@ -262,17 +276,21 @@ func AllPrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNo
// A账户余额校验
// A账户余额校验
sendFromAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
sendFromAfterBal
:=
util
.
GetAccBal
(
client
,
fromAddr
)
if
sendFromAfterBal
==
nil
{
if
sendFromAfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者和接受者全部相关"
,
"reToAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
beforeFromBal
.
Sub
(
beforeFromBal
,
sendFromAfterBal
)
.
Cmp
(
big
.
NewInt
(
0
))
!=
1
{
if
beforeFromBal
.
Sub
(
beforeFromBal
,
sendFromAfterBal
)
.
Cmp
(
big
.
NewInt
(
0
))
!=
1
{
log
.
Error
(
"普通转账-发送者和接受者全部相关"
,
"beforeFromBal balance error"
)
res
=
false
res
=
false
}
}
// B账户余额校验
// B账户余额校验
reToAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
reToAfterBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
if
reToAfterBal
==
nil
{
if
reToAfterBal
==
nil
{
log
.
Error
(
"普通转账-发送者和接受者全部相关"
,
"reToAfterBal is nil"
)
res
=
false
res
=
false
}
}
if
beforeToBal
.
Sub
(
beforeToBal
,
reToAfterBal
)
.
Cmp
(
big
.
NewInt
(
0
))
!=
1
{
if
beforeToBal
.
Sub
(
beforeToBal
,
reToAfterBal
)
.
Cmp
(
big
.
NewInt
(
0
))
!=
1
{
log
.
Error
(
"普通转账-发送者和接受者全部相关"
,
"beforeToBal balance error"
)
res
=
false
res
=
false
}
}
return
res
return
res
...
@@ -1504,3 +1522,69 @@ func PrReContractOneCoinTranTwiceCase(txCount int, testAccArr *tool.AccArrFormat
...
@@ -1504,3 +1522,69 @@ func PrReContractOneCoinTranTwiceCase(txCount int, testAccArr *tool.AccArrFormat
}
}
return
resTxArr
,
verify
return
resTxArr
,
verify
}
}
// PrReContractOneCoinTranCase1 A->b->a->C,A->c->a->C
func
PrReContractOneCoinTranCase1
(
txCount
int
,
testAccArr
*
tool
.
AccArrFormat
,
contractMap
[]
map
[
string
]
common
.
Address
,
accountNonceMap
*
sync
.
Map
,
resTxArr
[]
*
types
.
Transaction
,
client
*
ethclient
.
Client
)
([]
*
types
.
Transaction
,
func
()
bool
)
{
amount
:=
big
.
NewInt
(
100000000000000000
)
toAddr
:=
testAccArr
.
ToAddr
[
0
]
reBeforeToBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
if
reBeforeToBal
==
nil
{
return
nil
,
nil
}
sendBeforeContractBalMap
:=
make
(
map
[
common
.
Address
]
*
big
.
Int
,
0
)
coinTranAddr
:=
contractMap
[
0
][
constant
.
COIN_TRANSFER
]
sendBeforeBal
:=
util
.
GetAccBal
(
client
,
coinTranAddr
)
if
sendBeforeBal
==
nil
{
return
nil
,
nil
}
sendBeforeContractBalMap
[
coinTranAddr
]
=
sendBeforeBal
for
i
:=
0
;
i
<
txCount
;
i
++
{
contractCoinOneTrade
:=
&
coin
.
ContractCoinOneTrade
{
ChainContractAdr
:
coinTranAddr
,
Amount
:
amount
,
}
oneChainCoinTransfer
,
err
:=
contractCoin
.
NewOneChainCoinTransfer
(
contractMap
[
i
][
constant
.
ONE_COIN_TRANSFER
],
client
)
if
err
!=
nil
{
log
.
Error
(
"NewOneChainCoinTransfer error:"
,
err
.
Error
())
return
nil
,
nil
}
contractCoinOneTrade
.
ToAddr
=
[]
common
.
Address
{
toAddr
}
auth
,
err
:=
bind
.
NewKeyedTransactorWithChainID
(
testAccArr
.
FromPrv
[
i
],
tool
.
Cfg
.
ChainId
)
if
err
!=
nil
{
log
.
Errorf
(
"DeployTokenTransfer func newKeyedTransactorWithChainID err:"
,
err
)
}
value
,
_
:=
accountNonceMap
.
Load
(
testAccArr
.
FromAddr
[
i
])
auth
.
Nonce
=
big
.
NewInt
(
value
.
(
int64
))
auth
.
NoSend
=
true
auth
.
GasLimit
=
500000
auth
.
GasPrice
=
big
.
NewInt
(
10000000000
)
tx
,
err
:=
contractCoinOneTrade
.
OneTransferSignTx
(
auth
,
oneChainCoinTransfer
)
if
err
!=
nil
{
log
.
Error
(
"OneTransferSignTx error:"
,
err
.
Error
())
return
nil
,
nil
}
resTxArr
=
append
(
resTxArr
,
tx
)
}
verify
:=
func
()
bool
{
res
:=
true
coinAddr
:=
coinTranAddr
sendBeforeBal
:=
sendBeforeContractBalMap
[
coinAddr
]
sendAfterBal
:=
util
.
GetAccBal
(
client
,
coinAddr
)
if
sendAfterBal
==
nil
{
log
.
Error
(
""
)
res
=
false
}
if
sendBeforeBal
.
Sub
(
sendBeforeBal
,
sendAfterBal
)
.
Cmp
(
big
.
NewInt
(
1
)
.
Mul
(
amount
,
big
.
NewInt
(
int64
(
txCount
))))
!=
0
{
res
=
false
}
reAfterToBal
:=
util
.
GetAccBal
(
client
,
toAddr
)
if
reAfterToBal
==
nil
{
res
=
false
}
if
reAfterToBal
.
Sub
(
reAfterToBal
,
reBeforeToBal
)
.
Cmp
(
big
.
NewInt
(
1
)
.
Mul
(
amount
,
big
.
NewInt
(
int64
(
txCount
))))
!=
0
{
res
=
false
}
return
res
}
return
resTxArr
,
verify
}
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