Commit c72a9be3 authored by duanjinfei's avatar duanjinfei

tidy tran case

parent 22bf17e9
{
"deployAddr": "0xe2bA4B27E835f3D5A8f74B53aD6b8b6264D3F501",
"deployPrv": "115725efa0b457a764bb0b73b79a26605a54a5025d825b5a627f69354cdbbbf4",
"rpcNode": "http://54.72.101.87:50000",
"chainId": 155,
"deployAddr1": "0xe2bA4B27E835f3D5A8f74B53aD6b8b6264D3F501",
"deployPrv1": "115725efa0b457a764bb0b73b79a26605a54a5025d825b5a627f69354cdbbbf4",
"deployAddr": "0x40EC4256fcBCA69CdbAc942594caeC79FBE10494",
"deployPrv": "37871f094f89fc95599e73d72d3008c828bb76d0864759011fa14dbaf6cf3c06",
"rpcNode1": "http://192.168.1.125:50000",
"rpcNode": "http://15.161.177.5:26658",
"chainId1": 155,
"chainId": 256256,
"goRoutine": 1,
"generateAccCount": 500,
"isDeployContract": true,
"isInitAccountBalance": false,
"isDeployContract": false,
"isInitAccountBalance": true,
"startTokenId": 1,
"endTokenId": 100,
"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
}
"transferType": []
}
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"}]
\ No newline at end of file
[{"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
......@@ -323,6 +323,12 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
_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`.
*
......
......@@ -11,22 +11,42 @@ import (
func main() {
log.InitLog(log.LogConfig{Path: "logs", Level: "debug", Save: 3})
txArr := make([]*types.Transaction, 0)
verifyFuncArr := make([]func() bool, 0)
// 部署合约
if tool.Cfg.IsDeployContract {
txArr = operator.DeployContract(tool.Cfg.RpcNode, txArr)
}
// 初始化From账户以及合约账户
if tool.Cfg.IsInitAccountBalance {
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 {
operator.SendTransaction(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)
}
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())
}
......@@ -18,7 +18,7 @@ type ConfigJson struct {
DeployPrv string `json:"deployPrv"`
RpcNode string `json:"rpcNode"`
ChainId int64 `json:"chainId"`
TransferType map[string]bool `json:"transferType"`
TransferType []int `json:"transferType"`
GenerateAccCount int `json:"generateAccCount"`
IsDeployContract bool `json:"isDeployContract"`
IsInitAccountBalance bool `json:"isInitAccountBalance"`
......@@ -29,7 +29,7 @@ type Config struct {
DeployPrv *ecdsa.PrivateKey
RpcNode *ethclient.Client
ChainId *big.Int
TransferType map[string]bool
TransferType []int
GenerateAccCount int
IsDeployContract bool
IsInitAccountBalance bool
......
......@@ -53,7 +53,7 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) {
if receipt.Status == 0 {
log.Error("Receipt:", receipt)
} 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 {
}
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)
if err != nil {
log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error())
......@@ -112,6 +115,7 @@ func GetAccountBalance(client *ethclient.Client) {
select {
case addr := <-addrChan:
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)
GetAccountErc721BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC721], addr)
atomic.AddInt32(&handleBalanceCount, 1)
......@@ -130,6 +134,9 @@ func GetAccountBalance(client *ethclient.Client) {
}
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)
if err != nil {
log.Error("Init account - new erc720 err:", err.Error())
......@@ -149,6 +156,9 @@ func GetAccountErc20BalanceOf(client *ethclient.Client, erc20Addr 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)
if err != nil {
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