Commit c72a9be3 authored by duanjinfei's avatar duanjinfei

tidy tran case

parent 22bf17e9
{ {
"deployAddr": "0xe2bA4B27E835f3D5A8f74B53aD6b8b6264D3F501", "deployAddr1": "0xe2bA4B27E835f3D5A8f74B53aD6b8b6264D3F501",
"deployPrv": "115725efa0b457a764bb0b73b79a26605a54a5025d825b5a627f69354cdbbbf4", "deployPrv1": "115725efa0b457a764bb0b73b79a26605a54a5025d825b5a627f69354cdbbbf4",
"rpcNode": "http://54.72.101.87:50000", "deployAddr": "0x40EC4256fcBCA69CdbAc942594caeC79FBE10494",
"chainId": 155, "deployPrv": "37871f094f89fc95599e73d72d3008c828bb76d0864759011fa14dbaf6cf3c06",
"rpcNode1": "http://192.168.1.125:50000",
"rpcNode": "http://15.161.177.5:26658",
"chainId1": 155,
"chainId": 256256,
"goRoutine": 1, "goRoutine": 1,
"generateAccCount": 500, "generateAccCount": 500,
"isDeployContract": true, "isDeployContract": false,
"isInitAccountBalance": false, "isInitAccountBalance": true,
"startTokenId": 1, "startTokenId": 1,
"endTokenId": 100, "endTokenId": 100,
"transferType": { "transferType": []
"NotAssociatedFlag": true,
"PartialAssociation": false,
"FullyAssociative": false,
"Coin": true,
"Coin_Transfer":true,
"One_Coin_Transfer": true,
"Two_Coin_Transfer":true,
"ERC20": true,
"Token20_Transfer":true,
"One_Token20_Transfer": true,
"Two_Token20_Transfer":true,
"ERC721": true,
"Token721_Transfer":true,
"One_Token721_Transfer": true,
"Two_Token721_Transfer":true,
"Read_Write": true,
"One_Read_Write":true,
"Read_Chain": true
}
} }
This diff is collapsed.
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAllFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}] [{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAllFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file \ No newline at end of file
...@@ -323,6 +323,12 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { ...@@ -323,6 +323,12 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
_safeMint(to, tokenId); _safeMint(to, tokenId);
} }
function batchMint(address to, uint256[] calldata tokenIds) public {
for(uint i = 0;i < tokenIds.length;i++){
_safeMint(to, tokenIds[i]);
}
}
/** /**
* @dev Safely mints `tokenId` and transfers it to `to`. * @dev Safely mints `tokenId` and transfers it to `to`.
* *
......
...@@ -11,22 +11,42 @@ import ( ...@@ -11,22 +11,42 @@ import (
func main() { func main() {
log.InitLog(log.LogConfig{Path: "logs", Level: "debug", Save: 3}) log.InitLog(log.LogConfig{Path: "logs", Level: "debug", Save: 3})
txArr := make([]*types.Transaction, 0) txArr := make([]*types.Transaction, 0)
verifyFuncArr := make([]func() bool, 0)
// 部署合约 // 部署合约
if tool.Cfg.IsDeployContract { if tool.Cfg.IsDeployContract {
txArr = operator.DeployContract(tool.Cfg.RpcNode, txArr) txArr = operator.DeployContract(tool.Cfg.RpcNode, txArr)
} }
// 初始化From账户以及合约账户 // 初始化From账户以及合约账户
if tool.Cfg.IsInitAccountBalance { if tool.Cfg.IsInitAccountBalance {
txArr = operator.InitCaseAccount(tool.Cfg.RpcNode, txArr) txArr = operator.InitCaseAccount(tool.Cfg.RpcNode, txArr)
} }
// 不相关交易case
if tool.Cfg.TransferType["NotAssociatedFlag"] { // 转账交易case
if len(tool.Cfg.TransferType) != 0 {
accIndex := 0
nonceMap := util.GetAccountNonce(tool.Cfg.RpcNode)
arrFormat := tool.ParseAccountConfig("./config/account.json")
parseContractConfig := tool.ParseContractConfig("./config/contractConfig.json")
for _, caseType := range tool.Cfg.TransferType {
tranList, verifyFunc := operator.GetTranFunc(caseType, accIndex, 2, nonceMap, arrFormat, tool.Cfg.RpcNode, parseContractConfig)
txArr = append(txArr, tranList...)
verifyFuncArr = append(verifyFuncArr, verifyFunc)
accIndex += 2
}
} }
// 发送整合后的交易
if len(txArr) > 0 { if len(txArr) > 0 {
operator.SendTransaction(txArr) operator.SendTransaction(txArr)
util.GetTxReceipt(tool.Cfg.RpcNode, txArr) util.GetTxReceipt(tool.Cfg.RpcNode, txArr)
for _, vf := range verifyFuncArr {
if !vf() {
log.Error("Verify failed")
}
}
} }
//util.GetAccountErc721BalanceOf(tool.Cfg.RpcNode, tool.Cfg.ContractMap[constant.ERC721], tool.Cfg.ContractMap[constant.TOKEN721_TRANSFER])
//util.GetAccountErc20BalanceOf(tool.Cfg.RpcNode, tool.Cfg.ContractMap[constant.TOKEN20_TRANSFER], tool.Cfg.DeployAddr)
util.GetAccountBalance(tool.Cfg.RpcNode) util.GetAccountBalance(tool.Cfg.RpcNode)
} }
This diff is collapsed.
This diff is collapsed.
package main
import (
"context"
erc20 "contract-case/contract_abi/erc20_transfer/compile"
erc721 "contract-case/contract_abi/erc721_transfer/compile"
"contract-case/log"
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"strings"
"testing"
)
func TestGetContractAbi(t *testing.T) {
// 连接以太坊网络
client, err := ethclient.Dial("http://15.161.177.5:26658")
if err != nil {
log.Fatal(err)
}
// 从合约地址获取合约代码
contractAddress := common.HexToAddress("0xacea4c028c233e5d896b5ea28eb1c24d64b937e2")
code, err := client.CodeAt(context.Background(), contractAddress, nil)
if err != nil {
log.Fatal("get contract code err:", err)
}
balance, err := client.BalanceAt(context.Background(), contractAddress, nil)
if err != nil {
log.Fatal("Get account balance err:", err.Error())
}
log.Info("balance:", balance.String())
// 解析ABI
contractAbi, err := abi.JSON(strings.NewReader(string(code)))
if err != nil {
log.Fatal(err)
}
// 打印ABI信息
fmt.Println(contractAbi.Methods)
}
func TestGetErc20Balance(t *testing.T) {
// 连接以太坊网络
client, err := ethclient.Dial("http://15.161.177.5:26658")
if err != nil {
log.Fatal(err)
}
// 从合约地址获取合约代码
contractAddress := common.HexToAddress("0x91f2c122c8060258605c287cea0bdda056b7b25d")
accountAddr := common.HexToAddress("0x4b0ae7ac4886e7c54e40529cc008df84407e5975")
newERC20, err := erc20.NewERC20(contractAddress, client)
if err != nil {
return
}
of, err := newERC20.BalanceOf(&bind.CallOpts{}, accountAddr)
if err != nil {
return
}
log.Info("balance is :", of.String())
}
func TestGetErc721Balance(t *testing.T) {
// 连接以太坊网络
client, err := ethclient.Dial("http://15.161.177.5:26658")
if err != nil {
log.Fatal(err)
}
// 从合约地址获取合约代码
contractAddress := common.HexToAddress("0x450260F10b2D55b785037388fA3aA3b2232cC9F4")
accountAddr := common.HexToAddress("0x40EC4256fcBCA69CdbAc942594caeC79FBE10494")
newERC721, err := erc721.NewERC721(contractAddress, client)
if err != nil {
return
}
of, err := newERC721.BalanceOf(&bind.CallOpts{}, accountAddr)
if err != nil {
return
}
log.Info("balance is :", of.String())
}
...@@ -14,14 +14,14 @@ import ( ...@@ -14,14 +14,14 @@ import (
) )
type ConfigJson struct { type ConfigJson struct {
DeployAddr string `json:"deployAddr"` DeployAddr string `json:"deployAddr"`
DeployPrv string `json:"deployPrv"` DeployPrv string `json:"deployPrv"`
RpcNode string `json:"rpcNode"` RpcNode string `json:"rpcNode"`
ChainId int64 `json:"chainId"` ChainId int64 `json:"chainId"`
TransferType map[string]bool `json:"transferType"` TransferType []int `json:"transferType"`
GenerateAccCount int `json:"generateAccCount"` GenerateAccCount int `json:"generateAccCount"`
IsDeployContract bool `json:"isDeployContract"` IsDeployContract bool `json:"isDeployContract"`
IsInitAccountBalance bool `json:"isInitAccountBalance"` IsInitAccountBalance bool `json:"isInitAccountBalance"`
} }
type Config struct { type Config struct {
...@@ -29,7 +29,7 @@ type Config struct { ...@@ -29,7 +29,7 @@ type Config struct {
DeployPrv *ecdsa.PrivateKey DeployPrv *ecdsa.PrivateKey
RpcNode *ethclient.Client RpcNode *ethclient.Client
ChainId *big.Int ChainId *big.Int
TransferType map[string]bool TransferType []int
GenerateAccCount int GenerateAccCount int
IsDeployContract bool IsDeployContract bool
IsInitAccountBalance bool IsInitAccountBalance bool
......
...@@ -53,7 +53,7 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) { ...@@ -53,7 +53,7 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) {
if receipt.Status == 0 { if receipt.Status == 0 {
log.Error("Receipt:", receipt) log.Error("Receipt:", receipt)
} else { } else {
log.Infof("Receipt: status: %d, logs:%s ,gasUsed: %d", receipt.Status, receipt.Logs, receipt.GasUsed) log.Infof("Receipt: status: %d,gasUsed: %d", receipt.Status, receipt.GasUsed)
} }
} }
} }
...@@ -91,6 +91,9 @@ func GetAccountNonce(client *ethclient.Client) *sync.Map { ...@@ -91,6 +91,9 @@ func GetAccountNonce(client *ethclient.Client) *sync.Map {
} }
func GetAccBal(client *ethclient.Client, addr common.Address) *big.Int { func GetAccBal(client *ethclient.Client, addr common.Address) *big.Int {
mutex := sync.Mutex{}
mutex.Lock()
defer mutex.Unlock()
balance, err := client.BalanceAt(context.Background(), addr, nil) balance, err := client.BalanceAt(context.Background(), addr, nil)
if err != nil { if err != nil {
log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error()) log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error())
...@@ -112,6 +115,7 @@ func GetAccountBalance(client *ethclient.Client) { ...@@ -112,6 +115,7 @@ func GetAccountBalance(client *ethclient.Client) {
select { select {
case addr := <-addrChan: case addr := <-addrChan:
GetAccBal(client, addr) GetAccBal(client, addr)
log.Info("tool.Cfg.ContractMap[0][constant.ERC20]:", tool.Cfg.ContractMap[0][constant.ERC20])
GetAccountErc20BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC20], addr) GetAccountErc20BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC20], addr)
GetAccountErc721BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC721], addr) GetAccountErc721BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC721], addr)
atomic.AddInt32(&handleBalanceCount, 1) atomic.AddInt32(&handleBalanceCount, 1)
...@@ -130,6 +134,9 @@ func GetAccountBalance(client *ethclient.Client) { ...@@ -130,6 +134,9 @@ func GetAccountBalance(client *ethclient.Client) {
} }
func GetAccountErc20BalanceOf(client *ethclient.Client, erc20Addr common.Address, toAddr common.Address) { func GetAccountErc20BalanceOf(client *ethclient.Client, erc20Addr common.Address, toAddr common.Address) {
mutex := sync.Mutex{}
mutex.Lock()
defer mutex.Unlock()
newERC20, err := erc20.NewERC20(erc20Addr, client) newERC20, err := erc20.NewERC20(erc20Addr, client)
if err != nil { if err != nil {
log.Error("Init account - new erc720 err:", err.Error()) log.Error("Init account - new erc720 err:", err.Error())
...@@ -149,6 +156,9 @@ func GetAccountErc20BalanceOf(client *ethclient.Client, erc20Addr common.Address ...@@ -149,6 +156,9 @@ func GetAccountErc20BalanceOf(client *ethclient.Client, erc20Addr common.Address
} }
func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Address, toAddr common.Address) { func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Address, toAddr common.Address) {
mutex := sync.Mutex{}
mutex.Lock()
defer mutex.Unlock()
newERC721, err := erc721.NewERC721(erc721Addr, client) newERC721, err := erc721.NewERC721(erc721Addr, client)
if err != nil { if err != nil {
log.Error("Init account - new erc721 err:", err.Error()) log.Error("Init account - new erc721 err:", err.Error())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment