Commit 22bf17e9 authored by duanjinfei's avatar duanjinfei

tran case test twice commity

parent b5198fce
...@@ -8,18 +8,18 @@ abigen --bin ChainCoinTransfer.bin --abi ChainCoinTransfer.abi --pkg contractCoi ...@@ -8,18 +8,18 @@ abigen --bin ChainCoinTransfer.bin --abi ChainCoinTransfer.abi --pkg contractCoi
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
solc --abi --bin ERC20.sol -o ../abi_bin solc --abi --bin contract_abi/erc20_transfer/contract/ERC20.sol -o contract_abi/erc20_transfer/abi_bin --overwrite
solc --abi --bin TokenTransfer.sol -o ../abi_bin solc --abi --bin contract_abi/erc20_transfer/contract/TokenTransfer.sol -o contract_abi/erc20_transfer/abi_bin --overwrite
solc --abi --bin OneTokenTransfer.sol -o ../abi_bin solc --abi --bin contract_abi/erc20_transfer/contract/OneTokenTransfer.sol -o contract_abi/erc20_transfer/abi_bin --overwrite
solc --abi --bin TwoTokenTransfer.sol -o ../abi_bin solc --abi --bin contract_abi/erc20_transfer/contract/TwoTokenTransfer.sol -o contract_abi/erc20_transfer/abi_bin --overwrite
abigen --bin ERC20.bin --abi ERC20.abi --pkg contractToken20 --type ERC20 --out ../compile/ERC20.go abigen --bin ERC20.bin --abi ERC20.abi --pkg contractToken20 --type ERC20 --out ../compile/ERC20.go
abigen --bin TokenTransfer.bin --abi TokenTransfer.abi --pkg contractToken20 --type TokenTransfer --out ../compile/TokenTransfer.go abigen --bin TokenTransfer.bin --abi TokenTransfer.abi --pkg contractToken20 --type TokenTransfer --out ../compile/TokenTransfer.go
abigen --bin OneTokenTransfer.bin --abi OneTokenTransfer.abi --pkg contractToken20 --type OneTokenTransfer --out ../compile/OneTokenTransfer.go abigen --bin OneTokenTransfer.bin --abi OneTokenTransfer.abi --pkg contractToken20 --type OneTokenTransfer --out ../compile/OneTokenTransfer.go
abigen --bin TwoTokenTransfer.bin --abi TwoTokenTransfer.abi --pkg contractToken20 --type TwoTokenTransfer --out ../compile/TwoTokenTransfer.go abigen --bin TwoTokenTransfer.bin --abi TwoTokenTransfer.abi --pkg contractToken20 --type TwoTokenTransfer --out ../compile/TwoTokenTransfer.go
solc --abi --bin contract_abi/erc721_transfer/contract/ERC721.sol -o contract_abi/erc721_transfer/abi_bin --overwrite solc --abi --bin ./contract_abi/erc721_transfer/contract/ERC721.sol -o contract_abi/erc721_transfer/abi_bin --overwrite
solc --abi --bin contract_abi/erc721_transfer/contract/NftTokenTransfer.sol -o contract_abi/erc721_transfer/abi_bin --overwrite solc --abi --bin ./contract_abi/erc721_transfer/contract/NftTokenTransfer.sol -o contract_abi/erc721_transfer/abi_bin --overwrite
solc --abi --bin contract_abi/erc721_transfer/contract/OneNftTokenTransfer.sol -o contract_abi/erc721_transfer/abi_bin --overwrite solc --abi --bin contract_abi/erc721_transfer/contract/OneNftTokenTransfer.sol -o contract_abi/erc721_transfer/abi_bin --overwrite
solc --abi --bin contract_abi/erc721_transfer/contract/TwoNftTokenTransfer.sol -o contract_abi/erc721_transfer/abi_bin --overwrite solc --abi --bin contract_abi/erc721_transfer/contract/TwoNftTokenTransfer.sol -o contract_abi/erc721_transfer/abi_bin --overwrite
......
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
"chainId": 155, "chainId": 155,
"goRoutine": 1, "goRoutine": 1,
"generateAccCount": 500, "generateAccCount": 500,
"isDeployContract": false, "isDeployContract": true,
"isInitAccountBalance": false, "isInitAccountBalance": false,
"startTokenId": 1, "startTokenId": 1,
"endTokenId": 10, "endTokenId": 100,
"transferType": { "transferType": {
"NotAssociatedFlag": true, "NotAssociatedFlag": true,
"PartialAssociation": false, "PartialAssociation": false,
......
{ [
"Coin_Transfer": "0xf52c689ced325ba52891f2b90f8ab36c93eaaf67", {
"ERC20": "0x9b5b83609915089b0a534b4bd0059d4514c55d26", "Coin_Transfer": "0x7eb5eab85e37d297b92e4c56a0187e910f37d969",
"ERC721": "0x92e96c2f924dc4871e5a8fddde4983423533bbe7", "ERC20": "0xbb0bb92922b244b2e3545f55bc4aee00299ea6de",
"One_Coin_Transfer": "0x117cd28c021318c06f9670fd9fe484d4c9dfcb13", "ERC721": "0x89afa7faf59f6437a3df9c373bc5401b8d5f0099",
"One_Read_Write": "0xc588945f57f672f1b346fe8a99e368d5a240a50d", "One_Coin_Transfer": "0xcc600106d992657b6fabbb68e005eb94a07acc41",
"One_Token20_Transfer": "0xa2b4d23faa81c0599bb537a426bb4dfeba39f58f", "One_Read_Write": "0x5adfe690fb447730ba9d992940d5d07a2efa5094",
"One_Token721_Transfer": "0xa7afc31cdbc0e37d2c290a7ca82429bb3bcc588b", "One_Token20_Transfer": "0x469130ea4dfbed768b0d771cc99946f81738c72e",
"Read_Chain": "0x8f0d51ad96f91170677cb1295ac31eaa8b9f9a33", "One_Token721_Transfer": "0x92b28beb872f81aaad3f111cffab1ba10fec6918",
"Read_Write": "0x07872fdda3af5ff4f8fbdebbc022dfcb4fd8e022", "Read_Chain": "0x00059658a96be67f1412f607549eeaee4a81ec87",
"Token20_Transfer": "0x7a0047ee9c89646e2df0de21a627827aa777f23c", "Read_Write": "0x1c585fd816923a5957024ab3fd8fcfb74f6235da",
"Token721_Transfer": "0xdb12ab942b4745a27a024b41c2cd6f55220e9316", "Token20_Transfer": "0x25ed0c6762f49fcf532fb01152ae79088576bfee",
"Two_Coin_Transfer": "0x46cdadb68998d6c60e24f085a163baf2861be6b3", "Token721_Transfer": "0xbcb1513c82bb21db13b1b21ee696e36a984351af",
"Two_Token20_Transfer": "0xb4176da3ecd693cb257f008502e43ca9aefc981b", "Two_Coin_Transfer": "0x761405065d3cd84fb5ef7aed0dc24ae6a5768f83",
"Two_Token721_Transfer": "0x63a18b3cc9113780bc405b9f9ffbf6988b52560a" "Two_Token20_Transfer": "0xef86469624825bd005c3f505637ab58435e32443",
} "Two_Token721_Transfer": "0x2c046c47053f696a9b09cd5c14c7367c24976643"
\ No newline at end of file },
{
"Coin_Transfer": "0x199a64a59cf31711854724bd95ee40860e9ce79d",
"ERC20": "0xc9f6def8a5925f8c87bda1ce5993f123f39d6278",
"ERC721": "0x74c9a17590f80b321560c38237438fbdeee067a9",
"One_Coin_Transfer": "0x998cc9e89cfa8dd01125bdbf7d84682c9cd49d59",
"One_Read_Write": "0x72ffc41d0c84a2da43298ac11bea906fa8b98dfd",
"One_Token20_Transfer": "0xb2cd516623cd57bee80820079829e2ba520923b1",
"One_Token721_Transfer": "0x481d353bd1ea858f9f4adb09cab4e1a34a0bdd4a",
"Read_Chain": "0x248c19ea5448a69aebf02a910acc5f3369b64da2",
"Read_Write": "0x062d6800dd115b471ec6600847d9d5696921859e",
"Token20_Transfer": "0x03a3b76019a43fb683c63b5dc083770cad932575",
"Token721_Transfer": "0xc3a738b7083f6014afa9317061623bdb083b6068",
"Two_Coin_Transfer": "0xbefc6e7134b2ad9cad38ff65d9cff1f70bec1eb0",
"Two_Token20_Transfer": "0x618defb1a892882a260affaf01fef35967a8f2c0",
"Two_Token721_Transfer": "0x7d9c6229b37d9afabfbc1311fd9378d3b062e071"
},
{
"Coin_Transfer": "0xd6926ea20837af80216bcdb31ae4cc4e0c22cfa7",
"ERC20": "0x2f9a4f45efb059d8c8ba55d4aa7249ddb85e00a7",
"ERC721": "0x3af47a08f0e2aaa2966c5216586ebec840aa03d7",
"One_Coin_Transfer": "0x49a3eadf8ea8a74fcdb7a0edf5bb9024103b5e06",
"One_Read_Write": "0xacf8f258ddd4224169ab09e0ddbd0657bc930ae3",
"One_Token20_Transfer": "0xd8779b3af0c92c0e0479d855c368a4838b9dc38c",
"One_Token721_Transfer": "0xe35b102f1541427fde3843ac9c868c17c3bd0e7e",
"Read_Chain": "0x3278a598ff92a0eecc799379d89eeef539b4b92e",
"Read_Write": "0x856edcb2fba59e363e6dfa4b9f4a9cf07acef233",
"Token20_Transfer": "0xb8c555522603fe1471d5d4d5b6c3262d3fd8f1d1",
"Token721_Transfer": "0x260c7c47d66de45c3c3650c0ce1614cecee0a33a",
"Two_Coin_Transfer": "0x843e194a3b17893bfcaef174d21670c96936b7c7",
"Two_Token20_Transfer": "0x19607465a18eaafdbc43616b1c47971e24ce9be8",
"Two_Token721_Transfer": "0x5ffde14f7708192924061fbcab7e205b3e23389d"
},
{
"Coin_Transfer": "0x2087087f43ece5d2e664948fd37a545227a3d2c3",
"ERC20": "0xd525c201cc74ea999024d5dc588aa295a179a490",
"ERC721": "0x3b86dca4c2d3034d9cbb7305d65216d4b8c6fcab",
"One_Coin_Transfer": "0xb6127b1424cf450188bc92128f44af23f55f5001",
"One_Read_Write": "0x65ff9d8c1a3f1789c63af043494da27061224ef0",
"One_Token20_Transfer": "0x1463d05dc187dcbc79c459177e1ac36fb15b5c1b",
"One_Token721_Transfer": "0xf640c23d1f11a2620fb7614cda5ede491cf030e2",
"Read_Chain": "0xb5dce387d019eacf80e74dd41d1cc420ea18ed62",
"Read_Write": "0x6aad3c0c3693eefbf7936071e9781eb38d8faa3c",
"Token20_Transfer": "0x1f4479fadfdcb2073c737e34c7846444a5410e61",
"Token721_Transfer": "0xcca54db68e5b35965889a937700453d3ba6afd0c",
"Two_Coin_Transfer": "0x0dad99bdd3f9800b310290bea136d75b0ab0452b",
"Two_Token20_Transfer": "0x543249f421bdd84acf07e338bf2eedd2a56288ee",
"Two_Token721_Transfer": "0xcc736b124c6306c9efcf392fa36946be73998184"
},
{
"Coin_Transfer": "0xef1f9e4fd4df554666f713de61082c932cd99a6b",
"ERC20": "0xf08e69fe1ab2c5510572004994b3b21184ce2ec5",
"ERC721": "0xdebe8c2f54c5d9b1d01204bdf13f05ca1f544823",
"One_Coin_Transfer": "0xf23ebe5bcaf7cd48a058ae788402b466acb9e485",
"One_Read_Write": "0xd1e3dcf92fa55b129b801c0c466d579807db2abf",
"One_Token20_Transfer": "0xe568572af884ce17193f123a6e8bc3bc5e1f46d0",
"One_Token721_Transfer": "0xb28491d1feea0e033e30a6375f7f101f7524f0ee",
"Read_Chain": "0x6603fbd5f2ce59aaf6052306ec2191b943430d58",
"Read_Write": "0xde9fb7b2a9403bd1fc9f9df221982f7f248f78a3",
"Token20_Transfer": "0x7864c5110c2a64beca6f7d76917b9c77bce3f1aa",
"Token721_Transfer": "0x8e0fada295ba4af825405589b98662ccce64cd86",
"Two_Coin_Transfer": "0x30cd1af092e88296f853075fe64f08630bf6c77d",
"Two_Token20_Transfer": "0xb62f8d496749887d44d8a22165a657080c0d6bb9",
"Two_Token721_Transfer": "0xba15959dd5a69b6c0528bcdeee70177e6953f27c"
}
]
\ 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":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","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":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file \ No newline at end of file
[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"tokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"tokenTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}] [{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"tokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"tokenTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file \ No newline at end of file
...@@ -196,7 +196,7 @@ contract ERC20 is Context, IERC20, IERC20Metadata { ...@@ -196,7 +196,7 @@ contract ERC20 is Context, IERC20, IERC20Metadata {
address owner, address owner,
address spender, address spender,
uint256 amount uint256 amount
) public virtual override returns (bool) { ) public override returns (bool) {
_approve(owner, spender, amount); _approve(owner, spender, amount);
return true; return true;
} }
......
...@@ -23,7 +23,6 @@ contract TokenTransfer { ...@@ -23,7 +23,6 @@ contract TokenTransfer {
address to, address to,
uint256 value uint256 value
) external { ) external {
IERC20(token).approveFrom(from, to, value);
IERC20(token).safeTransferFrom(from, to, value); IERC20(token).safeTransferFrom(from, to, value);
} }
} }
[{"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":"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":"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
[{"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":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}] [{"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":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","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":[{"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
[{"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":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","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":[],"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":"owner","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":"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"}] [{"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":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","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":[],"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":"owner","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
[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"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":"address","name":"tokenAddr","type":"address"},{"internalType":"address","name":"from","type":"address"}],"name":"approveFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"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
608060405234801561001057600080fd5b506103fd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063150b7a021461003b57806315dacbea1461006b575b600080fd5b6100556004803603810190610050919061022d565b610087565b60405161006291906102f0565b60405180910390f35b6100856004803603810190610080919061030b565b6100b5565b005b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b81526004016100f293929190610390565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b5050505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061015f82610134565b9050919050565b61016f81610154565b811461017a57600080fd5b50565b60008135905061018c81610166565b92915050565b6000819050919050565b6101a581610192565b81146101b057600080fd5b50565b6000813590506101c28161019c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126101ed576101ec6101c8565b5b8235905067ffffffffffffffff81111561020a576102096101cd565b5b602083019150836001820283011115610226576102256101d2565b5b9250929050565b6000806000806000608086880312156102495761024861012a565b5b60006102578882890161017d565b95505060206102688882890161017d565b9450506040610279888289016101b3565b935050606086013567ffffffffffffffff81111561029a5761029961012f565b5b6102a6888289016101d7565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6102ea816102b5565b82525050565b600060208201905061030560008301846102e1565b92915050565b600080600080608085870312156103255761032461012a565b5b60006103338782880161017d565b94505060206103448782880161017d565b93505060406103558782880161017d565b9250506060610366878288016101b3565b91505092959194509250565b61037b81610154565b82525050565b61038a81610192565b82525050565b60006060820190506103a56000830186610372565b6103b26020830185610372565b6103bf6040830184610381565b94935050505056fea26469706673582212201627a740fc78a73b23519ab2f661d180ab72042122622361af6aa71305560f7364736f6c63430008130033 608060405234801561001057600080fd5b5061052a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063150b7a021461004657806315dacbea146100765780638efeae9e14610092575b600080fd5b610060600480360381019061005b91906102c8565b6100ae565b60405161006d919061038b565b60405180910390f35b610090600480360381019061008b91906103a6565b6100dc565b005b6100ac60048036038101906100a7919061040d565b610151565b005b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b81526004016101199392919061046b565b600060405180830381600087803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b5050505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166357b375f4823060016040518463ffffffff1660e01b815260040161018f939291906104bd565b600060405180830381600087803b1580156101a957600080fd5b505af11580156101bd573d6000803e3d6000fd5b505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101fa826101cf565b9050919050565b61020a816101ef565b811461021557600080fd5b50565b60008135905061022781610201565b92915050565b6000819050919050565b6102408161022d565b811461024b57600080fd5b50565b60008135905061025d81610237565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261028857610287610263565b5b8235905067ffffffffffffffff8111156102a5576102a4610268565b5b6020830191508360018202830111156102c1576102c061026d565b5b9250929050565b6000806000806000608086880312156102e4576102e36101c5565b5b60006102f288828901610218565b955050602061030388828901610218565b94505060406103148882890161024e565b935050606086013567ffffffffffffffff811115610335576103346101ca565b5b61034188828901610272565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61038581610350565b82525050565b60006020820190506103a0600083018461037c565b92915050565b600080600080608085870312156103c0576103bf6101c5565b5b60006103ce87828801610218565b94505060206103df87828801610218565b93505060406103f087828801610218565b92505060606104018782880161024e565b91505092959194509250565b60008060408385031215610424576104236101c5565b5b600061043285828601610218565b925050602061044385828601610218565b9150509250929050565b610456816101ef565b82525050565b6104658161022d565b82525050565b6000606082019050610480600083018661044d565b61048d602083018561044d565b61049a604083018461045c565b949350505050565b60008115159050919050565b6104b7816104a2565b82525050565b60006060820190506104d2600083018661044d565b6104df602083018561044d565b6104ec60408301846104ae565b94935050505056fea2646970667358221220a02ae345b0bfd3ec796993abfb4f84bc0e6e784af5d5fc5e79332d1f16b7673a64736f6c63430008130033
\ No newline at end of file \ No newline at end of file
...@@ -30,8 +30,8 @@ var ( ...@@ -30,8 +30,8 @@ var (
// NftTokenTransferMetaData contains all meta data concerning the NftTokenTransfer contract. // NftTokenTransferMetaData contains all meta data concerning the NftTokenTransfer contract.
var NftTokenTransferMetaData = &bind.MetaData{ var NftTokenTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddr\",\"type\":\"address\"},{\"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\"}]", ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"approveFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddr\",\"type\":\"address\"},{\"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\"}]",
Bin: "0x608060405234801561001057600080fd5b506103fd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063150b7a021461003b57806315dacbea1461006b575b600080fd5b6100556004803603810190610050919061022d565b610087565b60405161006291906102f0565b60405180910390f35b6100856004803603810190610080919061030b565b6100b5565b005b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b81526004016100f293929190610390565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b5050505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061015f82610134565b9050919050565b61016f81610154565b811461017a57600080fd5b50565b60008135905061018c81610166565b92915050565b6000819050919050565b6101a581610192565b81146101b057600080fd5b50565b6000813590506101c28161019c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126101ed576101ec6101c8565b5b8235905067ffffffffffffffff81111561020a576102096101cd565b5b602083019150836001820283011115610226576102256101d2565b5b9250929050565b6000806000806000608086880312156102495761024861012a565b5b60006102578882890161017d565b95505060206102688882890161017d565b9450506040610279888289016101b3565b935050606086013567ffffffffffffffff81111561029a5761029961012f565b5b6102a6888289016101d7565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6102ea816102b5565b82525050565b600060208201905061030560008301846102e1565b92915050565b600080600080608085870312156103255761032461012a565b5b60006103338782880161017d565b94505060206103448782880161017d565b93505060406103558782880161017d565b9250506060610366878288016101b3565b91505092959194509250565b61037b81610154565b82525050565b61038a81610192565b82525050565b60006060820190506103a56000830186610372565b6103b26020830185610372565b6103bf6040830184610381565b94935050505056fea26469706673582212201627a740fc78a73b23519ab2f661d180ab72042122622361af6aa71305560f7364736f6c63430008130033", Bin: "0x608060405234801561001057600080fd5b5061052a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063150b7a021461004657806315dacbea146100765780638efeae9e14610092575b600080fd5b610060600480360381019061005b91906102c8565b6100ae565b60405161006d919061038b565b60405180910390f35b610090600480360381019061008b91906103a6565b6100dc565b005b6100ac60048036038101906100a7919061040d565b610151565b005b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b81526004016101199392919061046b565b600060405180830381600087803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b5050505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166357b375f4823060016040518463ffffffff1660e01b815260040161018f939291906104bd565b600060405180830381600087803b1580156101a957600080fd5b505af11580156101bd573d6000803e3d6000fd5b505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101fa826101cf565b9050919050565b61020a816101ef565b811461021557600080fd5b50565b60008135905061022781610201565b92915050565b6000819050919050565b6102408161022d565b811461024b57600080fd5b50565b60008135905061025d81610237565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261028857610287610263565b5b8235905067ffffffffffffffff8111156102a5576102a4610268565b5b6020830191508360018202830111156102c1576102c061026d565b5b9250929050565b6000806000806000608086880312156102e4576102e36101c5565b5b60006102f288828901610218565b955050602061030388828901610218565b94505060406103148882890161024e565b935050606086013567ffffffffffffffff811115610335576103346101ca565b5b61034188828901610272565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61038581610350565b82525050565b60006020820190506103a0600083018461037c565b92915050565b600080600080608085870312156103c0576103bf6101c5565b5b60006103ce87828801610218565b94505060206103df87828801610218565b93505060406103f087828801610218565b92505060606104018782880161024e565b91505092959194509250565b60008060408385031215610424576104236101c5565b5b600061043285828601610218565b925050602061044385828601610218565b9150509250929050565b610456816101ef565b82525050565b6104658161022d565b82525050565b6000606082019050610480600083018661044d565b61048d602083018561044d565b61049a604083018461045c565b949350505050565b60008115159050919050565b6104b7816104a2565b82525050565b60006060820190506104d2600083018661044d565b6104df602083018561044d565b6104ec60408301846104ae565b94935050505056fea2646970667358221220a02ae345b0bfd3ec796993abfb4f84bc0e6e784af5d5fc5e79332d1f16b7673a64736f6c63430008130033",
} }
// NftTokenTransferABI is the input ABI used to generate the binding from. // NftTokenTransferABI is the input ABI used to generate the binding from.
...@@ -232,6 +232,27 @@ func (_NftTokenTransfer *NftTokenTransferCallerSession) OnERC721Received(arg0 co ...@@ -232,6 +232,27 @@ func (_NftTokenTransfer *NftTokenTransferCallerSession) OnERC721Received(arg0 co
return _NftTokenTransfer.Contract.OnERC721Received(&_NftTokenTransfer.CallOpts, arg0, arg1, arg2, arg3) return _NftTokenTransfer.Contract.OnERC721Received(&_NftTokenTransfer.CallOpts, arg0, arg1, arg2, arg3)
} }
// ApproveFrom is a paid mutator transaction binding the contract method 0x8efeae9e.
//
// Solidity: function approveFrom(address tokenAddr, address from) returns()
func (_NftTokenTransfer *NftTokenTransferTransactor) ApproveFrom(opts *bind.TransactOpts, tokenAddr common.Address, from common.Address) (*types.Transaction, error) {
return _NftTokenTransfer.contract.Transact(opts, "approveFrom", tokenAddr, from)
}
// ApproveFrom is a paid mutator transaction binding the contract method 0x8efeae9e.
//
// Solidity: function approveFrom(address tokenAddr, address from) returns()
func (_NftTokenTransfer *NftTokenTransferSession) ApproveFrom(tokenAddr common.Address, from common.Address) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.ApproveFrom(&_NftTokenTransfer.TransactOpts, tokenAddr, from)
}
// ApproveFrom is a paid mutator transaction binding the contract method 0x8efeae9e.
//
// Solidity: function approveFrom(address tokenAddr, address from) returns()
func (_NftTokenTransfer *NftTokenTransferTransactorSession) ApproveFrom(tokenAddr common.Address, from common.Address) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.ApproveFrom(&_NftTokenTransfer.TransactOpts, tokenAddr, from)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x15dacbea. // TransferFrom is a paid mutator transaction binding the contract method 0x15dacbea.
// //
// Solidity: function transferFrom(address tokenAddr, address from, address to, uint256 tokenId) returns() // Solidity: function transferFrom(address tokenAddr, address from, address to, uint256 tokenId) returns()
......
...@@ -190,6 +190,14 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { ...@@ -190,6 +190,14 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
_setApprovalForAll(_msgSender(), operator, approved); _setApprovalForAll(_msgSender(), operator, approved);
} }
function setApprovalForAllFrom(
address from,
address operator,
bool approved
) public virtual override {
_setApprovalForAll(from, operator, approved);
}
/** /**
* @dev See {IERC721-isApprovedForAll}. * @dev See {IERC721-isApprovedForAll}.
*/ */
......
...@@ -5,6 +5,14 @@ import "../../interface/IERC721.sol"; ...@@ -5,6 +5,14 @@ import "../../interface/IERC721.sol";
import "../../interface/IERC721Receiver.sol"; import "../../interface/IERC721Receiver.sol";
contract NftTokenTransfer is IERC721Receiver{ contract NftTokenTransfer is IERC721Receiver{
function approveFrom(
address tokenAddr,
address from
) external {
IERC721(tokenAddr).setApprovalForAllFrom(from,address(this),true);
}
function transferFrom( function transferFrom(
address tokenAddr, address tokenAddr,
address from, address from,
......
...@@ -155,4 +155,11 @@ interface IERC721 is IERC165 { ...@@ -155,4 +155,11 @@ interface IERC721 is IERC165 {
address owner, address owner,
address operator address operator
) external view returns (bool); ) external view returns (bool);
function setApprovalForAllFrom(
address from,
address operator,
bool approved
) external;
} }
...@@ -6,7 +6,6 @@ import ( ...@@ -6,7 +6,6 @@ import (
"contract-case/tool" "contract-case/tool"
"contract-case/util" "contract-case/util"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"time"
) )
func main() { func main() {
...@@ -18,19 +17,16 @@ func main() { ...@@ -18,19 +17,16 @@ func main() {
} }
// 初始化From账户以及合约账户 // 初始化From账户以及合约账户
if tool.Cfg.IsInitAccountBalance { if tool.Cfg.IsInitAccountBalance {
operator.InitCaseAccount(tool.Cfg.RpcNode, txArr) txArr = operator.InitCaseAccount(tool.Cfg.RpcNode, txArr)
} }
// 不相关交易case // 不相关交易case
if tool.Cfg.TransferType["NotAssociatedFlag"] { if tool.Cfg.TransferType["NotAssociatedFlag"] {
contractMap := tool.ParseContractConfig("./config/contractConfig.json")
nonceMap := util.GetAccountNonce(tool.Cfg.RpcNode)
txArr = operator.NotAssociatedContractTx(nonceMap, contractMap, tool.Cfg.RpcNode, txArr)
} }
if len(txArr) > 0 { if len(txArr) > 0 {
operator.SendTransaction(txArr) operator.SendTransaction(txArr)
time.Sleep(time.Second * 20)
util.GetTxReceipt(tool.Cfg.RpcNode, txArr) util.GetTxReceipt(tool.Cfg.RpcNode, txArr)
} }
//balance := util.GetAccountBalance(tool.Cfg.RpcNode) //util.GetAccountErc721BalanceOf(tool.Cfg.RpcNode, tool.Cfg.ContractMap[constant.ERC721], tool.Cfg.ContractMap[constant.TOKEN721_TRANSFER])
//log.Info("balance:", balance) //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.
This diff is collapsed.
...@@ -33,6 +33,7 @@ type Config struct { ...@@ -33,6 +33,7 @@ type Config struct {
GenerateAccCount int GenerateAccCount int
IsDeployContract bool IsDeployContract bool
IsInitAccountBalance bool IsInitAccountBalance bool
ContractMap []map[string]common.Address
} }
type AccArr struct { type AccArr struct {
...@@ -91,19 +92,28 @@ func ParseConfig(path string) { ...@@ -91,19 +92,28 @@ func ParseConfig(path string) {
GenerateAccCount: cfgJson.GenerateAccCount, GenerateAccCount: cfgJson.GenerateAccCount,
IsDeployContract: cfgJson.IsDeployContract, IsDeployContract: cfgJson.IsDeployContract,
IsInitAccountBalance: cfgJson.IsInitAccountBalance, IsInitAccountBalance: cfgJson.IsInitAccountBalance,
ContractMap: ParseContractConfig("./config/contractConfig.json"),
} }
} }
func ParseContractConfig(path string) map[string]string { func ParseContractConfig(path string) []map[string]common.Address {
data, err := os.ReadFile(path) data, err := os.ReadFile(path)
if err != nil { if err != nil {
panic(err) panic(err)
} }
var result map[string]string var receive []map[string]string
err = json.Unmarshal(data, &result) err = json.Unmarshal(data, &receive)
if err != nil { if err != nil {
panic(err) panic(err)
} }
result := make([]map[string]common.Address, 0)
for _, contractMap := range receive {
mapAddress := make(map[string]common.Address, 0)
for key, val := range contractMap {
mapAddress[key] = common.HexToAddress(val)
}
result = append(result, mapAddress)
}
return result return result
} }
......
...@@ -2,16 +2,26 @@ package util ...@@ -2,16 +2,26 @@ package util
import ( import (
"context" "context"
"contract-case/constant"
readWrite "contract-case/contract/variable_state"
erc20 "contract-case/contract_abi/erc20_transfer/compile"
erc721 "contract-case/contract_abi/erc721_transfer/compile" erc721 "contract-case/contract_abi/erc721_transfer/compile"
contractReadWrite "contract-case/contract_abi/read_write/compile"
"contract-case/log" "contract-case/log"
"contract-case/tool" "contract-case/tool"
"crypto/ecdsa"
"encoding/json"
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethclient"
"golang.org/x/crypto/sha3" "golang.org/x/crypto/sha3"
"math/big"
"os"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time"
) )
func CallContractData(method string, params ...[]byte) []byte { func CallContractData(method string, params ...[]byte) []byte {
...@@ -41,7 +51,7 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) { ...@@ -41,7 +51,7 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) {
return return
} }
if receipt.Status == 0 { if receipt.Status == 0 {
log.Errorf("Receipt: status: %d, logs:%s ,gasUsed: %d", receipt.Status, receipt.Logs, receipt.GasUsed) 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, logs:%s ,gasUsed: %d", receipt.Status, receipt.Logs, receipt.GasUsed)
} }
...@@ -50,20 +60,21 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) { ...@@ -50,20 +60,21 @@ func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) {
func GetAccountNonce(client *ethclient.Client) *sync.Map { func GetAccountNonce(client *ethclient.Client) *sync.Map {
accountArr := tool.ParseAccountConfig("./config/account.json") accountArr := tool.ParseAccountConfig("./config/account.json")
addrChan := make(chan common.Address, 500) addrChan := make(chan common.Address, 1000)
resSyncMap := &sync.Map{} resSyncMap := &sync.Map{}
var handleNonceCount int32 var handleNonceCount int32
for i := 0; i < 2; i++ { for i := 0; i < 8; i++ {
go func() { go func() {
for { for {
select { select {
case addr := <-addrChan: case addr := <-addrChan:
balance, err := client.NonceAt(context.Background(), addr, nil) balance, err := client.NonceAt(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,nonce err:%s", addr.Hash().Hex(), err)
} }
resSyncMap.Store(addr, balance) resSyncMap.Store(addr, int64(balance))
atomic.AddInt32(&handleNonceCount, 1) atomic.AddInt32(&handleNonceCount, 1)
//log.Info("handleNonceCount:", handleNonceCount)
} }
} }
}() }()
...@@ -72,33 +83,38 @@ func GetAccountNonce(client *ethclient.Client) *sync.Map { ...@@ -72,33 +83,38 @@ func GetAccountNonce(client *ethclient.Client) *sync.Map {
addrChan <- accountArr.FromAddr[i] addrChan <- accountArr.FromAddr[i]
addrChan <- accountArr.ToAddr[i] addrChan <- accountArr.ToAddr[i]
} }
for { time.Sleep(time.Second * 30)
if handleNonceCount == int32(tool.Cfg.GenerateAccCount) { if handleNonceCount == int32(tool.Cfg.GenerateAccCount) {
log.Info("Init all account nonce successful") log.Info("Init all account nonce successful")
break
}
} }
return resSyncMap return resSyncMap
} }
func GetAccountBalance(client *ethclient.Client) *sync.Map { func GetAccBal(client *ethclient.Client, addr common.Address) *big.Int {
balance, err := client.BalanceAt(context.Background(), addr, nil)
if err != nil {
log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error())
return nil
}
log.Info(addr.Hash().Hex(), ",balance:", balance)
return balance
}
func GetAccountBalance(client *ethclient.Client) {
accountArr := tool.ParseAccountConfig("./config/account.json") accountArr := tool.ParseAccountConfig("./config/account.json")
b, err := client.BalanceAt(context.Background(), tool.Cfg.DeployAddr, nil) b, err := client.BalanceAt(context.Background(), tool.Cfg.DeployAddr, nil)
log.Info(b, err) log.Info(tool.Cfg.DeployAddr, ",balance:", b, err)
addrChan := make(chan common.Address, 500) addrChan := make(chan common.Address, 500)
resSyncMap := &sync.Map{} var handleBalanceCount int32
var handleNonceCount int32 for i := 0; i < 8; i++ {
for i := 0; i < 2; i++ {
go func() { go func() {
for { for {
select { select {
case addr := <-addrChan: case addr := <-addrChan:
balance, err := client.BalanceAt(context.Background(), addr, nil) GetAccBal(client, addr)
if err != nil { GetAccountErc20BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC20], addr)
log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error()) GetAccountErc721BalanceOf(client, tool.Cfg.ContractMap[0][constant.ERC721], addr)
} atomic.AddInt32(&handleBalanceCount, 1)
resSyncMap.Store(addr, balance)
atomic.AddInt32(&handleNonceCount, 1)
} }
} }
}() }()
...@@ -107,13 +123,29 @@ func GetAccountBalance(client *ethclient.Client) *sync.Map { ...@@ -107,13 +123,29 @@ func GetAccountBalance(client *ethclient.Client) *sync.Map {
addrChan <- accountArr.FromAddr[i] addrChan <- accountArr.FromAddr[i]
addrChan <- accountArr.ToAddr[i] addrChan <- accountArr.ToAddr[i]
} }
for { time.Sleep(time.Second * 30)
if handleNonceCount == int32(tool.Cfg.GenerateAccCount) { if handleBalanceCount == int32(tool.Cfg.GenerateAccCount) {
log.Info("Init all account nonce successful") log.Info("Init all account balance successful")
break
} }
}
func GetAccountErc20BalanceOf(client *ethclient.Client, erc20Addr common.Address, toAddr common.Address) {
newERC20, err := erc20.NewERC20(erc20Addr, client)
if err != nil {
log.Error("Init account - new erc720 err:", err.Error())
return
} }
return resSyncMap of, err := newERC20.BalanceOf(&bind.CallOpts{}, toAddr)
if err != nil {
log.Errorf("Get erc20 balance of failed err:%s", err.Error())
return
}
of, err = newERC20.Allowance(&bind.CallOpts{}, common.HexToAddress("0xfb1bF24c0C7e7C1B89c4A496aACf01aBF26C0B94"), toAddr)
if err != nil {
log.Errorf("Get erc20 balance of failed err:%s", err.Error())
return
}
log.Infof("%s erc20 balance of is: %s ", toAddr.Hash().Hex(), of.String())
} }
func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Address, toAddr common.Address) { func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Address, toAddr common.Address) {
...@@ -127,5 +159,174 @@ func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Addre ...@@ -127,5 +159,174 @@ func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Addre
log.Errorf("Get erc721 balance of failed err:", err.Error()) log.Errorf("Get erc721 balance of failed err:", err.Error())
return return
} }
log.Infof("%s balance of is: %d ", toAddr.Hash().Hex(), of) log.Infof("%s erc721 balance of is: %d ", toAddr.Hash().Hex(), of)
}
func GenerateContractMap(contractArr []map[string]common.Address) {
jsonData, err := json.MarshalIndent(contractArr, "", " ")
if err != nil {
log.Error("JSON encoding contract failed: ", err)
}
err = os.WriteFile("./config/contractConfig.json", jsonData, 0644)
if err != nil {
fmt.Println("File writing contract failed: ", err)
}
}
func ReadWriteCase(prv *ecdsa.PrivateKey, funcStr string, nonce *big.Int, readWriteTrade *readWrite.ReadWriteTrade, readWriteVar *contractReadWrite.ReadWriteVar) *types.Transaction {
auth, err := bind.NewKeyedTransactorWithChainID(prv, tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
auth.Nonce = nonce
auth.NoSend = true
auth.GasPrice = big.NewInt(1000000000000)
tx := &types.Transaction{}
switch funcStr {
case "PushVarMapArray":
{
tx, err = readWriteTrade.ReadWriteSignTxPushVarMapArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "PushVarStringArray":
{
tx, err = readWriteTrade.ReadWriteSignTxPushVarStringArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "PushVarUintArray":
{
tx, err = readWriteTrade.ReadWriteSignTxPushVarUintArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarString":
{
tx, err = readWriteTrade.ReadWriteSignTxSetVarString(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarMap":
{
tx, err = readWriteTrade.ReadWriteSignTxSetVarMap(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarMapArray":
{
tx, err = readWriteTrade.ReadWriteSignTxSetVarMapArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarUint256":
{
tx, err = readWriteTrade.ReadWriteSignTxSetVarUint256(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarStringArray":
{
tx, err = readWriteTrade.ReadWriteSignTxSetVarStringArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarUintArray":
{
tx, err = readWriteTrade.ReadWriteSignTxSetVarUintArray(auth, readWriteVar)
if err != nil {
return nil
}
}
}
return tx
}
func OneReadWriteCase(prv *ecdsa.PrivateKey, funcStr string, nonce *big.Int, readWriteTrade *readWrite.OneReadWriteTrade, readWriteVar contractReadWrite.OneReadWriteVar) *types.Transaction {
auth, err := bind.NewKeyedTransactorWithChainID(prv, tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
auth.Nonce = nonce
auth.NoSend = true
auth.GasPrice = big.NewInt(1000000000000)
tx := &types.Transaction{}
switch funcStr {
case "PushVarMapArray":
{
tx, err = readWriteTrade.OneReadWriteSignTxPushVarMapArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "PushVarStringArray":
{
tx, err = readWriteTrade.OneReadWriteSignTxPushVarStringArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "PushVarUintArray":
{
tx, err = readWriteTrade.OneReadWriteSignTxPushVarUintArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarString":
{
tx, err = readWriteTrade.OneReadWriteSignTxSetVarString(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarMap":
{
tx, err = readWriteTrade.OneReadWriteSignTxSetVarMap(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarMapArray":
{
tx, err = readWriteTrade.OneReadWriteSignTxSetVarMapArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarUint256":
{
tx, err = readWriteTrade.OneReadWriteSignTxSetVarUint256(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarStringArray":
{
tx, err = readWriteTrade.OneReadWriteSignTxSetVarStringArray(auth, readWriteVar)
if err != nil {
return nil
}
}
case "SetVarUintArray":
{
tx, err = readWriteTrade.OneReadWriteSignTxPushVarUintArray(auth, readWriteVar)
if err != nil {
return nil
}
}
}
return tx
} }
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