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
151fbd76
Commit
151fbd76
authored
May 23, 2023
by
duanjinfei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add test case
parent
8026f4a8
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
226 additions
and
40 deletions
+226
-40
README.md
README.md
+3
-3
coin_contract_oneTran.go
contract/coin/coin_contract_oneTran.go
+20
-0
OneChainCoinTransfer.abi
contract_abi/coin_transfer/abi_bin/OneChainCoinTransfer.abi
+1
-1
OneChainCoinTransfer.bin
contract_abi/coin_transfer/abi_bin/OneChainCoinTransfer.bin
+1
-1
OneChainCoinTransfer.go
contract_abi/coin_transfer/compile/OneChainCoinTransfer.go
+75
-2
OneChainCoinTransfer.sol
contract_abi/coin_transfer/contract/OneChainCoinTransfer.sol
+10
-0
main.go
main.go
+3
-0
operator.go
operator/operator.go
+15
-0
partlyRelatedCase.go
operator/partlyRelatedCase.go
+98
-33
No files found.
README.md
View file @
151fbd76
# contract-case
# contract-case
solc --abi --bin
ChainCoinTransfer.sol -o .
solc --abi --bin
contract_abi/coin_transfer/contract/ChainCoinTransfer.sol -o contract_abi/coin_transfer/abi_bin --overwrite
solc --abi --bin
OneChainCoinTransfer.sol -o .
solc --abi --bin
contract_abi/coin_transfer/contract/OneChainCoinTransfer.sol -o contract_abi/coin_transfer/abi_bin --overwrite
solc --abi --bin
TwoChainCoinTransfer.sol -o .
solc --abi --bin
contract_abi/coin_transfer/contract/TwoChainCoinTransfer.sol -o contract_abi/coin_transfer/abi_bin --overwrite
abigen --bin ChainCoinTransfer.bin --abi ChainCoinTransfer.abi --pkg contractCoin --type ChainCoinTransfer --out ../compile/ChainCoinTransfer.go
abigen --bin ChainCoinTransfer.bin --abi ChainCoinTransfer.abi --pkg contractCoin --type ChainCoinTransfer --out ../compile/ChainCoinTransfer.go
abigen --bin OneChainCoinTransfer.bin --abi OneChainCoinTransfer.abi --pkg contractCoin --type OneChainCoinTransfer --out ../compile/OneChainCoinTransfer.go
abigen --bin OneChainCoinTransfer.bin --abi OneChainCoinTransfer.abi --pkg contractCoin --type OneChainCoinTransfer --out ../compile/OneChainCoinTransfer.go
abigen --bin TwoChainCoinTransfer.bin --abi TwoChainCoinTransfer.abi --pkg contractCoin --type TwoChainCoinTransfer --out ../compile/TwoChainCoinTransfer.go
abigen --bin TwoChainCoinTransfer.bin --abi TwoChainCoinTransfer.abi --pkg contractCoin --type TwoChainCoinTransfer --out ../compile/TwoChainCoinTransfer.go
...
...
contract/coin/coin_contract_oneTran.go
View file @
151fbd76
...
@@ -15,6 +15,26 @@ type ContractCoinOneTrade struct {
...
@@ -15,6 +15,26 @@ type ContractCoinOneTrade struct {
Amount
*
big
.
Int
Amount
*
big
.
Int
}
}
func
(
trade
*
ContractCoinOneTrade
)
OneTransferSetTempSignTx
(
tranOpts
*
bind
.
TransactOpts
,
oneChainCoinTransfer
*
contractCoin
.
OneChainCoinTransfer
)
(
*
types
.
Transaction
,
error
)
{
oneTransferTx
,
err
:=
oneChainCoinTransfer
.
SetChainCoinTransferContract
(
tranOpts
,
trade
.
ChainContractAdr
)
if
err
!=
nil
{
log
.
Errorf
(
"OneTransferSignTx func SetChainCoinTransferContract tx error: %s"
,
err
)
return
nil
,
err
}
log
.
Info
(
"OneTransfer:"
,
oneTransferTx
.
Hash
())
return
oneTransferTx
,
nil
}
func
(
trade
*
ContractCoinOneTrade
)
OneTransferSetAfterSignTx
(
tranOpts
*
bind
.
TransactOpts
,
oneChainCoinTransfer
*
contractCoin
.
OneChainCoinTransfer
)
(
*
types
.
Transaction
,
error
)
{
oneTransferTx
,
err
:=
oneChainCoinTransfer
.
OneTempTransfer
(
tranOpts
,
trade
.
ToAddr
,
trade
.
Amount
)
if
err
!=
nil
{
log
.
Errorf
(
"OneTransferSignTx func OneTempTransfer tx error: %s"
,
err
)
return
nil
,
err
}
log
.
Info
(
"OneTransfer:"
,
oneTransferTx
.
Hash
())
return
oneTransferTx
,
nil
}
func
(
trade
*
ContractCoinOneTrade
)
OneTransferSignTx
(
tranOpts
*
bind
.
TransactOpts
,
oneChainCoinTransfer
*
contractCoin
.
OneChainCoinTransfer
)
(
*
types
.
Transaction
,
error
)
{
func
(
trade
*
ContractCoinOneTrade
)
OneTransferSignTx
(
tranOpts
*
bind
.
TransactOpts
,
oneChainCoinTransfer
*
contractCoin
.
OneChainCoinTransfer
)
(
*
types
.
Transaction
,
error
)
{
oneTransferTx
,
err
:=
oneChainCoinTransfer
.
OneTransfer
(
tranOpts
,
trade
.
ChainContractAdr
,
trade
.
ToAddr
,
trade
.
Amount
)
oneTransferTx
,
err
:=
oneChainCoinTransfer
.
OneTransfer
(
tranOpts
,
trade
.
ChainContractAdr
,
trade
.
ToAddr
,
trade
.
Amount
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
contract_abi/coin_transfer/abi_bin/OneChainCoinTransfer.abi
View file @
151fbd76
[{"inputs":[{"internalType":"address","name":"chainCoinAddr","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]
[{"inputs":[{"internalType":"address","name":"tempAddr","type":"address"}],"name":"SetChainCoinTransferContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneTempTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"chainCoinAddr","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"temp","outputs":[{"internalType":"contract IChainCoinTransfer","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
\ No newline at end of file
\ No newline at end of file
contract_abi/coin_transfer/abi_bin/OneChainCoinTransfer.bin
View file @
151fbd76
608060405234801561001057600080fd5b50610461806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631805040514610030575b600080fd5b61004a600480360381019061004591906102bf565b61004c565b005b8273ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b81526004016100879291906103fb565b600060405180830381600087803b1580156100a157600080fd5b505af11580156100b5573d6000803e3d6000fd5b50505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100fd826100d2565b9050919050565b61010d816100f2565b811461011857600080fd5b50565b60008135905061012a81610104565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61017e82610135565b810181811067ffffffffffffffff8211171561019d5761019c610146565b5b80604052505050565b60006101b06100be565b90506101bc8282610175565b919050565b600067ffffffffffffffff8211156101dc576101db610146565b5b602082029050602081019050919050565b600080fd5b6000610205610200846101c1565b6101a6565b90508083825260208201905060208402830185811115610228576102276101ed565b5b835b81811015610251578061023d888261011b565b84526020840193505060208101905061022a565b5050509392505050565b600082601f8301126102705761026f610130565b5b81356102808482602086016101f2565b91505092915050565b6000819050919050565b61029c81610289565b81146102a757600080fd5b50565b6000813590506102b981610293565b92915050565b6000806000606084860312156102d8576102d76100c8565b5b60006102e68682870161011b565b935050602084013567ffffffffffffffff811115610307576103066100cd565b5b6103138682870161025b565b9250506040610324868287016102aa565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610363816100f2565b82525050565b6000610375838361035a565b60208301905092915050565b6000602082019050919050565b60006103998261032e565b6103a38185610339565b93506103ae8361034a565b8060005b838110156103df5781516103c68882610369565b97506103d183610381565b9250506001810190506103b2565b5085935050505092915050565b6103f581610289565b82525050565b60006040820190508181036000830152610415818561038e565b905061042460208301846103ec565b939250505056fea2646970667358221220a9ef4ef1aff041711f36e690b13f99c9fbf231c1d9181db88e74d68958a0eecc64736f6c63430008130033
608060405234801561000f575f80fd5b5061069a8061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c8063180504051461004e5780632b231a3d1461006a578063673402e514610086578063ff34e1df146100a4575b5f80fd5b6100686004803603810190610063919061040b565b6100c0565b005b610084600480360381019061007f9190610477565b61012d565b005b61008e6101b8565b60405161009b919061052c565b60405180910390f35b6100be60048036038101906100b99190610545565b6101db565b005b8273ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b81526004016100fb929190610636565b5f604051808303815f87803b158015610112575f80fd5b505af1158015610124573d5f803e3d5ffd5b50505050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b8152600401610187929190610636565b5f604051808303815f87803b15801561019e575f80fd5b505af11580156101b0573d5f803e3d5ffd5b505050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102578261022e565b9050919050565b6102678161024d565b8114610271575f80fd5b50565b5f813590506102828161025e565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102d28261028c565b810181811067ffffffffffffffff821117156102f1576102f061029c565b5b80604052505050565b5f61030361021d565b905061030f82826102c9565b919050565b5f67ffffffffffffffff82111561032e5761032d61029c565b5b602082029050602081019050919050565b5f80fd5b5f61035561035084610314565b6102fa565b905080838252602082019050602084028301858111156103785761037761033f565b5b835b818110156103a1578061038d8882610274565b84526020840193505060208101905061037a565b5050509392505050565b5f82601f8301126103bf576103be610288565b5b81356103cf848260208601610343565b91505092915050565b5f819050919050565b6103ea816103d8565b81146103f4575f80fd5b50565b5f81359050610405816103e1565b92915050565b5f805f6060848603121561042257610421610226565b5b5f61042f86828701610274565b935050602084013567ffffffffffffffff8111156104505761044f61022a565b5b61045c868287016103ab565b925050604061046d868287016103f7565b9150509250925092565b5f806040838503121561048d5761048c610226565b5b5f83013567ffffffffffffffff8111156104aa576104a961022a565b5b6104b6858286016103ab565b92505060206104c7858286016103f7565b9150509250929050565b5f819050919050565b5f6104f46104ef6104ea8461022e565b6104d1565b61022e565b9050919050565b5f610505826104da565b9050919050565b5f610516826104fb565b9050919050565b6105268161050c565b82525050565b5f60208201905061053f5f83018461051d565b92915050565b5f6020828403121561055a57610559610226565b5b5f61056784828501610274565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6105a28161024d565b82525050565b5f6105b38383610599565b60208301905092915050565b5f602082019050919050565b5f6105d582610570565b6105df818561057a565b93506105ea8361058a565b805f5b8381101561061a57815161060188826105a8565b975061060c836105bf565b9250506001810190506105ed565b5085935050505092915050565b610630816103d8565b82525050565b5f6040820190508181035f83015261064e81856105cb565b905061065d6020830184610627565b939250505056fea26469706673582212208c179c1a90b0d75a3cfab6e4f26b460d2b4b6a52358bcd5f38dbadae993bb4a164736f6c63430008140033
\ No newline at end of file
\ No newline at end of file
contract_abi/coin_transfer/compile/OneChainCoinTransfer.go
View file @
151fbd76
...
@@ -30,8 +30,8 @@ var (
...
@@ -30,8 +30,8 @@ var (
// OneChainCoinTransferMetaData contains all meta data concerning the OneChainCoinTransfer contract.
// OneChainCoinTransferMetaData contains all meta data concerning the OneChainCoinTransfer contract.
var
OneChainCoinTransferMetaData
=
&
bind
.
MetaData
{
var
OneChainCoinTransferMetaData
=
&
bind
.
MetaData
{
ABI
:
"[{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
chainCoinAddr
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
address[]
\"
,
\"
name
\"
:
\"
toArr
\"
,
\"
type
\"
:
\"
address[]
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
value
\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
name
\"
:
\"
oneTransfer
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
}]"
,
ABI
:
"[{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
tempAddr
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
SetChainCoinTransferContract
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address[]
\"
,
\"
name
\"
:
\"
toArr
\"
,
\"
type
\"
:
\"
address[]
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
value
\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
name
\"
:
\"
oneTempTransfer
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
chainCoinAddr
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
address[]
\"
,
\"
name
\"
:
\"
toArr
\"
,
\"
type
\"
:
\"
address[]
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
value
\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
name
\"
:
\"
oneTransfer
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
temp
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIChainCoinTransfer
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
}]"
,
Bin
:
"0x60806040523480156100
1057600080fd5b50610461806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631805040514610030575b600080fd5b61004a600480360381019061004591906102bf565b61004c565b005b8273ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b81526004016100879291906103fb565b600060405180830381600087803b1580156100a157600080fd5b505af11580156100b5573d6000803e3d6000fd5b50505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100fd826100d2565b9050919050565b61010d816100f2565b811461011857600080fd5b50565b60008135905061012a81610104565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61017e82610135565b810181811067ffffffffffffffff8211171561019d5761019c610146565b5b80604052505050565b60006101b06100be565b90506101bc8282610175565b919050565b600067ffffffffffffffff8211156101dc576101db610146565b5b602082029050602081019050919050565b600080fd5b6000610205610200846101c1565b6101a6565b90508083825260208201905060208402830185811115610228576102276101ed565b5b835b81811015610251578061023d888261011b565b84526020840193505060208101905061022a565b5050509392505050565b600082601f8301126102705761026f610130565b5b81356102808482602086016101f2565b91505092915050565b6000819050919050565b61029c81610289565b81146102a757600080fd5b50565b6000813590506102b981610293565b92915050565b6000806000606084860312156102d8576102d76100c8565b5b60006102e68682870161011b565b935050602084013567ffffffffffffffff811115610307576103066100cd565b5b6103138682870161025b565b9250506040610324868287016102aa565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610363816100f2565b82525050565b6000610375838361035a565b60208301905092915050565b6000602082019050919050565b60006103998261032e565b6103a38185610339565b93506103ae8361034a565b8060005b838110156103df5781516103c68882610369565b97506103d183610381565b9250506001810190506103b2565b5085935050505092915050565b6103f581610289565b82525050565b60006040820190508181036000830152610415818561038e565b905061042460208301846103ec565b939250505056fea2646970667358221220a9ef4ef1aff041711f36e690b13f99c9fbf231c1d9181db88e74d68958a0eecc64736f6c6343000813
0033"
,
Bin
:
"0x60806040523480156100
0f575f80fd5b5061069a8061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c8063180504051461004e5780632b231a3d1461006a578063673402e514610086578063ff34e1df146100a4575b5f80fd5b6100686004803603810190610063919061040b565b6100c0565b005b610084600480360381019061007f9190610477565b61012d565b005b61008e6101b8565b60405161009b919061052c565b60405180910390f35b6100be60048036038101906100b99190610545565b6101db565b005b8273ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b81526004016100fb929190610636565b5f604051808303815f87803b158015610112575f80fd5b505af1158015610124573d5f803e3d5ffd5b50505050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b8152600401610187929190610636565b5f604051808303815f87803b15801561019e575f80fd5b505af11580156101b0573d5f803e3d5ffd5b505050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102578261022e565b9050919050565b6102678161024d565b8114610271575f80fd5b50565b5f813590506102828161025e565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102d28261028c565b810181811067ffffffffffffffff821117156102f1576102f061029c565b5b80604052505050565b5f61030361021d565b905061030f82826102c9565b919050565b5f67ffffffffffffffff82111561032e5761032d61029c565b5b602082029050602081019050919050565b5f80fd5b5f61035561035084610314565b6102fa565b905080838252602082019050602084028301858111156103785761037761033f565b5b835b818110156103a1578061038d8882610274565b84526020840193505060208101905061037a565b5050509392505050565b5f82601f8301126103bf576103be610288565b5b81356103cf848260208601610343565b91505092915050565b5f819050919050565b6103ea816103d8565b81146103f4575f80fd5b50565b5f81359050610405816103e1565b92915050565b5f805f6060848603121561042257610421610226565b5b5f61042f86828701610274565b935050602084013567ffffffffffffffff8111156104505761044f61022a565b5b61045c868287016103ab565b925050604061046d868287016103f7565b9150509250925092565b5f806040838503121561048d5761048c610226565b5b5f83013567ffffffffffffffff8111156104aa576104a961022a565b5b6104b6858286016103ab565b92505060206104c7858286016103f7565b9150509250929050565b5f819050919050565b5f6104f46104ef6104ea8461022e565b6104d1565b61022e565b9050919050565b5f610505826104da565b9050919050565b5f610516826104fb565b9050919050565b6105268161050c565b82525050565b5f60208201905061053f5f83018461051d565b92915050565b5f6020828403121561055a57610559610226565b5b5f61056784828501610274565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6105a28161024d565b82525050565b5f6105b38383610599565b60208301905092915050565b5f602082019050919050565b5f6105d582610570565b6105df818561057a565b93506105ea8361058a565b805f5b8381101561061a57815161060188826105a8565b975061060c836105bf565b9250506001810190506105ed565b5085935050505092915050565b610630816103d8565b82525050565b5f6040820190508181035f83015261064e81856105cb565b905061065d6020830184610627565b939250505056fea26469706673582212208c179c1a90b0d75a3cfab6e4f26b460d2b4b6a52358bcd5f38dbadae993bb4a164736f6c6343000814
0033"
,
}
}
// OneChainCoinTransferABI is the input ABI used to generate the binding from.
// OneChainCoinTransferABI is the input ABI used to generate the binding from.
...
@@ -201,6 +201,79 @@ func (_OneChainCoinTransfer *OneChainCoinTransferTransactorRaw) Transact(opts *b
...
@@ -201,6 +201,79 @@ func (_OneChainCoinTransfer *OneChainCoinTransferTransactorRaw) Transact(opts *b
return
_OneChainCoinTransfer
.
Contract
.
contract
.
Transact
(
opts
,
method
,
params
...
)
return
_OneChainCoinTransfer
.
Contract
.
contract
.
Transact
(
opts
,
method
,
params
...
)
}
}
// Temp is a free data retrieval call binding the contract method 0x673402e5.
//
// Solidity: function temp() view returns(address)
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferCaller
)
Temp
(
opts
*
bind
.
CallOpts
)
(
common
.
Address
,
error
)
{
var
out
[]
interface
{}
err
:=
_OneChainCoinTransfer
.
contract
.
Call
(
opts
,
&
out
,
"temp"
)
if
err
!=
nil
{
return
*
new
(
common
.
Address
),
err
}
out0
:=
*
abi
.
ConvertType
(
out
[
0
],
new
(
common
.
Address
))
.
(
*
common
.
Address
)
return
out0
,
err
}
// Temp is a free data retrieval call binding the contract method 0x673402e5.
//
// Solidity: function temp() view returns(address)
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferSession
)
Temp
()
(
common
.
Address
,
error
)
{
return
_OneChainCoinTransfer
.
Contract
.
Temp
(
&
_OneChainCoinTransfer
.
CallOpts
)
}
// Temp is a free data retrieval call binding the contract method 0x673402e5.
//
// Solidity: function temp() view returns(address)
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferCallerSession
)
Temp
()
(
common
.
Address
,
error
)
{
return
_OneChainCoinTransfer
.
Contract
.
Temp
(
&
_OneChainCoinTransfer
.
CallOpts
)
}
// SetChainCoinTransferContract is a paid mutator transaction binding the contract method 0xff34e1df.
//
// Solidity: function SetChainCoinTransferContract(address tempAddr) returns()
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferTransactor
)
SetChainCoinTransferContract
(
opts
*
bind
.
TransactOpts
,
tempAddr
common
.
Address
)
(
*
types
.
Transaction
,
error
)
{
return
_OneChainCoinTransfer
.
contract
.
Transact
(
opts
,
"SetChainCoinTransferContract"
,
tempAddr
)
}
// SetChainCoinTransferContract is a paid mutator transaction binding the contract method 0xff34e1df.
//
// Solidity: function SetChainCoinTransferContract(address tempAddr) returns()
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferSession
)
SetChainCoinTransferContract
(
tempAddr
common
.
Address
)
(
*
types
.
Transaction
,
error
)
{
return
_OneChainCoinTransfer
.
Contract
.
SetChainCoinTransferContract
(
&
_OneChainCoinTransfer
.
TransactOpts
,
tempAddr
)
}
// SetChainCoinTransferContract is a paid mutator transaction binding the contract method 0xff34e1df.
//
// Solidity: function SetChainCoinTransferContract(address tempAddr) returns()
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferTransactorSession
)
SetChainCoinTransferContract
(
tempAddr
common
.
Address
)
(
*
types
.
Transaction
,
error
)
{
return
_OneChainCoinTransfer
.
Contract
.
SetChainCoinTransferContract
(
&
_OneChainCoinTransfer
.
TransactOpts
,
tempAddr
)
}
// OneTempTransfer is a paid mutator transaction binding the contract method 0x2b231a3d.
//
// Solidity: function oneTempTransfer(address[] toArr, uint256 value) returns()
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferTransactor
)
OneTempTransfer
(
opts
*
bind
.
TransactOpts
,
toArr
[]
common
.
Address
,
value
*
big
.
Int
)
(
*
types
.
Transaction
,
error
)
{
return
_OneChainCoinTransfer
.
contract
.
Transact
(
opts
,
"oneTempTransfer"
,
toArr
,
value
)
}
// OneTempTransfer is a paid mutator transaction binding the contract method 0x2b231a3d.
//
// Solidity: function oneTempTransfer(address[] toArr, uint256 value) returns()
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferSession
)
OneTempTransfer
(
toArr
[]
common
.
Address
,
value
*
big
.
Int
)
(
*
types
.
Transaction
,
error
)
{
return
_OneChainCoinTransfer
.
Contract
.
OneTempTransfer
(
&
_OneChainCoinTransfer
.
TransactOpts
,
toArr
,
value
)
}
// OneTempTransfer is a paid mutator transaction binding the contract method 0x2b231a3d.
//
// Solidity: function oneTempTransfer(address[] toArr, uint256 value) returns()
func
(
_OneChainCoinTransfer
*
OneChainCoinTransferTransactorSession
)
OneTempTransfer
(
toArr
[]
common
.
Address
,
value
*
big
.
Int
)
(
*
types
.
Transaction
,
error
)
{
return
_OneChainCoinTransfer
.
Contract
.
OneTempTransfer
(
&
_OneChainCoinTransfer
.
TransactOpts
,
toArr
,
value
)
}
// OneTransfer is a paid mutator transaction binding the contract method 0x18050405.
// OneTransfer is a paid mutator transaction binding the contract method 0x18050405.
//
//
// Solidity: function oneTransfer(address chainCoinAddr, address[] toArr, uint256 value) returns()
// Solidity: function oneTransfer(address chainCoinAddr, address[] toArr, uint256 value) returns()
...
...
contract_abi/coin_transfer/contract/OneChainCoinTransfer.sol
View file @
151fbd76
...
@@ -4,6 +4,8 @@ pragma solidity ^0.8.9;
...
@@ -4,6 +4,8 @@ pragma solidity ^0.8.9;
import "../../interface/IChainCoinTransfer.sol";
import "../../interface/IChainCoinTransfer.sol";
contract OneChainCoinTransfer {
contract OneChainCoinTransfer {
IChainCoinTransfer public temp;
function oneTransfer(
function oneTransfer(
address chainCoinAddr,
address chainCoinAddr,
address[] memory toArr,
address[] memory toArr,
...
@@ -11,4 +13,12 @@ contract OneChainCoinTransfer {
...
@@ -11,4 +13,12 @@ contract OneChainCoinTransfer {
) external {
) external {
IChainCoinTransfer(chainCoinAddr).transfer(toArr, value);
IChainCoinTransfer(chainCoinAddr).transfer(toArr, value);
}
}
function SetChainCoinTransferContract(address tempAddr) external {
temp = IChainCoinTransfer(tempAddr);
}
function oneTempTransfer(address[] memory toArr, uint256 value) external{
temp.transfer(toArr, value);
}
}
}
main.go
View file @
151fbd76
...
@@ -31,6 +31,9 @@ func main() {
...
@@ -31,6 +31,9 @@ func main() {
parseContractConfig
:=
tool
.
ParseContractConfig
(
"./config/contractConfig.json"
)
parseContractConfig
:=
tool
.
ParseContractConfig
(
"./config/contractConfig.json"
)
for
_
,
caseType
:=
range
tool
.
Cfg
.
TransferType
{
for
_
,
caseType
:=
range
tool
.
Cfg
.
TransferType
{
tranList
,
verifyFunc
:=
operator
.
GetTranFunc
(
caseType
,
accIndex
,
9
,
nonceMap
,
arrFormat
,
tool
.
Cfg
.
RpcNode
,
parseContractConfig
)
tranList
,
verifyFunc
:=
operator
.
GetTranFunc
(
caseType
,
accIndex
,
9
,
nonceMap
,
arrFormat
,
tool
.
Cfg
.
RpcNode
,
parseContractConfig
)
if
tranList
==
nil
||
verifyFunc
==
nil
{
break
}
txArr
=
append
(
txArr
,
tranList
...
)
txArr
=
append
(
txArr
,
tranList
...
)
verifyFuncArr
=
append
(
verifyFuncArr
,
verifyFunc
)
verifyFuncArr
=
append
(
verifyFuncArr
,
verifyFunc
)
accIndex
+=
9
accIndex
+=
9
...
...
operator/operator.go
View file @
151fbd76
...
@@ -462,6 +462,21 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
...
@@ -462,6 +462,21 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
{
{
return
PrReOneErc20TranCase
(
txCount
,
arr
,
contractArr
[
0
],
nonceMap
,
txArr
,
client
)
return
PrReOneErc20TranCase
(
txCount
,
arr
,
contractArr
[
0
],
nonceMap
,
txArr
,
client
)
}
}
// Erc20 approve
case
26
:
{
return
PrSpErc20ApproveTranCase
(
txCount
,
arr
,
contractArr
[
4
],
nonceMap
,
txArr
,
client
)
}
// Erc721 接受者相关
case
27
:
{
return
PrReErc721TranCase
(
startIndex
,
txCount
,
arr
,
contractArr
[
5
],
nonceMap
,
txArr
,
client
)
}
//多层-合约转账- 先set合约的对象地址-〉调用合约的方法 :两笔交易并行发送,同一个块中执行
case
28
:
{
return
PrReContractOneCoinTranTwiceCase
(
txCount
,
arr
,
contractArr
,
nonceMap
,
txArr
,
client
)
}
default
:
default
:
{
{
return
nil
,
nil
return
nil
,
nil
...
...
operator/partlyRelatedCase.go
View file @
151fbd76
...
@@ -1171,13 +1171,8 @@ func PrSpErc20ApproveTranCase(txCount int, testAccArr *tool.AccArrFormat, contra
...
@@ -1171,13 +1171,8 @@ func PrSpErc20ApproveTranCase(txCount int, testAccArr *tool.AccArrFormat, contra
return
resTxArr
,
verify
return
resTxArr
,
verify
}
}
// PrReSpOneErc20ApproveTranCase 多层-erc20-approve
// PrReErc721TranCase 单层-erc721-接受者相关
func
PrReSpOneErc20ApproveTranCase
()
{
func
PrReErc721TranCase
(
startIndex
int
,
txCount
int
,
testAccArr
*
tool
.
AccArrFormat
,
contractMap
map
[
string
]
common
.
Address
,
accountNonceMap
*
sync
.
Map
,
resTxArr
[]
*
types
.
Transaction
,
client
*
ethclient
.
Client
)
([]
*
types
.
Transaction
,
func
()
bool
)
{
}
// PrReErc721TranCase 单层-erc721-发送者相关
func
PrReErc721TranCase
(
txCount
int
,
testAccArr
*
tool
.
AccArrFormat
,
contractMap
map
[
string
]
common
.
Address
,
accountNonceMap
*
sync
.
Map
,
resTxArr
[]
*
types
.
Transaction
,
client
*
ethclient
.
Client
)
([]
*
types
.
Transaction
,
func
()
bool
)
{
erc721Trade
:=
&
contractErc721
.
Erc721Trade
{
erc721Trade
:=
&
contractErc721
.
Erc721Trade
{
Erc721Addr
:
contractMap
[
constant
.
ERC721
],
Erc721Addr
:
contractMap
[
constant
.
ERC721
],
}
}
...
@@ -1189,30 +1184,30 @@ func PrReErc721TranCase(txCount int, testAccArr *tool.AccArrFormat, contractMap
...
@@ -1189,30 +1184,30 @@ func PrReErc721TranCase(txCount int, testAccArr *tool.AccArrFormat, contractMap
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
return
nil
,
nil
}
}
beforeToErc721Bal
:=
make
(
map
[
common
.
Address
]
*
big
.
Int
,
0
)
beforeFromErc721Bal
:=
make
(
map
[
common
.
Address
]
*
big
.
Int
,
0
)
beforeFromErc721Bal
:=
make
(
map
[
common
.
Address
]
*
big
.
Int
,
0
)
toAddr
:=
testAccArr
.
ToAddr
[
0
]
beforeToErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
toAddr
)
if
err
!=
nil
{
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
return
nil
,
nil
}
log
.
Info
(
"Erc721 接受者相关 To balance:"
,
beforeToErc721Bal
.
String
())
for
i
:=
0
;
i
<
txCount
;
i
++
{
for
i
:=
0
;
i
<
txCount
;
i
++
{
auth
,
err
:=
bind
.
NewKeyedTransactorWithChainID
(
testAccArr
.
FromPrv
[
i
],
tool
.
Cfg
.
ChainId
)
auth
,
err
:=
bind
.
NewKeyedTransactorWithChainID
(
testAccArr
.
FromPrv
[
i
],
tool
.
Cfg
.
ChainId
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Errorf
(
"DeployTokenTransfer func newKeyedTransactorWithChainID err:"
,
err
)
log
.
Errorf
(
"DeployTokenTransfer func newKeyedTransactorWithChainID err:"
,
err
)
continue
continue
}
}
erc721Trade
.
ToAddr
=
testAccArr
.
ToAddr
[
i
]
erc721Trade
.
ToAddr
=
toAddr
toErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
testAccArr
.
ToAddr
[
i
])
if
err
!=
nil
{
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
return
nil
,
nil
}
fromErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
testAccArr
.
FromAddr
[
i
])
fromErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
testAccArr
.
FromAddr
[
i
])
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
return
nil
,
nil
return
nil
,
nil
}
}
beforeToErc721Bal
[
testAccArr
.
ToAddr
[
i
]]
=
toErc721Bal
log
.
Info
(
"Erc721 接受者相关 From balance:"
,
fromErc721Bal
.
String
())
beforeFromErc721Bal
[
testAccArr
.
FromAddr
[
i
]]
=
fromErc721Bal
beforeFromErc721Bal
[
testAccArr
.
FromAddr
[
i
]]
=
fromErc721Bal
erc721Trade
.
FromAddr
=
testAccArr
.
FromAddr
[
i
]
erc721Trade
.
FromAddr
=
testAccArr
.
FromAddr
[
i
]
// todo 需要初始化时知道sender对应的tokenId
erc721Trade
.
TokenId
=
big
.
NewInt
(
int64
(
startIndex
))
erc721Trade
.
TokenId
=
big
.
NewInt
(
int64
(
i
))
value
,
_
:=
accountNonceMap
.
Load
(
testAccArr
.
FromAddr
[
i
])
value
,
_
:=
accountNonceMap
.
Load
(
testAccArr
.
FromAddr
[
i
])
auth
.
Nonce
=
big
.
NewInt
(
value
.
(
int64
))
auth
.
Nonce
=
big
.
NewInt
(
value
.
(
int64
))
auth
.
NoSend
=
true
auth
.
NoSend
=
true
...
@@ -1223,25 +1218,29 @@ func PrReErc721TranCase(txCount int, testAccArr *tool.AccArrFormat, contractMap
...
@@ -1223,25 +1218,29 @@ func PrReErc721TranCase(txCount int, testAccArr *tool.AccArrFormat, contractMap
return
nil
,
nil
return
nil
,
nil
}
}
log
.
Info
(
"Erc721TransferFromSignTx tx:"
,
tx
.
Hash
()
.
Hex
())
log
.
Info
(
"Erc721TransferFromSignTx tx:"
,
tx
.
Hash
()
.
Hex
())
startIndex
++
resTxArr
=
append
(
resTxArr
,
tx
)
resTxArr
=
append
(
resTxArr
,
tx
)
}
}
verify
:=
func
()
bool
{
verify
:=
func
()
bool
{
res
:=
true
res
:=
true
for
i
:=
0
;
i
<
txCount
;
i
++
{
verifyToAddr
:=
testAccArr
.
ToAddr
[
0
]
toErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
testAccArr
.
ToAddr
[
i
]
)
toErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
verifyToAddr
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
res
=
false
res
=
false
}
}
if
beforeToErc721Bal
[
testAccArr
.
ToAddr
[
i
]]
.
Sub
(
beforeToErc721Bal
[
testAccArr
.
ToAddr
[
i
]],
toErc721Bal
)
.
Cmp
(
big
.
NewInt
(
1
))
!=
0
{
log
.
Info
(
"Erc721 接受者相关 To balance:"
,
toErc721Bal
.
String
())
if
beforeToErc721Bal
.
Sub
(
beforeToErc721Bal
,
toErc721Bal
)
.
Cmp
(
big
.
NewInt
(
int64
(
txCount
)))
!=
0
{
res
=
false
res
=
false
}
}
for
i
:=
0
;
i
<
txCount
;
i
++
{
fromErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
testAccArr
.
FromAddr
[
i
])
fromErc721Bal
,
err
:=
erc721Contract
.
BalanceOf
(
&
bind
.
CallOpts
{},
testAccArr
.
FromAddr
[
i
])
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
log
.
Error
(
"Get erc721 bal error:"
,
err
.
Error
())
res
=
false
res
=
false
}
}
if
beforeFromErc721Bal
[
testAccArr
.
FromAddr
[
i
]]
.
Sub
(
beforeToErc721Bal
[
testAccArr
.
FromAddr
[
i
]],
fromErc721Bal
)
.
Cmp
(
big
.
NewInt
(
1
))
!=
0
{
log
.
Info
(
"Erc721 接受者相关 From balance:"
,
fromErc721Bal
.
String
())
if
beforeFromErc721Bal
[
testAccArr
.
FromAddr
[
i
]]
.
Sub
(
beforeFromErc721Bal
[
testAccArr
.
FromAddr
[
i
]],
fromErc721Bal
)
.
Cmp
(
big
.
NewInt
(
1
))
!=
0
{
res
=
false
res
=
false
}
}
}
}
...
@@ -1250,12 +1249,78 @@ func PrReErc721TranCase(txCount int, testAccArr *tool.AccArrFormat, contractMap
...
@@ -1250,12 +1249,78 @@ func PrReErc721TranCase(txCount int, testAccArr *tool.AccArrFormat, contractMap
return
resTxArr
,
verify
return
resTxArr
,
verify
}
}
// PrSpErc721TranCase 单层-erc721-接受者相关
// PrReContractOneCoinTranTwiceCase 多层-合约转账- 先set合约的对象地址-〉调用合约的方法 :两笔交易并行发送,同一个块中执行
func
PrSpErc721TranCase
()
{
func
PrReContractOneCoinTranTwiceCase
(
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
)
// PrReSpErc721TranCase 单层-erc721-发送接受者相关
if
reBeforeToBal
==
nil
{
func
PrReSpErc721TranCase
()
{
return
nil
,
nil
}
sendBeforeContractBalMap
:=
make
(
map
[
common
.
Address
]
*
big
.
Int
,
0
)
for
i
:=
0
;
i
<
txCount
;
i
++
{
coinTranAddr
:=
contractMap
[
i
][
constant
.
COIN_TRANSFER
]
contractCoinOneTrade
:=
&
coin
.
ContractCoinOneTrade
{
ChainContractAdr
:
contractMap
[
i
][
constant
.
COIN_TRANSFER
],
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
}
sendBeforeBal
:=
util
.
GetAccBal
(
client
,
coinTranAddr
)
if
sendBeforeBal
==
nil
{
return
nil
,
nil
}
sendBeforeContractBalMap
[
contractMap
[
i
][
constant
.
COIN_TRANSFER
]]
=
sendBeforeBal
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
])
nonce
:=
value
.
(
int64
)
auth
.
Nonce
=
big
.
NewInt
(
nonce
)
auth
.
NoSend
=
true
auth
.
GasLimit
=
500000
auth
.
GasPrice
=
big
.
NewInt
(
10000000000
)
tx
,
err
:=
contractCoinOneTrade
.
OneTransferSetTempSignTx
(
auth
,
oneChainCoinTransfer
)
if
err
!=
nil
{
log
.
Error
(
"OneTransferSignTx error:"
,
err
.
Error
())
return
nil
,
nil
}
resTxArr
=
append
(
resTxArr
,
tx
)
nonce
++
auth
.
Nonce
=
big
.
NewInt
(
nonce
)
tx
,
err
=
contractCoinOneTrade
.
OneTransferSetAfterSignTx
(
auth
,
oneChainCoinTransfer
)
if
err
!=
nil
{
log
.
Error
(
"OneTransferSignTx error:"
,
err
.
Error
())
return
nil
,
nil
}
resTxArr
=
append
(
resTxArr
,
tx
)
}
verify
:=
func
()
bool
{
res
:=
true
for
i
:=
0
;
i
<
txCount
;
i
++
{
coinAddr
:=
contractMap
[
i
][
constant
.
COIN_TRANSFER
]
sendBeforeBal
:=
sendBeforeContractBalMap
[
coinAddr
]
sendAfterBal
:=
util
.
GetAccBal
(
client
,
coinAddr
)
if
sendAfterBal
==
nil
{
res
=
false
}
if
sendBeforeBal
.
Sub
(
sendBeforeBal
,
sendAfterBal
)
.
Cmp
(
amount
)
!=
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