Commit b5198fce authored by duanjinfei's avatar duanjinfei

Init project

parent 28dd40c2
File added
.idea
logs
# contract-case
solc --abi --bin ChainCoinTransfer.sol -o .
solc --abi --bin OneChainCoinTransfer.sol -o .
solc --abi --bin TwoChainCoinTransfer.sol -o .
abigen --bin ChainCoinTransfer.bin --abi ChainCoinTransfer.abi --pkg contractCoin --type ChainCoinTransfer --out ../compile/ChainCoinTransfer.go
abigen --bin OneChainCoinTransfer.bin --abi OneChainCoinTransfer.abi --pkg contractCoin --type OneChainCoinTransfer --out ../compile/OneChainCoinTransfer.go
abigen --bin TwoChainCoinTransfer.bin --abi TwoChainCoinTransfer.abi --pkg contractCoin --type TwoChainCoinTransfer --out ../compile/TwoChainCoinTransfer.go
solc --abi --bin ERC20.sol -o ../abi_bin
solc --abi --bin TokenTransfer.sol -o ../abi_bin
solc --abi --bin OneTokenTransfer.sol -o ../abi_bin
solc --abi --bin TwoTokenTransfer.sol -o ../abi_bin
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 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
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/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
abigen --bin ERC721.bin --abi ERC721.abi --pkg contractToken721 --type ERC721 --out ../compile/ERC721.go
abigen --bin NftTokenTransfer.bin --abi NftTokenTransfer.abi --pkg contractToken721 --type NftTokenTransfer --out ../compile/NftTokenTransfer.go
abigen --bin OneNftTokenTransfer.bin --abi OneNftTokenTransfer.abi --pkg contractToken721 --type OneNftTokenTransfer --out ../compile/OneNftTokenTransfer.go
abigen --bin TwoNftTokenTransfer.bin --abi TwoNftTokenTransfer.abi --pkg contractToken721 --type TwoNftTokenTransfer --out ../compile/TwoNftTokenTransfer.go
solc --abi --bin contract_abi/read_write/contract/ReadWriteBlock.sol -o contract_abi/read_write/abi_bin --overwrite
solc --abi --bin contract_abi/read_write/contract/OneReadWriteVar.sol -o contract_abi/read_write/abi_bin --overwrite
solc --abi --bin contract_abi/read_write/contract/ReadWriteVar.sol -o contract_abi/read_write/abi_bin --overwrite
abigen --bin OneReadWriteVar.bin --abi OneReadWriteVar.abi --pkg contractReadWrite --type OneReadWriteVar --out ../compile/OneReadWriteVar.go
abigen --bin ReadWriteBlock.bin --abi ReadWriteBlock.abi --pkg contractReadWrite --type ReadWriteBlock --out ../compile/ReadWriteBlock.go
abigen --bin ReadWriteVar.bin --abi ReadWriteVar.abi --pkg contractReadWrite --type ReadWriteVar --out ../compile/ReadWriteVar.go
{
"from": [
"0xfb1bF24c0C7e7C1B89c4A496aACf01aBF26C0B94",
"0x5B190ee8D94fD7c66C7D2019666CdAF5C8B6f401",
"0x8A40E8FBC318A3e3b148b176Fddf440CE739fFEC",
"0x750ccA72DE45ADaAf2D20BD22BC38DE454Cf420A",
"0x63115Fb50a93C8c9398C0Fe126c06Dd2e7ac7068",
"0xF703d43525AbBBBeB664a1DA35509ccD3DC51083",
"0xF78381301E16E23a45Ba33467Ee1C5F16859d424",
"0xeA682e12c42CD5f31D442CcD02Bd09c1560A380B",
"0xa414bb9474ebBfc91d8D34cdBCFAa2693627bD78",
"0x6FE643c9db50F2D74FeD05ed84902AF4aBE03E4f",
"0xA5479023F32Cf805145553afEe183FE0E59726C5",
"0xc8fFb2F36BE918Bb367aF6C391A94Cc7B370C54f",
"0xca0440513ea10854981E23AE1Ec7E74D17eDDde8",
"0x72D9050d796f56c7448aa0e9DfD69d53602Fbf3F",
"0x476fcc7E4d1293EB3D5b4984A129C3E93c9F0bAA",
"0x5DDB56186C4d0ff2D9573F6843Eb2A367d520152",
"0xD13DE0Db28AE6508bAe7abef77C452E7B043107C",
"0x1C08d086A5bD78B2B2f3B87a9ca7051361Bc332F",
"0x8E078BbeCa613fA38ceE0a45e8e160dfefCD3e70",
"0xB7Ef0C271dC493e2EDa71cA8cB2E754a4D8eF5A0",
"0x80eaE572F5A20433b044fAE2035d986cC9c0cf7F",
"0xb237236323F26A0E0653fd08b0C052dB7d91a668",
"0x0b5873dF7EeedFefe0162E1B00fD381DddbbA1c4",
"0x06dE8cfBF7652C12455768A026AE88DC0f6eC789",
"0xEf77EB86A93acF339057a35fF84173E716963c97",
"0xc7d29a455045FB0C6cB573bce015dAfea15574FE",
"0x549f6619296672dC21803C6B162E9A9145Abb733",
"0x469DB0571D9d615142d6eA2E35d553165cfa5996",
"0x702E04e47f848731a51770027CDDA9A75e8b9Dc8",
"0x4f77Ef0ef4857F88Fa5405e63cAB3710214CB49C",
"0x6E8E5dc2505485eB3dE1e92Acb1D446AF43c07E1",
"0x3A435a60BdC13F8101479fd4cc5ebF2De9740B72",
"0x04a34b983BC8a7C2Ecec5e75d612D8CbB7Aa1739",
"0x2E41D3eb345bcDF1486C584CaeAFc00E76528871",
"0x813B77fbD9f40C307A6e0a99b26E1B0FaAF85FB7",
"0x28FcdAb1525ff2989bF33c6F9Db0ed74D53741D3",
"0xbFFeBF3b5A96A08e537b71bB1d684936a609de2c",
"0x98412F97B5039CfFfF2474855f375b9Dd21F3588",
"0xef0D85A2c21eA08FCDf3e9b423CF415F863bcF1A",
"0x08c2292fDE25C72a3Cbce1A56d8f834cd6f29c92",
"0x2D3cc61AE1bD70dC83e87DE812518f8A8eEc6Ae8",
"0xA5E098c292faceA8aDa2E40C5Fd8E159358aF968",
"0xc1d674306aFE7dF8a4c3343e8eb870582A081ebe",
"0x693525cb896745A620e97E03926c436E817B88C2",
"0x23147f320382391EC6836ef40Dc3a0Eb8d0c1E51",
"0x57F1E2157D40ef0f53485E3f17BBFD9c7c46F0F8",
"0x7742Dd619095224Fd8E06f0D2cCCb098BC3659bF",
"0x501D4Ff090AAaA998045cfb8fa25e7e2E4C4136B",
"0x1A42c3d19c4281F20261Cd641118c44651F86BDE",
"0x646B3e91EEAE54674dCfF53ea66aa0b946519DbF",
"0x6a14F1164Fb16eEeC36D5aB2F50Cc4C5928ec738",
"0xCAf59B9fA9277Fd9b9389d73fD3d18714B5a91E2",
"0xEFa1Ea148F2B5E63aA75EBBf9f8D049e2966c5A4",
"0x47E5CA23E9Aa58Bd004aF44911F5aA99aca11E2E",
"0x3d028cd22A4511D0210dc31E2470f7203B6C4811",
"0xfA598Cb6122f50A89A436e8b7172074310AE7209",
"0x8562BB1a5a54866A1aA6BaD6911646C2ae8c2B2d",
"0xd2E3FAc59dbC504e6D7Af1105F30805762F0490a",
"0x3e88d76337Df5A6304C25eb4340DBab3C434716C",
"0x4020457755e52739e48BE0E41B53b66908352FC9",
"0x77869886C9E3C9B44e8862f620B36FDBf06eD243",
"0xf7ED41cd8030B7a8AeEBe1F15123e79497dd471F",
"0x3995Ec0B87632cfefb6b9414E7b67B0206D7EaC3",
"0xc10BB6692001Bd396FA85926fb0e512EbaAdd401",
"0x6c58c57f9439b1084a20F5E08753D04De2B0574f",
"0x365331f4B90Ba03e6B107A33b03314af1F14c00A",
"0xB0F5B454504a2B216DC86bfa03E1a70C3641e39c",
"0x6f858F40A8f7EdbfF5fD3256Fc922f681C73Cb00",
"0xA20545098a7bAC1C0a1bcA11aa2Dd26161a1F922",
"0x5CEF30AC192f91b930f83C6EdaD91ff97E4E5dfE",
"0xDe2C3c8d69B6bE8745FEd967cb8501A559dEC540",
"0xd52111297dF4126DcCf41a08C0cc94DC97e4228b",
"0xfdeA52Cecd2fb0f9aBfEaA6d1B3c064D12A5B26D",
"0xA1f11245F026548C6Dc20D8db6652c8fd54E5028",
"0xe5F38648Dd204674656A96D7364C86F79d423BF0",
"0x72421261353aa544025359F66E6388832B5e5D08",
"0x1bFBCd45eFa92f33278fE26D5339828D8587F951",
"0x10e4C276046F13B5F69695f80EDBAc8Eb423488F",
"0x998d31478c0D5BB3f173551e05CEEDc16b52ADB7",
"0xCD7B535C958c8bB54A961d5089124cB391771910",
"0x79308244F4D5e9cdf483D9886377EE8aed49AE0c",
"0x187eaeB82A7988C174ED16D21fC4090A46fb4f01",
"0x386ebf2B0BF56367Df15b8611b8D1e993983CD2c",
"0xbF82FF5B3Fd5F4E39d142fff7d3EabbD696998fB",
"0x0FC3C502045F279c8B42a9768cBaad6E08276f0B",
"0x681b81667d60BE41E73359CBa302325d94eD2A5F",
"0x502868A6326eFEED8602d5f8738406Ef5B169c6A",
"0xd937BaF9d0F77f7390e769f4C71b4963159678ca",
"0x22e002FbC16B54bE34C6b7A0828228b4ad8A74F1",
"0x478244F2fA057543f86Fb2F3F883DF55a786CBE8",
"0x1F02b8cCFb3d22c4e64785A3fc57308Fdc89cb5F",
"0x64aa8D5304b340c229Ed8DE29c20b30E1578cEc8",
"0x0Bc90b5FFB16a750b5a5c1DDE1F285435eD450dd",
"0x368EDc9cD94FF24FEa043164B26fB0724F6d01A6",
"0x8FE600A93D0f02EC1c5798c6c1C981904AD71875",
"0xBb07669e6E523F2F346373A3B6c2960B3Be64E69",
"0x2A29b17160927bB9fDC41BD415D2A10Df7d56795",
"0x3c9c98ed5d9dFd103105B13655a7D63B649a9876",
"0x3b42028eE2237bE0A1afB935e50CDD798f5a1499",
"0x9f2078393CE895bE50cc4e886ab052EFAa246872",
"0x96F2CF79061D2a615D2428E81D0b36b707D47bBD",
"0x9d360BDc61B9c8A5597dC00aAeD81326dE58Baa8",
"0x048e885643cC0F8babeaE96409CcA034756029E6",
"0x31A7908f9A31B13A9c0AD9fFDa45aE020165e6aB",
"0x0B7F8AbB69Fc9835B05775A2028C5F2C3413f481",
"0x5F5e09f0Ad63d1D9d4A09A75125aF904f38ba60D",
"0xc852eA029af50E5789464c457d32a9Bd1aDC7650",
"0x2162659ED9A6378c7BeF35AC5B8958d1D2204bDb",
"0x0851f7212321390d444e13064AE0FE749525AE41",
"0x19c6a1bdeea5EEd6a30B02a572ab21dcDb2eb265",
"0xf8fC3f870791d2DBE83286874Cb3D19Cc87ECB94",
"0x683557C53B4924c897a1Bd4a011737d2B43AEA6f",
"0xD471740830ED5c6F60c55932Dc6a5d00A0910bD2",
"0xaF4c1ACea1b6aDF551D2FECdA0A1aB424CB94045",
"0xa9f7B91bc3184B9bBc27DF08056b3DAde4a0f2D0",
"0x48116e3D5D04e377924e982384E5E38578096Aa8",
"0xDF10164A17906d5EB627e464c0938f32e64d6988",
"0x7a32bA89ECF34688001b96b26cA90251a186BC11",
"0xb45148608635b783843F622BAf92FeF12BA73C22",
"0x83340D598c07dcD11047792C034937185E881243",
"0xb55aF87900392F5F324C5AeAAAa315e1c38a9FE0",
"0x667C7090c052d3fa5d51e9cde39F2dd916A79A0C",
"0x3Ed2197b6aEde447119E5e43972aBeb312C64a5c",
"0xE38cdf155C7241Ac3B9B3CaC5b1ed996d3B91b0c",
"0x329E847f27395A494010412c9F747579CC965155",
"0xE7A90Ff1d10e7f10A442C6660a653A49C601Df87",
"0x45105De43E0a6617972B127d56ef9f561dfa01eF",
"0x58275af935a3f1fA9821754e5EE3ABB67025819F",
"0x859a4a3ACeE516342744b3663eE6B71324b21Bc0",
"0xA2cEa0E14b6bc18862e21C4fEDd525a0FBAf94F8",
"0x29524c9dc76F894e6d49158B5BB12dd4f98EFd2e",
"0x15af1a02d0CEB240d0B96d3Ab05d54617B8F3F66",
"0x756E4FC6A82fCf7509faC34C9D4472342817A78C",
"0x12Bdd4984E66FF994611b45AECBcBB413B13EdF0",
"0xB125BF088F073FB70Eae6245eD78AE8e50C673D4",
"0x6FDc7ce4c92Fa7019fC6FeACA3fd93bc21B81E31",
"0x7122Ce334059De9e5619fFa5fD9D1C90c5Bd56F2",
"0xb7bf371a138c9395C55319F073cfD703a1697333",
"0x638eAe0D5e9D26E5900155c8051A28Ca8f5e0f9c",
"0x54578abDC6d409326fA530dbbD5be124AFe176Fd",
"0x6a148B8EDf2913732d2d28fF36a115E4eD201058",
"0xAaFD9c06eb4b940605253af867a19E39c5D52CD8",
"0x9B8110757964942B1d0408BF12b688894B268BFf",
"0xf3D8A8020baa9E8b6aeD6c54A949B2B8dFAa6392",
"0x349A6E789715D0F4BAD1ceDE3fCE9704A98b42f3",
"0xa1fecEAC20780590b6C226842e8024633843B94B",
"0x77B27277ff54C87a3896C6AE0D989EB3aC82D3AC",
"0xba4e3fc9Af8888f92633eBC535A25110a522d114",
"0x7DCFC3f365D1088486053fAB04527fa9ff899F2a",
"0x51dd8a293E48bE3407Ea96899f8996fb7B19cA3e",
"0xb22Ac6664D9f738865aF313fd32303ED06466C50",
"0x0eDeC26Bb0f62d53AfE55ab94b778890e1b801Be",
"0xdeECaA3Fd85B07208eC2108f4A39Ad982027febF",
"0x8f900a84E4bB2CbFdd475dD42dc67DAB0FC41E82",
"0x9C77d2129bB1BC15652Ffc6794900977D699c53a",
"0x1363106d5899D7eD154f1e8ad4b9557746274f2f",
"0x91c0eDDc409E4bFcDbCE988f8f9d8F31a124F587",
"0xDBADbfc6140B37951Bc9dE4b505A82b0Cbc23dC9",
"0x4037d3B1F996865ae20462A2791896c3De44de0c",
"0x3AB231bED3Bd44c1cdB11B68c74eC012c6aE8908",
"0xF45D27A66493b4E73C6ce6737AC03aeb10358C81",
"0xf024cB8C1bFfeA0Db41d60e72a9e1dcF12A08352",
"0xf8435cE5D297aeCBD590eAC8CB2C61FcaDA63380",
"0x8f4CBbc0ad27dFD3b4773409E352cC2942AD6811",
"0x908CDD795FD0f1E00eC7265E888b0019a7E183a9",
"0x1a0F270566F246dd1BA8cfed03F67BAC109e06BA",
"0xCEBD7F947f598fd2549C3e4a741d93f8280e13e1",
"0x8000EAE5E3235D87443A1eC77978D0b7BF8d9FC5",
"0xE3f5B075A7cD5C30aaDdBc47784b14c312a6a45b",
"0x7B07f5599b598ca815eF48281769424C766aA829",
"0x8e0e56a4D9c0a097b504B931049A2B402b554a2A",
"0x1c6befD072ECE24c405B6F03A37Dc33A62EE1E94",
"0x1eC2C73b03044054BB8058592fd731DEe2171E65",
"0x01994e8Da29ec7f5923D9D2a5B90531Fbc730576",
"0x69463cAAF311611728Ad4faBd33858D998bE6bCc",
"0x38fA3ADAC8c6AaE3047c7e8aeefc34Ce4FF0fBBb",
"0x009E42D70Bb24377d42AcfBcB02b1fB3F6382Ec1",
"0x03BF7f4949E804521Aba95b0064A327646FFC2c0",
"0xD63Bd11E6B141887cD9D49793b954aF4C188c362",
"0x61f185138Da3c4ebe3Ef9E3FE364CC053B6893c2",
"0xC8e7C4C45dfBe5edff2D7f42F5e422308FC901D5",
"0x857602A85aAda8443f3B591b8F929C193729dC2e",
"0x9c3D17c0Db17fC6053E81A503104798757091565",
"0xa3a10b4C0C14059A0AfD3c843C61DdC7e2753611",
"0xfe99b07e01efc22024F81b1Ab07eDF9Ea9826Db7",
"0xEfc38D0aD3bd02AeC88AF1994b00BB539dB5D1EF",
"0xe6760685993c23F57e9aB1024A75a0c09842C049",
"0x385BC16903E713c292A4E539aeE6bf809301BC2D",
"0x5aE7268d29f6C6545052d9A5966F2Cd679950e92",
"0x426c0a1C48eF3B8059af302724E611FFf0D7E3A1",
"0x70a42CcDC9252c958EA41BC34C7BC6EA55652222",
"0x52012c41F844809eD8155A6cB5cbed1cCD6Ce602",
"0x3E81AccdCF733237345a05A3aC1F12d33b8EB87A",
"0x2887912E49518193328105f3C0Eeb3EBfD46de2C",
"0x1b948C6d6E96d188f8FfE8853c785e56cF1f95Be",
"0xfbb9f930a06aBa0Fa5655DD7e3fD5d70253c8Ec6",
"0x5C788B4b483c4bb77021F0D6098473297F62E28E",
"0x7930Bb1856353BCC302F5fdBD8D09c0651355D29",
"0xB3718306Bef614c74B012C6980318fa37c1cd9eE",
"0x46dfEdB4eFd310704199dD37A7c9d01e72630f96",
"0x632E1dEa471A4324590E857EF12CB42401a39A10",
"0x9793e4DA57D9A643C78937cdbfA5e199a579c583",
"0xF69ee9f54Ed1C59626073354e104a4383EB651Ed",
"0xD9d125d5FB1919B3356b92C44dcF89216c3F2AFd",
"0x543e25b475586Cb1cA5429e52b09c00833138597",
"0x85e2D4E8Be5EC5db583e144b891C11F95b74B31C",
"0x29a414093cc0F65106A12c722fC3299990d7Ae17",
"0xe4ECA88D3201449d530A4b811dB6312f403F6BCF",
"0xA983Ea0178a7dA4321583060B523037400B3a121",
"0x280cAa9fE0C60320C16953858f8Bf943073cEC1c",
"0x392f4ABAC0EF4f68E7b4000b26e8aDA766c5B1Ae",
"0x323375ded060F791d8a69E54ef70437813371592",
"0x564e4Ef36b57Edc0338841E8c9B38715887047CC",
"0xafCD79fBf40710C4E178A5300eCf67D66E499d1c",
"0x2ecb66FFcDFa8B32Fff1C98a4ACA859cFBFd5377",
"0xc22a6064AD934F8d5CAd82E4245367465146BBB6",
"0xa3dABB108f26cbF01a18222B0444bD01555328d6",
"0xDE68374a91440416e2090a0d21010dd745E6B6a7",
"0xa7Bb297596F53Fca80A45F23229a208Bc1Cad7D4",
"0x4ab888DE9719F7CD9369908666F126e1d397BF3A",
"0xc33E2DE1ea901198393A19AF39B9E53cD5408Eeb",
"0xf9Db454595F3D8987b4857E819979cD72123f791",
"0x71b8Ba6a786DD8f189b42de430aaFdc830C0390E",
"0xe25E361482D61461D6050638c12A604373107f7A",
"0x9107340dAb826dB2d308e66809f34Dd2a73bd37C",
"0x6c20Ba00AF91Ee1F3309B1DB7bad5f4d21F90A1C",
"0x6bF9415034AA1A5780F0F3ef6aE50F09832fE024",
"0xfC70504dA6246BDE197678d30d11453b59Fe08c3",
"0x1E1796e267f82D0348bE28B6ab1467a9d9E74e09",
"0x370d74129DdF570ACe26b355ff09a5d45635015b",
"0xa9ED6B68A3A5C3E996904FdfBa5FE28c55C4Fe37",
"0x91A9C1fCa4cca52DB347541a75B56C718bABff87",
"0x9d284F1ea90284A33BDDDE0ea39BBd6517818910",
"0xf9DEff0c052Eeaa5A49aaA4d24c1763892034bC1",
"0xf8cf6A55eDb53d59BbBc3AF8f454498EC7ff93e4",
"0x4dbC457fe02f0fE54301f9c1e78B564623E5B672",
"0xB27b09bE0967dB3b95B23901E71A8dF440c98Ef6",
"0xaFEde7b74AAF0C40C5Db9adefd3e178Acb292184",
"0xFaC0F2E1BDC35CE35513c66eF883e752717d87bb",
"0x9c6ca2fBBf23b0e59a6d60f74e9110Ca4C41c0e9",
"0xA3393F98f5372e21f1D52588C1Dd393041185863",
"0xC9dd8c1Ec4AbBDa7A3B18E2a40E1E5E4C5551291",
"0x09e000A28E254b96A0eD93d492C5Ec290e7A6Bf2",
"0x1931d1279bB76f84B60D900B03B4F799f3503934",
"0xC2d7C42755193eA4eb603165Bfa84a45291D99f5",
"0x301870Cd05aC9dCf041dd5dC95644dfdfF72E858",
"0x11474D3E44AD587a38e78cba25Ab284798B8A7eC",
"0xbf8BF1D9a342c593acA2cfB5f577D65F342D5Ab6",
"0x75bFcDe750EEE6E338f8D0E092b31C8051F7DC8b",
"0x812D866f7f558A7325c16B729286e0e661b9DB36"
],
"fromPrv": [
"0x10ee3579756076b5f44a44c4efd561bd7d57d1ac847aa78d2ae68f6a958b85fe",
"0x4c7f5a149ce7de923272ae231f26620dbfc2b6e46719a99097e666e1bc4f3bbb",
"0xa9ed4264d124712717a39f0269c1e9504ba010bca8202e1c0bb2d38593898bee",
"0x342538be75aa2dd3a4c90b65929139fa6f2870cf95344d7ae4772ca8f73a898a",
"0x2f37f1d7aefc539137ee559720908d056be58c411c83af356fb4d9becc08074e",
"0x104aaf4f58b596ef85b67677767eeb7f13beb267ceff38e7f172d0ace851f4dd",
"0x383bf43df2c214c1b01fbc68fabd603b603eae123fc715f2a0410b4d6ad644a7",
"0x4b06848645d2448862cab5add470a0146575968c98de620588207e58f5d46757",
"0x7a1e8c23dbe1a74829ecb39fbb8b9082f233af0e2fe68c7c7c43612e4f310959",
"0x0aa5e27e952b33e412f2adeb99dfddebf943d6005d7e6be54e26483a738fb98a",
"0xba62066b953435d6ee40058810dd052d335131f9add164a8fd1c811df829df12",
"0x74469d4ad7dd14bf2b0cb0b3e291c15974566ad77b419ac4bf0b61e3c7fbc0ed",
"0xf868c9998713964f5d205273e2fd26331944a609d9ed00e5a7c50b0485a2b439",
"0xc47ddaf6f865561aeecdb73c7076359e1d0c3aef2751a35a6158d9fc3655262f",
"0xa953a4b2a353df9cc39980f2cc1533847eabfc961eaa8e32f4c5034dfaa56102",
"0x30686a72d3ec341da2a7302b0f1a7f2857b2893e6064a8db1e4056912c8f95f9",
"0xd9c954106f12d76d1d815e6d770a8df2895424059326875cf3fc14206ab5f5c3",
"0xb903a61b3948c7800a5eff642a66490a98a96f5c0f2174c714973378f4ab93ce",
"0x588d6a3e96c8fc2da8854a8d785ecf0fcdf48b8be50ca0a5f9ad6dc4f077c676",
"0xc6e8e8788e644f031a1c4ba4a4af7d6eab0883425e60eb6569141d67775e5fe7",
"0x52beed85855126e5b0b9d0ff3ddd39796db36486e8c9c88d56823c682ba27c29",
"0x04098be3d0fe1ada839ed6dee108d4f3ded0e7c99025c9ad9dff23196f8b7d68",
"0xea69dd9b672bd7f7b419736c371b4d3da4a529d0a663b5945062719f3976139b",
"0xa550840eaf26a9b5bea029e454ab3aa33b6fc8b0aa73bdea17d6f1844926adba",
"0xcf6862a541495965b137fddf9e6e0690755ca1c97f2940ee42326ea4d1d41d3a",
"0xf82b08be2f9f75ba1d6ca142e51476d08097fe9797bf7ec097050ffea382e85e",
"0x13a33958a02d8105d2439eed79ad970d2f067a16e2b76e47078e35f89c3e6b8e",
"0x5498b12b3a80a884a4c6ad41144015c877c9d4a93e7f6ba56fd5203ec3e19335",
"0x228794a1aa8c80af94e9c2efabfa43587a76e3f152ada52903130d593107c183",
"0xb390ab38a553db19f0da55123e9c70c34f0772012f2d7128b77b7dabeacee5a7",
"0x4b35a8669f69eb6cdf612827ce73392d0806398943b0a4da61a49185ec8a95ed",
"0x990ad04c2ac98793d22bcf927bb4386097e40bf5608d586475ae8a7f55f93e3a",
"0xc2c55a29ddbd6c71c1f616b59cfed4718e6b557d3b63481c26fcf528732e2df3",
"0xa4d20536dde17c37d061adcd2db83a61e06797d9da650ef52f5113611961004c",
"0x23fd09d62270046cd1b65175c8d9b7b41401f6412dc419d0c41bcc471341377c",
"0x2d7f923829e1fbc510583d1acce14b46072483292deff0db1bb6ae3b35e069d8",
"0x20a30b1ea8da856b74ecf7739300dd0f3e0eff33ba72dc8d59554feb525345b3",
"0x1f3e0c8248e6224e06f80d64e31d00ec7979ac96f19db288bcc2b7d79c6e3e6b",
"0x17aa0ee80de80ce2d994c1cd46a2aa5254f7d0290340f9172f4dd412de171820",
"0xc4fb25808c1ad76d989d6dce55eacc530733ba99febf400496e4a2f8b957ae58",
"0xdfe5d10acc4b2d37fa0513ffa6af7c46ef14fde21e5a8654e88558a543cfdc1d",
"0x6db3471b647c95776cb8c280a3c4b627725da42fede2376788c3e8dd86d1dda2",
"0x37fa435c1be319e30e0fcf136215be78b397bb60f0d1978d23194a2951f82000",
"0x8e10dc0d4e6d8c3814081768e384702d48c47e72c6af36ae1902abf8e6d39a93",
"0xf213dc8da5a3d691da353a287c07645b6c1a7b4c117210c3ac2303de553c62f5",
"0x9ea2bfc05bb75ff0826f358b6655dd3e62d182d62f60948d36f303ce622c9f83",
"0xf955fca96a9e233304495ef77218231457871204358c2cb77f02516e2a5b9691",
"0x81ce66dcefa04e1261a8c0ae7a03925fdfab3aaf9549145f1194ef9a02f1f6fd",
"0x3fecadd4a7c6851f807c02f625cea43d1e3091435999c098a0fe31909f736ff3",
"0xfdfdffcd03e5fea0b148b6e774d984c22ee01bd36cb68a3a25f223e60d8a7e89",
"0xe23002e78a4b6b4cdc1cfe86b7238021c52e450d4c1cdf63e0c374bd5be32ff2",
"0xf58fd112e7be74195ac8ce333db517ecbaa186d2b107ae894354e8eca7970177",
"0x0afabd8a0a4ecc4683ddff5e13acb8a3604afbc2ebe92186796502df34d42b1e",
"0xae51b19b8c3ef17a923ec2086cae92e1d6cd896fb3d94969a4f0a4ae656f5a37",
"0x1418ecebe6734d5dd6310a2ff0127da88328febfa9fde31cb66efedefa836f49",
"0x91371d9684688833e9b2d615a528b57b63ede8141619712d7f11a228769b1e8e",
"0xae37ba7fafb07584771049ebe51205c9ae6bb120fe53ab50b08fcdffb0de1f11",
"0x78faf87894fb78ca042368ce13f84f1b32f4faf430fcea609836a76890751c32",
"0x8c1331f677286846cb3aa1537ba989dc34ecc0311caf1d20e96698a54122598b",
"0xc90cdc7e5e14f8665576f72c55b45aef80cdcbcc70ea1b1790df3b1676fa009c",
"0xf0a584332c39fe9e022e1ed5a8526d2f3005435fa1c0f550b441de04c20bad33",
"0x08470d0cd6171400f93e0326c76dcc65ea0db0e7493b8df08a10bd55c39aad68",
"0xc5c316ae3fa3150877b6e8aa4576e0f38288eb75e0033083befffa34c7c2e7cd",
"0x1135e8eb678eaef6674dc5215c8e23678487fb52ae80c0236e8c998edd239db9",
"0xb3cd2e8fc707ee19ee2ca627297b0b43787e5b348e7142312e23ed54de88be5c",
"0xcf04519d117735b092e249fe27b7942962790375a3c86842d0b32218d5293228",
"0x6f68f70754388c4ea7de2e4c4e275f33eb82135503d62043b5d39619681f1547",
"0x46c9ded1305ff5904b436bf51765e5035de2c4639b22baedc9948c52744d0eb3",
"0x2651bb365b6706725d6df8b9fab0d76a8fb0bf64a0aba4d4ae41336162a34b6c",
"0x9da1b5620e7468a3c1544fb48ad0e69a8cb76863fd1618b4bd1bf4a7b60f2886",
"0xd1815de067c7a2aa2506804d96ad7c9d269eb5d0d83d87edebd9f898037556ff",
"0xa8bf7016ed6bb4345f553475b7e90996c4748fd2b46008564bfc800bcc7d84ed",
"0x06ac11d25967132352dd17e538d5cad7339bc6ebdec0e85e0d4acbc18054ed1f",
"0x8fb97d5e044801c2eb5f08e8b985a01ea0271b84bd17634313550e0f5c27deef",
"0xe649bfe4c627b1e585b061ca1dfc41b226fa68c4c024e6d3734659fa72c3ee0d",
"0x35e855b9eb1e12f3a889f4fcf8cd0fe5592ae280be14a33a165c9ce0f883c598",
"0xffc7371d386a528be080417e0a34db478082cbfb204533c0f5032888c331a3dd",
"0x6e7dc3bc94d36ad34bf1d28e63e8df43f400d65062de058d977addfee73c1393",
"0xbb2586d466a596d8385cd29eaa0bedd3ed30e2b76acce46cf5ac9b488a97c003",
"0x3fc1e16c72f84a7142499f1ce6faf18f73950fbdbf4a6e0d41e976816a417fc2",
"0x541708237cee701550a8931a758ac4ec80d0f9a6230054fa1317800fba17f4bc",
"0xb538885bff18c37088e9addb31fb10c6efc0ef65ad58f6ce637c7f89adf82b87",
"0xd8fc58686cc4f1d633f0d9e3666aae6cf517884d4dd2a138006f2ef0a139a6b1",
"0x8b9fd42d94d1d2fc1bd9d1f67f625258ddc67c5b41859f50f2796572e5d6a5d8",
"0xb80e5e65cf437cb918fc63c4548ef668ef798c78ebf70e1f4d322d50cfd0bb39",
"0x73ca525d6a6db65119b05e8c4961e865654ee10804a650c57148047d75517030",
"0xf3ac3404c37192f1e03fe076ebb7240e1ef3e4a677d671df5c4a4726050ab25f",
"0xc5bc7ee9464f5fda7f975fa98bf5b228aed9161ef77a1a1c41404940e1e06405",
"0x2c38afba6cb49e2f5e54d0421798280b481be28988754a0823cc728d0ccdc724",
"0x7de072fb7beb8582b57dea4bfff360072934e8477d9829e24b627cb3f8f4ba26",
"0x53f304c0acc0cb296837477ee13c822e4b43296616617d57a4e6bf4f4ce85949",
"0x3daa37fd0b71b8e58e712705c9229fdb7767c342f7d9f56dc4c4c5a3cccc4e52",
"0x272385fe1e9697380505c1d88700ffd270d57f3c840dad0c3388f80887efc6ba",
"0xd45d5f29f17baed68e6e9ae5c7f9800729dddb0db4bba8e3c7a4b55d5b5cac87",
"0x206317ccaca727a29da033268c31628b4aee4a0fa33f40813f89385246cd019b",
"0xc640259e3476840aba67ce69b78d0ef9e5efe5815c40d46002a8dc5935f8e9ee",
"0x30905e6754809d714b152977d200c96f25150fd0b5281a06962048bc73490cf3",
"0x6929b5795088d9cce310f628a5feadcb0287fd5f6938300dc7c77a42908fd9e4",
"0x5fabdbbf8a2217ffa81fee95d0866e68198be9b0b7aa4323df7b630e9915c6d6",
"0xbec4bd6b492bfa891b48dddfd83a3b1eac42af9af8731f96a63ceb03cfb20acc",
"0xdf67df805aab9ab74a88bdde31650413d6a79a32b82d58cd5c577b2da853057e",
"0xa1bbd295aae074537834cdf0ea11ab5c1b0418ff90b40681882d6a63edc03881",
"0x2d39acffb7d5ac988a81dfe4b38092b9ff7b1b76fe054b595cd04d5070502cc9",
"0x60cf3ec48bd4efd4c56705a4177c858d20eb92c6328235fc17989ef3c77cfdcc",
"0x4976df162e5a09eef55fd3b7d19f846b508096e7581cd3cad15e5581e1cdb7c6",
"0x59ddbd2ca8d86f388ad7e64fdd6623fc6551feb3f54744b1236821a1babe6479",
"0x6b2bb2ae56d902a9064e7c7dfd8721501c80137cec9d7f2b322b3125eed13b7c",
"0x44e017b14b97d539493161d4b665e18f00e2faec12f74d4b4e0190f24900d781",
"0xcdedd1379ef80dbca979ca01174d615f5f40660c70c8a40489ba9a5e3b76d182",
"0x4bb0748a58cce3c5fa6c0bbee98f2dc9d58847ee101cef8479c2ad26e54a9128",
"0x3cb4d2f0a9cf60554deb03929dda788448ffdeb61ab2f48c6d6ea86ea4bfd59e",
"0xe64a861741bede05f1957aab7183b40c8d6701b6135bd16fa68a3e54ac46fa2c",
"0x551a5e8cf174302fe864a91c1f525000a6db8a670ec0fe7646de99b4aad210e5",
"0x095c395f18b507e856fbd0380ebace2c25cd38dddb5958a38449890673e33c16",
"0x159890a0c815649ea0ee2854316fcfbe815223571950b9687d3fba7466330817",
"0x116ddfc91545601b63660d7b8cf8c1ae692a5ef1cf065fa58663823e6927b6c5",
"0x4978463b3d70c5faab3992d6f5ae758a5bcf6d0811530b64482ed5185ec6ecac",
"0xf9b963011f18be71368fa97972d232b224dd9de3d89199e2865314ced28c3b6e",
"0xaa618417d711ed8b8792592ef5fd6b04b92250aae949080c52301473adc92f93",
"0x7ecab7ef966ead2469c20d7116cc365d9c084a93cd0b917e6635cf4306866274",
"0x5be7247af13e837e58a166eb26beb3488f8e34a2441d42b3025dd2117779259e",
"0x105d9ab3279b88b1510269771e6d42766356f42247662352cd3f1f8530eefe62",
"0xf4bee16332af45daf52dfa64ccd930517546155dfe80e6d4b816506cc8ee149b",
"0x0723c70a68551b7562390173d8e516201b26ef60cab35ce0a9aafc3841f01555",
"0x7a2aad899ff8906c9c1849e800513695e1d169bf5028fa07c9309181afd45bc1",
"0x3d2d62500784fea09468754fb5023db1d59e4ee0e7e545d6d4467f7c644f97cb",
"0x40103a9872b8baf3e35f62fcced509d175285e0ac536034f321de84701bafecf",
"0x5c896170d1b6279ad2e1ccfbc0a8a6b2c9e540718be307646018e207017a0a0e",
"0x09d9a9cb369f7f73e34ac97d9a9dd680baae7747b1a2bce8200874769ef4d5be",
"0xd82956b45e034c48ba27c00f89fe7d81f34bc799bf3d47c414dc684ac80db623",
"0xd36ad881fd5f26ba246c468925c6a197ad22503dce51a2fa7222c9ef79712a1c",
"0x6a7105719ea2ea6f094a830c47b27a3b0ded7bc2a2f80fe4c68fcee132dad9d4",
"0x6b06f76bbbc77d3cb4d68200e89157e67bdf6b9a1ebb47d9bc2d9e5d72b547bb",
"0x0d544657cf5ff1f95d2a60e4e2378f72d79db3fd8d54a73e9bb28abbc5d6a5b7",
"0xa1810815880fda975d16dd37b7586b34d48b775e747d9b296d399e31652643c7",
"0xd93aa74af6df266ec5db02e4a42adbdf9557ea93bd5ede28de7f8c09bf3ad8c3",
"0x1d2472d26070634ccabd7500d8a19ef1e33f5f8096c1cc3c6aca2fa27abd7f1d",
"0xa3aaf568529ad8180b32384efffe161e694ed6591ba48134c2848ddb1b055c76",
"0x6d3da7d43c52f26bd205e17e7facdbf1b8c4c0592045f2cfbebea72440ad3ffa",
"0x5c8bc777e8ca31f3bfb56f94923016b9ce7ed50909b36162beacddc2109325e0",
"0xdcf03c01241be77e8a59af68d95be8e824ac6c3ca17b5fef157510d587af916f",
"0x5a2086cd92dec6c73298a15a04d2c8150e14bf5ab99df540c95e73595d9140be",
"0x0152222a8c7b23d45cdb7d5c36b0e70a139318d59d4d345f276b6d5ebda1441c",
"0xf5d0f14773c4d3dcb37d33de12d7d2aa746dd8cc1801a0abc8c9f414824d5d65",
"0xcc9575d38679ccd9bbb084c1b1b7e2382aec6d5dedeaff827ddfc7afce14dded",
"0x0c4cc5a88f371daa5f7bff4f7c17e563b1ea220ed060b9d1154aa2d1d6f522a6",
"0x875ff41d54f4be9055cbe15b7fbda7a4c6aea00ffdeed2555cc497c41d51763e",
"0x13e3bbef757734b477c11eeb7af73e3e4da5b2b311a698ef15dd978386069c52",
"0x7bfeb55f04bca65c9c6f346f3b313e56ab9519c1232fb26aeddf18b991dadd64",
"0x93a61886b83ba2362152652c94378f896059677765c5579653278828e015994c",
"0x9e1f373f9d45f74bb6aa1baa51350e1ccfaee4fc6bbb0342830ca0395631866d",
"0xcdf48135bf5443f44f6b282ca47d439ca00392124f2b36fd8d7ef22d36461a19",
"0xcad0291b77c31f1476bc2f37b39c4aa5cb4b3435b7b9b36c6de2b20212d3641f",
"0xb03ee4bf41edc7ecc7a832d66f178447296b237037d6acb7ccaec26f091ad05e",
"0x31ed76c6910d435044d5c567b44f26dd4a3a0bbf32a9d6861e5f0c98949f9967",
"0xef6078f7cb2dd4d6511045a7b3edee5527428825d5beea46c8d782c1e2f58c8a",
"0x0ca04e7f7e1fe37cd04124e0d28166bcf05d02081f222f0cfbc43fe782fb6b7a",
"0x3dc0d9e8a2d0f8d0fbf7f01e56845fba66ff06aa86bf36c3aff5aabab8f29a67",
"0x6db59d16b98b063c7bcde7f70f4f4352a6040bfa29673bf76b68dcb14335a228",
"0xd644aee0f4bcad37e0d64380e398612d7092802978c53fc0e0507e148b08d256",
"0x0a3fe873a1f546160bd19c70084d32a9145a64ea08894aa5c9aa00cf0f5e9cc0",
"0x8fb89cd02b4e6916ae0545241020518313e4bd76d142c33d97d765576c466aa6",
"0x56ab71cf503518d65c756714eda01f6dbd79a31b9ed51a25f3d29faa397652a6",
"0x97292634c7aec380301e183d49b00749457071e12355220314176dd7a7b26041",
"0x7e06413ecfed7a85455033a6e99d820843334e12caa1bdf09ba66abf3c67e053",
"0x6357f53fcd826cd08925a6dec66faa780af4c3c6f860bd0590dd0fef907bd76e",
"0x650f3246af43a869673e1ce2e52d2748b7f1e5f105abc911b139106cd1c6ba9f",
"0x858102a2ffd10ba444c6add63c068ba149a62bb475204245728d3a3b5420ebed",
"0x58b6f4325db93f185e0dd0be928918fa28eeeb9a953548274366a7f99a53dc2d",
"0x61aa53bb8f0f83cf1ec4c7352b546d72e6883b755683c0d06727ae70f08a68d0",
"0x9e84242322961e84b5ebcf951a5e537d0294774d0340913f0ff12ad9f87c7bbc",
"0x501fda7e610ee40b82802f6eb59de0ff508aeddaa148e77eda0c4e74ea3c2b12",
"0xa0ab22e652117d3400a4c084772ac0ab97274b8101283f0e59cf92adfcc9f4fa",
"0x73bdebe15b4cb3ad3be13b8f25e362d47eef1c1f1b09c78ce93aa9887ef32c3f",
"0xf6c64deb850175054811423d47a3ea0843d33672dd75839c960c6445dad3a0ed",
"0xa94b7e029165dfc6a9d33a0ac8a1344bd258989bc8520c7723881b05f4d4f7b9",
"0xf0a1d7061ecdefc4f20f29e0c8deef271309417cc27bed5e5ed8f496ebc0b1fb",
"0x6bb5eb722fabc778a27e7dc340c6805ddf4265bf64417710675b62923fbfb34e",
"0xdae2a0bdaff97700f4c58189f171b1827a20177d48f2c4cf71bcb4f90c98f0ac",
"0x987d6654f36e1362d6ed12c364382bbc19e02dca64569adf9f3ab217b5eec8dc",
"0x4d8560cd0743ecdab4d9e3cdf062776bbcdea2c209670d9ab389980ab63bf27c",
"0xe6443b302005b639e46255f25b33ef1126a9c7659239b4e1316066a6ea323eac",
"0xd0e042ea84d891d0f6ec089bad12d9f299ac276b11d34bbbd2c6987187d622fa",
"0x4d58ff5f9c6f3de3090f1aed56e528038963d2d7bd063abc454c83f444124cd1",
"0x54aef1393864f90756eb76de2c572a058e7233d114d2d2b21e8346ff8cb1530c",
"0xcd3e36e983f63e239b72df1fa68cbd521082cb652c840d170140051ea371c783",
"0xb646e1cee33ceda7b96e15f6c7114638d026d6207b277c9602909bd69a31eb67",
"0x73b1974305f169cff5c3c20b610a244a04706e5af17539e0577136106a45e51c",
"0x0f99e432660b4ec937d17f6995dcdf3af2758c5263f4a8a54ab18dd4611b983d",
"0xc55a9b4ae3dce1a38e056f75f13220ddd007ae22c16504fffe27f6295f4af701",
"0xe4c13f61156e3c04dc3493f6741452b51043d1b987ecc0edb4cb3a928155aeb2",
"0x90b524a0f4166a42403a270172ac4f46a7e7a40914a1270a4721d8c57109aa5b",
"0xeac28a7c27c9e2ef7ef7c5b2cd437ac830980df6c41ea39cfb57a7b4dc8a0419",
"0x02a5d4789eee20360fd293372d19005d05850ceec3253da3f77d991555e1019e",
"0xd3405cd0964f0788b6ac7d72b3e98c20c2cf24c4c92939aac9d8382cf944b0bf",
"0x92cdf3d6326223376d4a26ce0497aefc4071a43a3ee172a0bb859fd072abd9b1",
"0xa3235ed800810054cdf322b8b60c45398691e66924e6a6c0258bddb848dae0eb",
"0x3571394bbb0d0eeb9f12b06af88d394ca733fffc7a4062203210e15adf9e2fc5",
"0xf7886dc0af2534a7dd63cf4f83988e41f0f3eb787558f8e89248c65e0430e87e",
"0xc7600c1855d5b007fc221854389d80e858306c2272772f4f18331ce33a65e5c1",
"0x2b16812a09d152ba00ec31cd180239a8c5ec440845957574ff8dee8f9662b527",
"0xbb56330bd976c4eb5b238340f8948f6640032ed4fa260cb7a06515613882bb4d",
"0xbd0713109f8cf658af11f0d2a80572cd25c425a13988d5d743ca46c0cc2896b4",
"0x3a2b622519fd2b45b43abd5ac38ea949e299f47923eb74ace24c4bfa70dd1422",
"0xfac3b16aad670a49bdd50dcaa9cca75b58491a9187d601d421ff4fc82ba06f68",
"0xd3029314522f3859df327ee0987996144dcfdeb0abb3d675671b6fd30b1d67cd",
"0x021af7fada92da142d57ff010616368dcfba01d53802cec4af56a67ca67cc13e",
"0xe3fcdc2eee8b7af6248a7898af9fe3e0687bc2ee0ee0cfb8c3bebf2b13985918",
"0xf04b1379dd96c41990233c5799d659d64889b48740d411b859f0bbcac69418b3",
"0x79f1f73427265fe2e893968ad9a8fe3bb15cc447784103591f421a1e7462f7e5",
"0x106cc39c645d7d5c8dfe7551ad0f4177e9342f8161d7a719cbfae06c782dbcb1",
"0xd1eae5f23715380bd887a5a7ad305ad9db56676965d410ec65742358976b64f5",
"0x5ba575c48eada1dec4762103bf354a2bc1718496714ff2aeb9da0854593c8066",
"0x284df115d668acad7fe2c2c669137e7aa2f3159fe3107c696205ab39a5148f78",
"0x9f2554f06a660cef40fe2f94bc1e54d2fa7f51f29c4956f9eb364397914afc8e",
"0x42025957684481f205a7913c8ba01e593416f7154357498dfa21caba57117fcf",
"0x4b542fff17591dc0addec9ad20397144e39348590a49c377a2a245fbdbcc1f7d",
"0x5210886164292308867c8f69e664f674313878962ea773af84d5430938900314",
"0xd71e8b5ca119a33b0668e248bdea2f49a899d752bfd478670be9e05c3e88c023",
"0xd2b959717e13f723ee75c9e69252ebb6e7744e8194e9530bfda86e47d1816fd8",
"0x9706ddc7e557b7e35f4fc68112742deb33d0976d3a9dfa3544936eb0da550658",
"0xfd5fbde2a9ec3d3efec32b67ea4537b908d93afc729e3385ccdbbb94310d3d92",
"0xfce5954882983f5fa800c4b438c2075c7767574b3134bf9553cc515beea352d5",
"0x48953790edb7b9e9d05ea9bcccf1c2af8dd61670aa6e752c7447af45dca19867",
"0xa8e1441ed8496431e5590f0a7a12f5d2bafb81ef5ae0e717080049b737dc60dd",
"0xb966275a64be89102c565998a304d8bc0b890fb731601db3df00d9a7532d81e1",
"0x5593173c55aaf245177878ac0a2441b3616460763a852cde21844ed8c9b8e245",
"0x4e3cafe07afdb0c606270c8f9f7fb6d5a553150878f0ac7fa3dce253c8873086",
"0xf801afbfa08a9548789b5b1bc7d0992a6f781e2af4d537c51efa8eb84b61f7b1",
"0x0348a2d52f42c8ca4cd9527a1bf4488e183756bae405a792d54ce2cf47ffc855",
"0x5d18f9438855a5e128ce2465eb8527194a2992fbe9544c00a1554433f28e16eb",
"0xec1083fa5643f71b3a77727bf2aae18758f59ab88828c5cf21160cedd9dad6ad",
"0x4a64d62235885e5c2e0a17ef6494ed0080e44e8d332b4bb8df8ff3c530dd342f",
"0x244287ac8dd8c75d8c998561b28a0197e6bf24a16694a1ca4b45d6b739aeff57",
"0x63709fee6d1ed0c348958a1df27cb15f41add8e05a7701f9db92900aa602a642",
"0x60943807de8e1c76c0c548ea46a520d9a2ff0d4c230a1b6a4c1ff1ba611dfec6",
"0x1f9d42f74dc3ab875e7f62a17d6faf30f7a214352e05d1e87a9092e18c7341ce",
"0x10f13c4286cc5d6a802c33a78d57cd4b8e9b320fa8a1015d072e19ca67549efd",
"0x40b81e21eff775f3f8e3338e5a7128a27e840cc6ceb6e2b9ed8e9a0f339f4c4f",
"0xac027ae994b7b1142217ef21f372d6acf86bb084ea2bd285c54867a1276be050",
"0x246e76a7ec46bcbaf4187cd2a88f49100919c732b701e14fd9fbfe676496eb27",
"0x334e308295585843882745b3ca9e15609698a26ed97a3b94c812df7bc2db2c57",
"0x27411e109d7ee4d9564472e81222b65a966ee792872357f2bd242715cfae32d9",
"0xf805d85745f32970d53124b4517f5ef813d5913145718d60973bcb89ad3a922c",
"0x62a250e6036756a5d0a443831fc404770948e5b5eb5f9f7e795e0baac9e6d87c",
"0xb14ebb52011c56364494815abbc9280eb693ddd4444e066f4e4f9047f940f362",
"0x4661953af7f561486388a05e170c1b89bcb6782b1987bc3fbbed8d8492db5c1b",
"0x045c003cc690feaac9764aae5badd42055af87f00600dacef60276927fc5f6b2",
"0x68aaebb76d7ca846bc1b435cfc8639477ee2f5b2baddfbd64e589a82a5363227",
"0xab342affdd5548e55b961e855cbbd2165bb870087a2551d21cae9941b50b409b"
],
"toAddr": [
"0xF444b422cb501F909B444196d81fc85a1E7c3b7e",
"0x72bc4B8660253337CAc8a018345AC99B3F9E5C6D",
"0xae62136644B71bf56607025Fd7978F9e756095F8",
"0xe2aBce089691cC0A3284B79312b21138dba7D1cD",
"0xc969242d650227E249D784FDD333359819551488",
"0x71Fd0B018f8D96B8377e03c8a93AF4B5109bbd1c",
"0x797B9E99dE3e786FC393EBC1b52A229a723204ab",
"0xbf9FE348A427Ec991eD06DBC814DEe714482CEAB",
"0x0ec2064626Fc963a465068934e963d91dd57b965",
"0xCD451846e57f857b5f8E00050FcaA2281b60db31",
"0xDE7103525f1b2F1ca52815C9b2a837B9aCA1bf76",
"0x7D37eF6E54a2234b7A771c1fe238D2BF68dAf934",
"0xcb320d2c00eEBD35775299EfEf88ec9A4944b969",
"0xBF04B290479A23a841201D5A1CFa6ef1F0201DC0",
"0x98bD0FEccf7E2854860E487f791C3b7F6ab195aD",
"0x0C59bcbE6De49e01962b5770Ec2186988811e112",
"0xf0beAaF4D5de9f6AbB7a1880cd03EA7068fED313",
"0xa8d11879723025bB5cA6DD444FAa1761396ec705",
"0x5dbAF7C0734D17F55B4269630B65B708Be32467C",
"0x15e510c2A1C09f783d815e04BDa1BAbce32D3362",
"0x67A38a92525075Ac185e7A138B5FF8E2a8ad951D",
"0x502336Ad1DABCa0F3C06098F72E79265D66bC374",
"0xc7BB4B9c4ffFE786424a6E7550A87E1718403502",
"0x41FB22eeb9F2e65D1562E8Ee0DA6a4E121102c3C",
"0x63ba64F0D299DAc582CA2624db6F28bEba590588",
"0x17907c3c45b7B032AFaAf2D37EB5Cb8c4A284549",
"0x52B67723934DC8A9924B87F3392ECa12884146B0",
"0x4bcbe338a2dfEd6175aaf71D6863d237827261c0",
"0xF70fb9b8149E4988a5Cb8AB8e229Caa8BF2d28d0",
"0x7ACfe8df40b3c0B9F7d2D4efB8468A93CA5e1D9a",
"0xb85edA9383b73e0A14F99FB71C345311cEEe1551",
"0x3066B9797CfA9D13fA89Ee07A4197C3bfCE88156",
"0xdB0B2bDcf30F5425a312172386844733984184B8",
"0xaCBbE1E91D4c80B9feE4341F195002F73f872699",
"0xF8770D0167aDB66cb31a3f69fAE20498D32f996d",
"0x4b0ae7ac4886e7C54e40529Cc008dF84407E5975",
"0x52f790B1d6694D3Ab0A52B0fF4579530A98044cC",
"0xD76a59889004ABf318FA66C2F9e5bC5E5F631C42",
"0x2F8C4FB0C1fdcBC128bcb833B99E271b3D3517FB",
"0xB2eb124aF71A0596772Ef3E3543b496CeE80FF67",
"0x08971166D1E8b8c3fE0a7544e1D02A368f8404BF",
"0xa92A7DC8E028adF9D32b73A2032EF1D98D1B66d5",
"0x58c1574Bc0383A802def718D80CeEdE1E26A815D",
"0xAf3DBaCf0C02eb3E47375Ee2941b8839767AEE70",
"0x185C60f46444130ce00Dd24fA807451741B42E3B",
"0xBF1842c12FE22f3a4B568b300343258D1A90017c",
"0x5aC9f4189E77350433d7C477f79e355Fd996D4D3",
"0x7Fe612CDdFB45Bdfd9E9352c62C902CA422a104e",
"0xE08b871768dEa8DB9dd989808984cdA628367485",
"0x68d6C70469dB138731E43aeE4f57bf85Aaa2e483",
"0x775fE4540c9fea9F7f0697d5823dCe386E013cD3",
"0x2f3Cc869Cf6b98228A47923dE993b91F5f2B76a5",
"0xA415B2164764880A8FA6411Cf395c70131c76481",
"0x6820654CAAa05A7499869E659b5CA64313D6616E",
"0x2baa14ecEB3c8E6a9127983ccCE72C9e3A14BA8E",
"0xC3671E6D57Ab38F0c8965E46F7ee552dA70f8754",
"0x659f6c3D6d8F65a9F1c5f91c9bD4cDdf0a8379cf",
"0x086D745ef812441eDB2B5708546E39f879ae324e",
"0x6f2EC71025D2AfAb8b76818EB45A5aEfE7364f1b",
"0x596B76bE55CbC8b4B7d21eDD21FBA88F0F73a8c4",
"0x115C021aa7E13193177Fc0a51F2187fC65181Bb5",
"0xE26590064c1d9F173b08790f83dFe9cE2D750902",
"0xd16686e295FF4f041379C923e29DEeE1002fdC2e",
"0xb1eC61E609Ec38F8CF6f1E228C8068Afb922CE44",
"0x5Ab07f1b58508175aD13db0e1205F99D58a3CD77",
"0x4f997BC5f0B3d2Cd3a281FC20e6e58d51F615c66",
"0xD070657B5Ea5215Bd8925d52eD41dFF620Ba9311",
"0xCA4B35C0e9Cdd457866325ef412A68f4c7177E15",
"0x07e2D30e9547f67080A84c104642989fdbFe5Cf0",
"0x2D63681E2195585277c0B0615981fA161793Bef3",
"0xfb99d4AE09D04E99D6bcd110D517fD5751a99022",
"0x5Bdf6B27e7fBa0a23a267a44dd435DBaD8A3CaaE",
"0x8654BF51F2E9f5e51B395933e5D782449C4a6F5B",
"0xf9cB55D518C957eA1dB2f3DeB32464db3514a0C8",
"0xcadd6c462fc29dc9fFbbe96C8B1D51b8c787675c",
"0x02Ce81ff611F9a8640715B712Cd6d31d4062A0f2",
"0xf731550eAC248559f062472662ad3113a7F42E08",
"0x19BFE336341462547FCb865388C73ecad89c7deC",
"0xC8434ef24Cd407C8798Cd468A7aeD0aeaCCDDDf8",
"0x516E7D83eBF3560e439348228F5C9e9847b690d4",
"0xdfAbB4076b7D51Fc2F2a841080c2bcDa01FAF220",
"0x26f3455271D10F72234791671e12Fd6AFc0EC977",
"0xCDE3e8D4eA1a5D80C19F353c0DCa835be5d6C964",
"0xcdeaf96872258FBb70436eF1774462EB21f35eDC",
"0xf6DF00d70eA7b2169b9a3e117533A06194926A09",
"0xC45Cc04E55ad5CeAC59C9848192dF0fF855f8ecF",
"0x4317B6D8e09BdB701Edda3A63e1aeCBB83930a7E",
"0x8a888C05ABCf0303B4d606A5b2bBdB8e2BEc8fFe",
"0xcbbbd17E1AAEb684f51CcB3cA24B4fa1d8427589",
"0x2cEC982E3e298F65EEcEacb716977b73F6B6De07",
"0x5D7eDab609A1222c1D9d71712835B1BFA1B03EFf",
"0x29942facD57dc09Ab73cf681D5532D811F62Fcc2",
"0xF6ADEAC475f4435dc752080572A5d3832Df8975a",
"0x7f1f121061Ce5EBcf8cc3023351ec7E0c29Eb815",
"0x6429278ed1122c1412E7Bd8d30eBB2F9a555bFB9",
"0x4F07c6b5feCF8F971b34B8aC6e575ADf1c333126",
"0x07459Ac1bC2f4A5dFB0229919e76dA91246EC28c",
"0x6A71a997d28a93A1D562204Ac488454E679eA416",
"0x62bE27281AD52D6D498Fe65f632fE330626B3104",
"0xdFFea727fE7407cc6f493f940f14aCa7248B023b",
"0xF94f49D040248E205586B4f962a1802a5340e593",
"0xdEA23E41F0791b3e66f90F2fDFa28ad73c8D1acD",
"0x43Ad4BF2b5F8d8cf887B3F0103b60612605FEdbf",
"0x957552B8258c4cb912Fb809d6c5fb4BAEc530825",
"0x1666afbA6CF85750A226950AD02F730f412994C3",
"0xe47100C8eE0c526543912E327Ae16722a3F1eD53",
"0x0A8F8fA8a79570c8C3C94E7CD3B14B53d5E76Ab3",
"0x3d2835C6da3be46148dde62A92ECA390cD9B0B27",
"0x00C76BD3cCEb2f5d4EeB28ABB7AF9d4035285e44",
"0x4B2537CFE597516d1243435dFd287d86a04723D1",
"0x8d760843E4C080E14468aEd87931286B4462526b",
"0xE367d60Ba045b8e29b03444e5a3DEcFf6FE54D26",
"0x7b12b827d56546F8a94E7A837e1910246D8F89dE",
"0x942d4aabf2b13EF3F2AcE80b2EC52be5D6b2A72A",
"0x549D14a6d49EBb501c65c1Bb46836e2F2B285d75",
"0x14F4493Ec770b70A2D8177f705deBca99440a477",
"0x93e2238932CAC833d88F243949FB901a737bEF56",
"0x55B39D6814205f9874E395D7E7eEB85389a69bFb",
"0xf037a4ba5d9912f73fc86149425d7E1243c0977a",
"0x02c1957a89Ef04da1B94784B31c1caf17daC3223",
"0xaaa014EAf9b4589f92353e8D6Af5CEA7aF3B7519",
"0x1C0F314e2c90A7acC112036AAAEF950cFEac4ADF",
"0xed8D29cD1B872Bf8c0Fb77eC87d019fcC278E4C7",
"0xDdAa23B294F8996690acaaFd3F276E49C76761F5",
"0xDfeD3Dcad65D099D91Db7D311135F9956b0Ba227",
"0xbCD1e96944dD5dB3cb4A0aaCB889c536e2133E4D",
"0x9BBB629f7C3b7700eb98FA955f8Ad9AA2e8538A1",
"0x501454e1Cf990A9488b572faEF0045F140e3accB",
"0xeD12B99F1861a77Cbf2635B474A0C3b8d3d2D981",
"0x485230c42A46d468423856e205Ac8FeF2A24D91c",
"0xb96Fc84A1a8F4A266cdB40a05d5bF2C5f94f4064",
"0x9a9E5c5BEBB37394ef991d932ab2a112A1f254A9",
"0xA1882de12EA7E11Aab1c7AC145E1cC4E8b0b8eD3",
"0x346e51fBFeAFAF9D6de388A8C5847C91edf6c8ce",
"0xBaCC11935C310114eC2B75B2608793Ca71a93AcD",
"0x5c540b4eF48c1B34E72151552B84FdAd72D480c2",
"0x86B1A8a9Ac7701d8097D338Ffe540eB6359bc81e",
"0x2613F1c6cE3dFff9fF843e9fCaFD399D0574c4e7",
"0x14F15c39B328e40514D605585031f61c7704ef16",
"0xC3c3864dBA02774dAdE55C0f1Fb5F911C709965F",
"0x0637F4d747C27a31601D3D1FbED6360355191EA6",
"0xa2c78c1AEB9472ADf6175f47095E3C268f523158",
"0x3661d4CFfF8f4042946664131Ea2D7d719C81779",
"0x6c764297AA01F9c8F61E3424Fa765B7b1f3f8055",
"0x47a8eE7eD749C7cdd807aF6dEb76F09d71766d6d",
"0x7eEd127A7DC81e6245DEaa360709b6348aDFFa01",
"0x6a217FD6612Fb8e81515B58900e99b5a970dfcF7",
"0x59Fd7c8D2F3Fc1608d440aca080072c37e6E5066",
"0x576B53def4d7D3A586F1d49436642EE918208F49",
"0x88c9DC7a822D7B98525f9C8E1Afb0a7217Ce87d9",
"0xe7038E8f46b03c0e203709E859e1518Dc063b992",
"0x62D8948Dd75071896a8445a249311dB25e279A21",
"0x54b490F74f6a58FaDB54B90a2cAFbB3a4cC320D2",
"0xd8396aC8E0dCd1CC11330cCF3d41831Ce4aDB9bf",
"0x8164c395fcd583f6bc6325CEdbce30C90a9a1520",
"0x304a8176dD72C2AF145f75fCCF69Aee88743E171",
"0xEcd628C770A0C947E2dcD07Db4bE2185de43F2C5",
"0x9D1d69025ff2090B2e3EdE41EeB31D7Bd366943B",
"0x9Ad7EdadcEaF56dbA04D2Ba507FE940CF0a69767",
"0x5DD74b1ED36875C0B431B2bf2DCf31bD2014D6A4",
"0x2E32A86BF0c732ff9A974B65AEE5415EDEC625C8",
"0x3aBe4fF80741AA1ac5d1f328737639398b19CC52",
"0x2ef85bf703fc5f4df084Ae1D1396b614443c6931",
"0xBc49B0dEBf41FA130a87af3057A35D82c82b6653",
"0x4d52fdA1FCE953dD68e8Ea96175e4894a4190F46",
"0x48A539c682eE8f0dEde3684f9a6Af54c5E42027A",
"0x0C0777B4fD00a218f8Aa714FE2C408fcBEe06C90",
"0x3A6A8313d93FD4979603a5938286D15318B9fDe1",
"0x2e56F4295964bb84cfFE3668c1b867BE8b799381",
"0x50A3BA2656d71111485775214CBbBA6F4ffbA78F",
"0xD746B88e3032c2Fa76e823D246CBe074c7ac8e51",
"0xcC16bB96855E53482a8B4E8A9394c4F7c63659f8",
"0x18F1569dCB74cd1b5F00BC1F86697FC4512F0AB9",
"0x8dDBD7b7E879988d1821Da287B154ce69796B84a",
"0x34eC6051d013AF8dab84654f1e388e37F3A0146B",
"0xCB599040BBb0635681a9280db1C314B6B599CE0e",
"0xE39eb02F0b6bb8B648d48D8aCbc3f5d1a7a21293",
"0x9F20d4630756992e747EE8DAb8f5012ceb619D2f",
"0x5bB3FaeEc54541e54582E4d965be3FDC189B6342",
"0xbF8d54b8673EfDf5422932008946D5e5B451Cd3D",
"0x48dB672b0Dc45090d67AC58751cF7d18fc823144",
"0xa0D03c12eE1a77e28a780a9ebde3dC2871d8F70E",
"0xAAf61C76888627740B8B52aE2424a828cC76bE65",
"0x6B1818972F356795e0285cAecfCA3B215c4c25ad",
"0xc46a8bED5893D66E9C982B84828fe42E4BBcc8Dc",
"0x8b3ED74fCF6b3b4390Da62EcED572E338D3da377",
"0xFF13807875E194404805bD8f9A4119F586b8b1fe",
"0xeD57AB479b94ABA6235f127CF214D7E953F07856",
"0x40B0d26f43ae7eA50F0cf4540e8A016519D36313",
"0x5C6f6299BD510B6703A48787aA05E021caEeB143",
"0x94F6aBb4Fa3919f053DD6CF9a3a2be500026a43c",
"0x5Bff6b736d00f2D1daB1f1a8a9155349C3414a1A",
"0xa4BCBEC23ab40796B40584416Abdc95D242D7067",
"0xaf8A13B6d64102aDfE3c1d92d429f58659027499",
"0x47D8f53EA8bff787110B2325D0B6B1a5321bd598",
"0x8E8F2505220ccc6eff7a4ab76bd17Ef20C28B170",
"0xa6b0F76d7d27A20579e04dA0e64dac7FB76888b5",
"0x1eCa7C33F2eAE65c11d40d78C451CB599DcB6E87",
"0x22FbF8f917438a52081FBcae91E5fbE6B648Fe4A",
"0x471CE9eb40A1cDeeD49879E57b76e2c61FF964C8",
"0xd9f2aBb0c7f42F84Ba33998b1c3a8c0B375D4E09",
"0x90b8440cc64bEcd92a11fbA3B9155c6865cCa0D3",
"0x189bfD31a3f880097A9A20BDAa129ff4285a1538",
"0x00675F0168523d7459fedD1ffaf76d928C278cCa",
"0x1dbC02BCf5185621b6867BA048BC09aEC4Dd8326",
"0xa858F9D852fa37A50Af18dD18D785FF214c677F6",
"0xC70C7A78034e4473C5eBd17dCc34d022769E9A7c",
"0x6dABa02D23121C604183ce195A4A725c7417fC81",
"0xbC28937FcC76D140046D7506c6d12847729250C7",
"0x799dcA3DbDB926EefB7fdc32ccc1902E98d95948",
"0x1f27Fc3722b8723046bEdcCc2a1D6607b3057272",
"0x6D6D5631477D49fc282091f6F8F221C36d04cc05",
"0xE8C650937e84469E69eaD686B655F7D70D03bE43",
"0x06d589f4a63bF548701C7108d5239aAFe578d55E",
"0xfBa40123d836B3A1E84Bf59c65f58A7a46Fa9965",
"0xB6E4fA49c0086376f7E62bd43E4c9e728446446C",
"0xE5efA6BCc378ca819dF8078d680EB03d7D5D54b3",
"0xf64FF2EE4e1b94fDE05D23f95Ed823646EbD647C",
"0xA8246733bdE19DDb2F729BEfC2B97B3bE6113435",
"0x030F9cA2Fa3Abe63d66526B77C3f088a80f3b239",
"0x8510F9418Dd4a38c07AD0398fa3dAC8cc911Fb34",
"0xf2a3301BF6cdf830C0Be4aA6bb796acDbc7AF080",
"0x4EAEe19B223DED570DD122BC5190A5Cf5dbC1Cf1",
"0xDB6760117deEbD2bFE0eDd977eDf130B2809343D",
"0x76C944AbBf0399C678359dFd735e2045C849EdcB",
"0x4a7F39163bA2185F2Fb0447Cd7d406d5DFB7531f",
"0x3A96a9A4430A66d59F45c64D088385da87dD1942",
"0x1B687c6b680F1ACe9515C10DC1f3c2f9A0c47C94",
"0x1ee0dB1aed4Af2CacDBd4778558b65364Fe2A6b7",
"0x1aE431D6EaCDAC9C8C2F66d36e16DB784C267Aad",
"0x532A963A1e143014CD5EA68E217A7295338dF424",
"0xc23c82FA0a6Fe8b1B000D9a2Bf4db94F3A2CB811",
"0xf769981AC16FA93624B56Ab8299dcB7727DcddEF",
"0xd7f4D5Cd8bD28cbD6d180cB6818b9fAA7A2EDbfF",
"0x65016AF3276695aC3C322331d2Df6caced181Ce4",
"0xAc0226A5070B3cc76F2c234ca912cF2668af37F4",
"0x20DaFA62Df66e1062D4B0f10F7FC4C17e16D3cC3",
"0x8De984F28bBDeFdf8f3c7aBED262a20a7eF21932",
"0x32fB4A99439bb228D879B8a1729EDB9974DFD32a",
"0xAB6FA891cf003188c1cb85E4eE2E2BA5d26ac65e",
"0x2695279539B2e678984d3A49441c84C185F69693",
"0x0659f07963DbbF40Fd3421f499c1b007C9096241",
"0xf1b952CF0cCF462243894F8546dCbc5a0cCfC04F",
"0x0F263078A46f60C94662A10AdFD9b71c2AE950ad",
"0xe6Ed9F3d5bcE3Dab7B5910C229465C410CFe758c",
"0x2378918a436Df787C6Cb8B5674A6F1709bf81f6A",
"0x054ADA9F231D5f7233a3269aC92Edc71239dD19e",
"0x7cc5300501AC371bBd597927Ea9FdF41AE1aDDca",
"0xfBA2048c8670dAa12a3f65fb738eDEcd62564Cf5",
"0x53a1bF1885d962c42e96F4723a0A593c7B793F4f"
],
"toPrv": [
"0x965d28db6348dd57ea740122015fe30cd7b4630e7d5e953f9da243a6dd827084",
"0x9e849cf0e707eb4fdf56088860a8a8cf28cd991fbcd297e20de70e9405b18822",
"0xcbd6c7d527c5b1cf26a3712607098e5a274ca102ec03be79c6e778d856e21818",
"0x961cc3d8598bb2051200ffff5706a97762fdbf16cb45236774d17522130e058d",
"0xd9ea2c481657fc85effe4feb836e4137e1f9b291646bfe595d14f7217948cd34",
"0x2467c6cb0b7b2f0899835908ce9210ed51fa9cba27c4b386f84d0e01c1e25f2e",
"0xad34ffd9727531709dc87ec888f6710c88da9e2cb0b771ebb59f7a5a26d0d430",
"0x1a26c8e61c0cd9f17efbd9f1c088861de61a0b6f9f9fd31c154e339e6f249388",
"0x8be0f9a5e529bfcace7264ab95db0eefdba189c2efa8cd5008e642358fc867ad",
"0x8b519da331dc62e7067a2e50704c619cc82d9803593fe7d6307b43ef85c7070c",
"0xb21f040afdb3523edcaacef2476475e6c04d6e54edc9603ded9898badd932f1f",
"0xc54831a0a6a26cea55760f8788f4f5fdd75d8e68292983b3e8622c1b2da87906",
"0x3b28e8970ed94689535bf229b55435c56405a354650a57236b1db83bdb6dee06",
"0x50dd07958f0c42034220b01784a72c1b5d90a125cb623295b05352f0602dca3d",
"0x46fa719226806a0801d2971215600fa742ee5a03b9f341139020717a43fcc640",
"0xff582ec1e45f4c8bc860e91f1c7f4bfaddb64328e83078009434fa9c0a421b3a",
"0x9a0cfd31450c4ce254ca0f02ddc0094965d84bdae33a80959f42741127f53842",
"0x7bd45a4c5c140cbd5cb5b74c4f76672d825f5817de06297c80b13ba67e011738",
"0x1eb86a4daafb2ccc60b2617164fd900a9aea9f5b5ea1667febe428826c233dee",
"0xed479fa442ed1e2961913b6c27270b9cb931a944410ccf928dcfc27d52bb230b",
"0xef4821a8172ea0f464ae94498c420f373cf877f3b2f91400e2cced4edfff6bf7",
"0x0ca0aa33912eba7d35c6ceffbe7adaea396b13cbf5c7f96046c6162679f1fa27",
"0x846a64f37289f3eaf5c18761b1d62cec245ea0fabfe999a8a2f41a0852f9839b",
"0x1102acea6188d86f3afd678455cdd1e6c83d5ef7b5930340734fe1f64468caec",
"0xe5b0c7be4ca56d9bdf3718adee1d156cca0508af095cc293bda34e5dfe21681c",
"0x5edfa0065ec2f9cbce0bf6359e58c866141500624cc198c39faeca8e4ace861b",
"0xf7aea92ed0cfe6cb07f3f2562ab41cf0023e8b3112cf8c1ef4d9955745522f4c",
"0xc368cc5abaa83d9535dd2d7be12f404dc6ac01ad9c823c8f46a88e50be476471",
"0x4b0d8cfc2c3a99a92f54cff1d07be6ff424c94eb35545cf3f0f5a59c1210e31b",
"0x3218f89a8ba0b98edb217db0c64846493298a838e715663c84de490e75b54738",
"0x82f0e84561600072d72e5a968590a74344d379e31a1a0e82f8ace1f85b46ba69",
"0xbd3dd93e4e88495dae065f4f40bf38d326dd2a7612dcfd65ffa082afc01b7fdd",
"0xedfad0d31e4f50f69d529333e09ab8d00e713e99126ef75cbf2c1f973de30ce1",
"0x4df2d96b81696ae55db5b136aa56ab26446846df344695430371b036f7353f11",
"0x6f29a2b3f6a1c166ff0f7d10d14a118eb3496cb56b188874046fb5a4ba3073ba",
"0x041e95c73dc66aef4daeaa3a8655b54e4aa9d313f86a079a8b2d8c372ac3141c",
"0x4cc7ddfdf7e22b918d45d6490c92423407f44800d89e08233595d8d20eb85ec5",
"0xc351a6ce6e8b9718693ab6c938b0018b1a94592a6ad77dfe0dce5c9d3696eac3",
"0xe5a709159135700e74be22da8ba937857b87e138bf965f47d75d8ac1601f84cf",
"0x2848da62d9e28fb3c66c4f3a238ad2406e325dbc901aef5a4bcb62ba63217d84",
"0x2a4e03a7d473dcd3419c490a93d17a0b809b303b5d8fc5936e54ba3f83c49e52",
"0x9f7bdb91b6b537a45cbf59136158cc1d8f6bb625b63d9b08dbfc702c893a7342",
"0x4bd224fb540e7c884de946e904be74b848c0222d6fe57ee158c2b3620bea8bdd",
"0x0b11aca771f240d6e9957631cfd5f511316544da9c6680a283567dec1ae2b8ac",
"0xac937a7fea242a6db002da403ed7ab73edc6b561edfac0e739dd5affae5210bb",
"0x524b92664e8138f9d6fab69b37eacdb137e6a6f6c0dbd038df609a7c41f63214",
"0x699af21b512e2281a58b8791e3b5df9d79b91124d6b6a3d12ff7c85ecc878492",
"0x3b7a12f34f90ff56ee5f9a29967e68567e2b2d7e34f34857ed48bedbbb7f3e03",
"0x262621db53f4fa4c17c2ab59e53fef1b527403351d4b44c5b965228ac65d8bfc",
"0xf8ac8b98c97e5c81970b6b32448e09f73032b277efb0531c2a6ec73940ca6d12",
"0x119aff12a684832a6e3f51dbe364273897adb155a632b8b5b8ed04a7dc27c240",
"0x6c4c0a5b7c22c5a2ff64ac0813fdd17757f19cd836aa53231e77abf1eec154de",
"0x68f103c5c9e5ce213d8b7b56b2d3b62ce04e3a5283319747f6f5f060399349a3",
"0xe1a4b372115515f74518f754c6f192cc706e650db56471f56d374f73aeb860ed",
"0xb5d660988f0fb93b9ed78a17149bc6926c9e5b68b09aa4e4c89e61d493964a43",
"0x9842f7d2b51416fcf53865318d83b638ce36eeb08ce2e194b500c7d3eb1a351e",
"0x3b45281f76227dc5fed3c0c68e9ba41b65495a158636eb78968f9b3a903443d1",
"0xd2d66ea2ab670f42123d44658166e08255f38902555a01b28f0e86122f766698",
"0x96282336e5af509a339fe4902b6e7945c24a3b3fc431e3f4dd3f3e1503cd1fb1",
"0xeb8d1a213190c37b82437621a41f5ba181eb2ec5869f0290bddbccbd73997e5c",
"0x1ffd97370a7cec5f64235bf38638941911ea461496955f91957c9fef7895d79c",
"0x18457fa1ea43d7deaffaeeda2565ecec62fb75f9c402981082919b0caeb2947c",
"0x1be717996036fc03896b37117a364c244e452f0f896208f726722fadaa43d734",
"0x622f7add470b61ec5a821a3a4aaa3d8c8f925db66f04221d91e7e04420a4d847",
"0xbff4bbeabfd1b0483bd856b898c1bddc6422d9be1a4476f695c6694432937423",
"0x780600622c88fe329ed7e2b65a9c68d33cfe7c87e6f5f0f1f0e440e597dd001a",
"0x8daaa33fc69ed7f5bc6f5c598e74d5467d3a33e17b94a08731944d2e8becabdd",
"0x6cb677927807a5d78dc69b3885bfdda57e093e22e229b7b3beec77ee329c631f",
"0x6d9a21d740fdda8e1fffaabe744ce3ed8c947896c01b2f21131fc380f0b384a8",
"0x1705d6c684a08394fc9eda65d31aa6c0a07b751c918c55a2bcd52837d1db3ac9",
"0x03f00a2d212878aadd5b0deee74b9f42215fc414eae248eca853fe23a32ee058",
"0x370b87620819594da3c8a6213940cc2e29ee57f5fb424ea07b2de5cfa0e40837",
"0xae181c6a6a2d4b93ec32b3a0bbe5669197fba3a42457f2431b815684bf0f3f08",
"0xf7160660c4367626c40433e00e5b0fb74e8836f0631db8013e08741119109812",
"0x971dfc6a933fe163186046060a0b77586a03c141c0d142034c9e8f61cc232f9b",
"0x3c55d9b2b97fe28c5603b71763ff2e7894c23e2d994ed1bb13fec3a4064fd799",
"0x783b6a1f81461c0afdf9f221f71bf2844cebe76d5c0c561a56bbeea428b688ef",
"0x42d93e4b68db957a1ec7f7b521b2d1988f78446b7a158cd65df182414006170c",
"0x95cc309686ddf5ee51b2163a0cfdc92d7237d2a369f27221a7b82f0596268287",
"0x6fca842737a91f27a574e3cc2d9c411a3addbc2962d760af3041942e32e929a3",
"0x90c6c3c19b8c23f378e411ae3a30f0aeb143e40274c0f802020479ebbae344a8",
"0xe20a8314b6235cff48d313c27d5500b22ab6948d4456fef1e6f071db1f49b4e1",
"0xdca746627eeffcb0a84d1c1f156056f6197f30aa6c65be96380c2037ae25f688",
"0xa48771b1ee5719a28cc156091c480abc252e312e98a3cc40dba1e96b69ff168a",
"0x14b4ab3bdbeef43e6a899429b1c353de071734ee5e43542030f342f189fd6cbc",
"0x9f18a56994687bad5054ad75b03351408512a40e16da545da9752664e55fdfb4",
"0xef87cf9dcd6800367c15e94c66bdc7f6acd94fe02c5df63af3691c349d3e7aa9",
"0xb889546443c111d693d2607a2660eab44d35c1f43fcc4d86fa2efc83571ee74c",
"0xcd80fbc647fc1737f65811a2bed99a34a7190ad12318ee4a66f7dbcdcf02a197",
"0x2de399c6884e293c11a8a2943215fbfa1419035c97fbb2953f539c38950f1b7a",
"0x29e6db8e45345cd087d8058731e8e625f086e4347bd58af840a83795945f8fad",
"0x99232c4ceb77b0d9bd56b5bd37551ae9b15fbb6d73e07665c3cf6abaf07739ad",
"0x15f36c28ef34c3f06f8a460227ab2241394bc5788d1ef6295ff649c4ba04aa5f",
"0xec85f0e26365614db8a5d7e5c38a952980b89d8b9237217d3d1057467ecdd79c",
"0x578179e195d0252ca4cc56e166a89ee0acc991a411a9547b4ba81012b948af29",
"0xce142776c1a5e7fbbcc3e8cf078cfb93cf728bba433bbee272445fe1aa7d1b45",
"0x3d4d9304b5a09ef8888074df735c9bb1e2dc5226f162c395b49e1c82df06b618",
"0x6b8f7d0511f05deb8520505998db155ba9a4ab0bc1fd8e00c5303242df066f8f",
"0xb67003e3ede935bc91000ffdad2f04ee84c5695c3f54f5c1f5b0a17db1294c88",
"0xd8db5b9346f26a20b2e5a51f9fd4e499c2a130c66be6f1bcb1db61e52043c02b",
"0x77482480f4d0a621e3664042834791624f7d0485ee20315d4aaa18cdcad74e86",
"0xdb5b3c6c63aaafb6e2229da88dadad97fc67abe4c99ac7704b653d6156a3e94b",
"0xeed401acfee6ae191b0ea20085f0bc1d0575d471d15f3b206cb7e02952086385",
"0xeee0721e1362c73d55d69a536dff45cd75fbefe69e09e39965b2c779855bc1d6",
"0xc599db41653e9558af517493dc1e2f0fb8705c6055464c439f3aa071a7ed66c7",
"0x1026432245690732e66e26684f5207c2394fe71308af7efbb4ddb4c1a08fffb3",
"0x0a11f046f0b388d0b569e3bca614046369f34ddc764e6c9395fe606a4d2bd109",
"0xc50dc4ece75ef3542eba1da60c7e5530546d62d3496d7cc613a24622accb1974",
"0x8d96ac85670e03a800a584e8171ea2bfd36fdbd91f1c020a95d7045e117c2ab4",
"0xf9ec27ccc3d592657e9be94441728a3198c45d9c33487ca7fe52c3d14ecf686b",
"0x7b524bb682c8c5e1ed2337ccacc2cf76b97379412aae862a877610b61ce2006e",
"0x034ec31f9db845f759604695b1480b07f1d564117ccc3b06b29a5232b60da0c8",
"0xa55bd9d209d6b307b5c3b84329f5685a383eccf9b2b268b1ecde630296099cd6",
"0xb2af4bfb20048dec240a9ad050faa7f15a1b7631e70fbedadade9f5c6801b0a8",
"0x696aedb155452fd3d3cc988c7de479396b38a0718063a8a468c33d9a4dec4b5a",
"0x00657643b5140ef979e2498d0028b75dba93e793388b9cf8bfedd0ae7648da90",
"0x3472037094bce91228a4003f69ee6ec0035a00329e7ba4b79ebbcfdf2ad2d42e",
"0xc6b5880219f5bf55db10a8be4322fac3de764482286f35d9c446188d14649cc7",
"0x90d5426789d1a3d30191ab43837de878e693b337e1fc0cef045d859f850b1209",
"0x258a955c21aa1e340466b2dca07a9cc073f3be441f7ff2c200f2062f2f1e31ce",
"0x267fb14142e910c71e4caf724ed38c335bb8ffe92476e3060509743759a4bb02",
"0x9dcd10afd6f064dc6e4a5a41442b5f42c1267d66f2d11dc7eadebe441caeb037",
"0xbcf3e06e27f53fa96d4e3e51da41d3de3d6a73bb4907e60abf46987422a99789",
"0xc780f9de1c5f52ae1744f02ed3a7e97b9e691b1a9ddfb5070a533b1da23de3bd",
"0x5ba22a8c4439019db8f11c409897fb44ba68d698c23b035f63c15c488a4adaaf",
"0x6bc4ef9abbba4ba7b9c7c0a0092fdab8d4b4f4531683feeab5d6d9f3c767485b",
"0x898949b426710a8a7503001b091119e944676e39d68552d75b00d48ec6e6711d",
"0x33b5f4ad175556d5460c4aedd31c0d482012abf8ef9bd818b9a112d6f9ae3b97",
"0x88a45cd25811cb47c3c9f6151ab314b89d2b1a8c8d13a37c8f4c04359a6b27dc",
"0x30252f5dd14e133b8c571499fb36f7d7051e755980ad245a3ba8adb1d1be888b",
"0x800da982386578d571595447bcaf1be5b0ce65ad9e34850c1c0825beced245e5",
"0xb8cda5e92119f878b1ec3d2f1a4413ec9fb1404e2d457c0403285b03ffb3c05b",
"0x906cbfde8b8489a3c0ab9ae83397f2561bc1cfbb4cd3d3118582bc05731dbf5f",
"0xa1a8984f0b571b80cea14597a590d88dd61caa0d8e17610eae8bb568fd275561",
"0xe80b657f75be92e244572d7a8f55ed2067765e78a65f584afb794caa91fba4a7",
"0x166670b0660358c9b89b669ccbea3e43bafff4245d2c1537109fd5c08b554158",
"0x5e88036dd45f4b8787652201604acfe11b3542e74cf1a1eb9c96d3231cd728cd",
"0x0bf11b6d325534d8c36db558834c43e4e809ab52a83b07006f827249a9f8a7e2",
"0x5922f5f492da07bfd104178e62df4872089c1bd12af3bf1dd1ff41f3e3493e78",
"0xc9b21a632d930c55f9924acf502079b76a03a1193bc5aefea2c1a0c69640ec4b",
"0x6d7f3651ff1595ccfe23c298abddf2191386c54387e1e37484d653f017e3a41a",
"0xa8a831efe7a05c5678823c78e28316d721ad7b7ee00ab024ae9fcf96796816a8",
"0x87a609fdfe83ecfe0f57630afaefd36ef2379d7366dbe0072f6d3792628698c1",
"0xbc455071a914db9406fc35ef76b05e264ebbac4e8f396dc1b77e9aa408d304ba",
"0xd182af8bc7fe7ee7edff2e982e6c0dce81824c6e24e6005b3ca2555eee94ac84",
"0x3b2598912df3b849775af2726472e75b289a4ae2e10b3888f7daba74ca0a310e",
"0x787a1eb77a655a184ff3819187f3db38a376af8d834520625fc96f82c1fef70d",
"0x7c08a3d6fe2be0d38f902e29bbb39c89789b272395968fa19ba9c245b2e34e41",
"0xef82cb2c923b1d2818ec2530ba82c498acec80b651e8f9b95493fcd63d45653c",
"0x55c3870f1d6bc18b0f6924108dc6ebba7d35e20e38b0bd103391edcadad93016",
"0xd7d12baacfaf8d892e089226220e56c80870437494442c4f3e2f7eef3794219f",
"0xed22296f68b64e6d4aff58113bb646ac605ab5e0253e62698caa6e141ea9b1a9",
"0x58de53c25353e308a8af6cc001c96d0bcade52dca3bd23891f8a9c60a66f07ef",
"0x7ac3ae2c6acec8a1c255807805d94989e8eb5581097e7d19bee57f05e97e46c6",
"0x85688e82d7370ba7b501a3cfc1460bc704ef61b7d8d1814c6bf35957726bf0ff",
"0x9fee8fc61de14548e2c6b375851bdc20fb6df8d56184bd12fa9890176bb8888c",
"0x769c107125f3d17e9235130d1a5b1072d558d11b0e9fe15a89ea9dd000eaac7f",
"0xe29e1384dd09fac5c0fcc351eabbda21630e5fadf3d4f70f9a00f06edca28d54",
"0x187d1910c13b6a6831a7fdc2a17c175a0353728cc7e7788528794c5fd1bd14ea",
"0x97b9b4ef4682c1da11d21e0abf8e78efe28da571c4270a9bc775fe5739e0dbd4",
"0x010a74491672233ff5d1d6c9b30ef74f1a5f2a00ebf0e61bde04d52629f11313",
"0x57f9c8756a60ac0318bf81d4d53d5a2197fb471ad7dfbbbef71b4b54d3c6a85d",
"0x47aad51130cace89df63cbb2bf3f72d59f9faf480b5c211d008c8ad299a4bdc5",
"0x30f5f459144e262bc1cc0d57b731b44341186c9a72fad3e59f0f88e960b533ce",
"0x36881c1cda4f76efb06ae842d15cc589ee4d4e11d0bf584878a4c03e486312ad",
"0x7a9953f97e3ba5dc58bc6387df585b4b5e6905a95da7f2f1d43ecce80638c1aa",
"0xdbf2ec903629dea5a19f16ed342fc77d4618ae045466cf0ac845e01c06e80a1a",
"0x437535abd59600ad832e0055844ed62b3dcafd926e02ef1715c4f081b8180877",
"0xa6fa8f4d8e29512b0d4e5be31a2d645eb08615a4f09b5bfc141f3ff57af0e614",
"0x50e0b620b1f9a1bd5152afa07bfa7cf0583f37b366d6cd27f6f07fddfb6311a9",
"0xb0f07fa0a662565ef99da923a9cd5970bcc309139c58cf693d3f14865729983c",
"0xa3a34fd40649f5d559f8f4ba359dfdd701f7ad08b0a5686c06e0e06bf18d9931",
"0xb01a8b78c0468ff41fa90aaf29da5d34233fee18e2b781596a1f363a24adfafb",
"0x41046f0d9eb02ab82c6fb882e7fb12d1caba3854e0b292f33ac8f0044dc584f5",
"0x9e5e87d10d1a74eec1df869b9d1017733f7a2b3cd1d2ead8a45494fcdb6eb39a",
"0xb419aeac714636f2e69a5ea2034473d377a892e44189ccdfcfe2adfdca8a7d73",
"0x45c00cad54b1659fc45f47b8a8acda078eb4c646a21ed6bd91bc5f8dd3624d4e",
"0x1e081d16635a693fe8e4c0c3fbc0702774188e917021ba917d09001f9d438311",
"0x31df8105e6a6d9a9081dfd77c0db417812ce8566ae3ded18c94021f9882adedb",
"0x65c320e435653baaa879caff2d0fe579ac9cbf7ce29ba3d922c398bf2959edaf",
"0x6509f522e680b9a12e898ad3e5b897e4ec533657777227b6baaad4a6b4ea9022",
"0x95047ab0ffe7f17e709c980eb76f9c3b6eb46e06665fd4ecf4f8adf9fd2105c3",
"0x6cc8e493ead94f99dc3af14e40b468a64e145d49ccb5b39084609f9576001701",
"0xef1b66e4323e5e99c41b84b619c2702ce0318d4b3a72d88c52d51c152f099811",
"0xc7984af8457f5b20ba1abb13dfd836ac048a55af9f699913f5ab81d51a642efd",
"0x9456d3bc81319b68740de7dd1be06a09887d73f8de3c97bd3f7a56248b4da57c",
"0x3f336d288a268c05a1674a4d4fa44a412df10d8590e8b7b0ecb2dea09ad73e8f",
"0x0849f42fb684e83d88b0e91f9e50f72c0e01a2d3d5538f2e1fc4b6b1e577e50c",
"0xc67ae2dee9fd05a4645690a1cfb2037bec82c340c286c906e7e2d0bfa0da2db5",
"0xf5d3dc0f645fa1e91bb101183719fcc9a6f27ceac205fd21f100a7ef34245931",
"0xe4873516b6474a8127197c618b72e925d3d7c60c714c4b6c7ee1ba40e3a0d194",
"0x9c08bd9b962abd896fecfe9f2e00c006b0852040ea631c111cd3c63fe5b80efa",
"0xc8639e42e0df1696a80b55403f1881b9ab5eea0aa54b646ee2436b739f63f881",
"0xbe7c1b11ad1ad27a3f4d40225bca23a7a70cf611a69ba6fc857665d96c1ebeba",
"0xca75bc20b1bef0507a8d8d8909e882f14eb9100648f1fe4403b5f768b04f6a7d",
"0x5acd3e94399c376f8a56bea9e040ad1e7a0d98c9e877ee9d6e374185afe62c48",
"0xa5ac0f0f393a9deee27ad64060b68b5e0946bd13952c37d6706c45497e167a66",
"0x900dcf64bfcf25507e3e4d784bdfa2d83d8416ec227831ce2cd533de03353c70",
"0x17a7e929bc2bdc6a0a1d940c595e019d1f62a7fe743b548d6d3bd31d04b83c63",
"0x78624dff65336e6455efbeb7ef7f143c58ffe87933dd5e40afe0a21f1f13ca5b",
"0x401af0d9625239eb2d1b193f0add9dca599c3244cb3e5197df0bb1c8a8838ad9",
"0xd67b74444e612ea201c57f357400e92cfef84a59d61fa6ce04ed4c4e89fe6475",
"0xd182c9e5ebcd56e8c2cca1afa76cd3f06508ea288dfaa8132631c5ede173473d",
"0x3ad0d4a3ed5bd4f02ffaae01048aa5242274e64b00404c7ec9407a648ebdfcd0",
"0x2f591c68be48b480b21982fbb3fab0a9bc0bfac7e24811d20be666efc25d79cf",
"0x959c4a1b08051f151dfe0cf5ecc251782cb3347c23292bacd8660b8588491806",
"0x3b94c22431869bf7285cccb7bc304641585d0dd0facfd26b0f45da155716887a",
"0x04c7b7c8fce9bdca132a2d9316cd1bda8a09d956ca1dacd5e945ff6490eef324",
"0x0c28a462789bd8237bfa492781db5a90cf4a26c42c36f579adc77bcc8fe49ad8",
"0x08bac37b2f33765868462a4e461ec0a16ac6ed1900e5f9bf676e34850a7138de",
"0x11eb6a8510b1cdd7d922b7e4ce7c3c027ce6ae6fe6414cf2c208c94ca7f242d9",
"0x94d571033ce4b9f36e98a25fc5ae21dcd0e5ccf4d838d884a3c9dee342b9eb73",
"0x70cf9c6d1215b05c998a6703c7f32a43a9a239c4ec30a0129f56a998221bd231",
"0x6c69bbb97eee95ae3f1de3133b25123fbbb79ca5a23312882349fbaeac021da4",
"0xff768993452fbca7dcd7a41e89b494a8d00f592916b1533ad6239696d1c2bf82",
"0x2531db6f8019c1981c86ae81752035f09fb84bfa79be24ec5c22bee78b371eca",
"0xb8976b46c6744d35202f65f39beba8474675bfd0b14fbe082e09ef6b05ffe525",
"0x69b0a26b20b5003f0472e3404a0e7ab2da92cbdd530b60ba291dc98e14b45284",
"0x5951b58bda27335e39154327210c9722a8310e2643a74eaabf898f8e850ab668",
"0x5ae480540823b403b21325523fed8b7a9ede689cc4354ba23b63454c259e50a8",
"0x94c2be21bbd771ce0d37ac2e631ed35e442aec02a968ce6a3e0b3abbf5c118c6",
"0x7d39e77f3b10ffe51a24112e49bca9bdc4a93f60a7423fe759695bf29767b2ca",
"0x665f317e5ee92afde3517b99ff9fff6418805d9acec0bddb2a43214b68af7317",
"0x332b9686cf121bc6cf5530523426ac8022b908956c18c39ec70a692f95dad752",
"0x30b0ce3ba5a16510c1ac4c1ec2d442f9c31c0a3748d363dbe3b34329a6628720",
"0xf327975bed658803ad39d754dabe69f1fadf97a396fc504bea7a84e5cb4c9a07",
"0x0c5350c106fc090e8f6228ffa114ede4c9ff9f09dcacdf0396fa2653507617c0",
"0xc95a6572f4e94d4a5fc57e77c6560d109618e22f06fa0997752b81b9dc15ff5f",
"0x8297f01f8258febb603140a40ae7890c5c28a991c3ee98cca93d41ba95a1d34d",
"0x570b964afb677721a99750ae4033d583d7078db7beab1d48ccc6f608f6c90805",
"0xc74832af04d2519c3c2a601c91429a1dc0fce02e48e36f9ec0feef562aebd382",
"0x882274f88fe8d8b380357b33de563835c3e0e00f03534f9e45509a8dfe435c49",
"0x863e922c5ee22fe9da7581b98377bfe5f80df131a1f87ca14ae179dc2c2e4de4",
"0x04439c5a714e595150baf6d56b2fc1abcb86cc90f8a61d617f0b6da4db2fd2ff",
"0x9a5298b60df849aaa537b866039f724fe8dce1d93c8133707e7fe7b13e3c6d5f",
"0xd80e6755fe88c7c09d1ea6ed4a922eb51396a14a7b39fb91d377fb18f79447d4",
"0x94bff6331b97991572c1657959660a810df6b271e60d8de29131573d5a7817be",
"0xed8690ba68bd97508f8113cc6555d51b03f6a65135c4563ab0038bbbf0fdbf98",
"0x3b9d053bc31a39d5caf20d9ba908cf807edac2e17af92b55acd378ad9ffb4b50",
"0x0049c4c09d02eb784d0f05f18a4b192657f93ae4d4e1a0ac947d504977e36935",
"0x77cd1f7bf23c52a8a1fb3623f0ec81e6bf440e592c0c26404b9e9ffe8ea6f6a0",
"0xf4484633e383a1ddb15fbd932e3fdbec9cea8a894acff263f2bf4b275b954d4e",
"0x7cdde1d395f82302752d96dc2a8dce80586a9d8579472a26991a448b397f2adb",
"0xbcb3ead19d9ed224a0557f68415db35e84b11db577e65fb1c0ce8d20869a7588",
"0x7ab0c43beb008899b4182d766bfc5bcedef2eeca461499ca9746d3d7eed9a362",
"0x3348e4a327fb4a7001025f2615d4b3ef75160f64c01b4d0476f9524a097b9f52",
"0xfa5b8cf4028ae354eaf381f364607a7d8602905a2b13b041a36c7a6bb89ba7dc",
"0x408fbf90b3049c634bcd600ef76220158b03c390a7d60647c42247c24a3ec9fc",
"0x178187a7800a0ed41a4154686110c316e3dfbc5dc4506a7ee05fe1a3063e4c59",
"0x5d857df0173ebb23fb0c4c29929a009d11057f3cb5a6166d9fe864fac3f70e83"
]
}
\ No newline at end of file
{
"deployAddr": "0xe2bA4B27E835f3D5A8f74B53aD6b8b6264D3F501",
"deployPrv": "115725efa0b457a764bb0b73b79a26605a54a5025d825b5a627f69354cdbbbf4",
"rpcNode": "http://54.72.101.87:50000",
"chainId": 155,
"goRoutine": 1,
"generateAccCount": 500,
"isDeployContract": false,
"isInitAccountBalance": false,
"startTokenId": 1,
"endTokenId": 10,
"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
}
}
{
"Coin_Transfer": "0xf52c689ced325ba52891f2b90f8ab36c93eaaf67",
"ERC20": "0x9b5b83609915089b0a534b4bd0059d4514c55d26",
"ERC721": "0x92e96c2f924dc4871e5a8fddde4983423533bbe7",
"One_Coin_Transfer": "0x117cd28c021318c06f9670fd9fe484d4c9dfcb13",
"One_Read_Write": "0xc588945f57f672f1b346fe8a99e368d5a240a50d",
"One_Token20_Transfer": "0xa2b4d23faa81c0599bb537a426bb4dfeba39f58f",
"One_Token721_Transfer": "0xa7afc31cdbc0e37d2c290a7ca82429bb3bcc588b",
"Read_Chain": "0x8f0d51ad96f91170677cb1295ac31eaa8b9f9a33",
"Read_Write": "0x07872fdda3af5ff4f8fbdebbc022dfcb4fd8e022",
"Token20_Transfer": "0x7a0047ee9c89646e2df0de21a627827aa777f23c",
"Token721_Transfer": "0xdb12ab942b4745a27a024b41c2cd6f55220e9316",
"Two_Coin_Transfer": "0x46cdadb68998d6c60e24f085a163baf2861be6b3",
"Two_Token20_Transfer": "0xb4176da3ecd693cb257f008502e43ca9aefc981b",
"Two_Token721_Transfer": "0x63a18b3cc9113780bc405b9f9ffbf6988b52560a"
}
\ No newline at end of file
package constant
const (
COIN = "Coin"
COIN_TRANSFER = "Coin_Transfer"
ONE_COIN_TRANSFER = "One_Coin_Transfer"
TWO_COIN_TRANSFER = "Two_Coin_Transfer"
ERC20 = "ERC20"
TOKEN20_TRANSFER = "Token20_Transfer"
ONE_TOKEN20_TRANSFER = "One_Token20_Transfer"
TWO_TOKEN20_TRANSFER = "Two_Token20_Transfer"
ERC721 = "ERC721"
TOKEN721_TRANSFER = "Token721_Transfer"
ONE_TOKEN721_TRANSFER = "One_Token721_Transfer"
TWO_TOKEN721_TRANSFER = "Two_Token721_Transfer"
READ_WRITE = "Read_Write"
ONE_READ_WRITE = "One_Read_Write"
READ_CHAIN = "Read_Chain"
)
package coin
import (
contractCoin "contract-case/contract_abi/coin_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type ContractCoinOneTrade struct {
ChainContractAdr common.Address
ToAddr []common.Address
Amount *big.Int
}
func (trade *ContractCoinOneTrade) OneTransferSignTx(tranOpts *bind.TransactOpts, oneChainCoinTransfer *contractCoin.OneChainCoinTransfer) (*types.Transaction, error) {
oneTransferTx, err := oneChainCoinTransfer.OneTransfer(tranOpts, trade.ChainContractAdr, trade.ToAddr, trade.Amount)
if err != nil {
log.Errorf("OneTransferSignTx func oneTransfer tx error: %s", err)
return nil, err
}
log.Info("OneTransfer:", oneTransferTx.Hash())
return oneTransferTx, nil
}
package coin
import (
contractCoin "contract-case/contract_abi/coin_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type ContractCoinTrade struct {
ToAddr []common.Address
Amount *big.Int
}
func (trade *ContractCoinTrade) TransferSignTx(tranOpts *bind.TransactOpts, coinTransfer *contractCoin.ChainCoinTransfer) (*types.Transaction, error) {
transferTx, err := coinTransfer.Transfer(tranOpts, trade.ToAddr, trade.Amount)
if err != nil {
log.Errorf("TransferSignTx func transfer tx error: %s", err)
return nil, err
}
log.Info("transferTx:", transferTx.Hash())
return transferTx, nil
}
package coin
import (
contractCoin "contract-case/contract_abi/coin_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type ContractCoinTwoTrade struct {
OneChainContractAddr common.Address
ChainContractAddr common.Address
ToAddr []common.Address
Amount *big.Int
}
func (trade *ContractCoinTwoTrade) TwoTransferSignTx(tranOpts *bind.TransactOpts, twoChainCoinTransfer *contractCoin.TwoChainCoinTransfer) (*types.Transaction, error) {
twoTransferTx, err := twoChainCoinTransfer.TwoTransfer(tranOpts, trade.OneChainContractAddr, trade.ChainContractAddr, trade.ToAddr, trade.Amount)
if err != nil {
log.Errorf("TwoTransferSignTx func two transfer tx error: %s", err)
return nil, err
}
log.Info("twoTransferTx:", twoTransferTx.Hash())
return twoTransferTx, nil
}
package coin
import (
"contract-case/log"
"contract-case/util"
"crypto/ecdsa"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type Trade struct {
FromPrv *ecdsa.PrivateKey
FromNonce *big.Int
ToAddr *common.Address
Amount *big.Int
Gas *big.Int
GasPrice *big.Int
ChainId *big.Int
}
func (coinTrade *Trade) CoinTransferSignTx() (*types.Transaction, error) {
txData := &types.LegacyTx{
Nonce: coinTrade.FromNonce.Uint64(),
To: coinTrade.ToAddr,
Value: coinTrade.Amount,
Gas: coinTrade.Gas.Uint64(),
GasPrice: coinTrade.GasPrice,
Data: nil,
}
tx, err := util.SignNewTx(txData, coinTrade.ChainId, coinTrade.FromPrv)
if err != nil {
log.Errorf("Coin transfer sign tx err: %s", err.Error())
return nil, err
}
return tx, nil
}
package deploy
import (
"contract-case/constant"
coin "contract-case/contract_abi/coin_transfer/compile"
erc20 "contract-case/contract_abi/erc20_transfer/compile"
erc721 "contract-case/contract_abi/erc721_transfer/compile"
rw "contract-case/contract_abi/read_write/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
)
var DeployFunc = make([]func(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string), 0)
func init() {
DeployFunc = append(DeployFunc, GetDeployERC20Tx)
DeployFunc = append(DeployFunc, GetDeployTokenTransferTx)
DeployFunc = append(DeployFunc, GetDeployOneTokenTransferTx)
DeployFunc = append(DeployFunc, GetDeployTwoTokenTransferTx)
DeployFunc = append(DeployFunc, GetDeployChainCoinTransferTx)
DeployFunc = append(DeployFunc, GetDeployOneChainCoinTransferTx)
DeployFunc = append(DeployFunc, GetDeployTwoChainCoinTransferTx)
DeployFunc = append(DeployFunc, GetDeployErc721)
DeployFunc = append(DeployFunc, GetDeployNftTokenTransfer)
DeployFunc = append(DeployFunc, GetDeployOneNftTokenTransferTx)
DeployFunc = append(DeployFunc, GetDeployTwoNftTokenTransferTx)
DeployFunc = append(DeployFunc, GetDeployReadWriteVarTx)
DeployFunc = append(DeployFunc, GetDeployOneReadWriteVarTx)
DeployFunc = append(DeployFunc, GetDeployReadWriteBlock)
}
func GetDeployERC20Tx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc20.DeployERC20(auth, client, "test", "case")
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.ERC20
}
func GetDeployTokenTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc20.DeployTokenTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.TOKEN20_TRANSFER
}
func GetDeployOneTokenTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc20.DeployOneTokenTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.ONE_TOKEN20_TRANSFER
}
func GetDeployTwoTokenTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc20.DeployTwoTokenTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.TWO_TOKEN20_TRANSFER
}
func GetDeployChainCoinTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := coin.DeployChainCoinTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.COIN_TRANSFER
}
func GetDeployOneChainCoinTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := coin.DeployOneChainCoinTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.ONE_COIN_TRANSFER
}
func GetDeployTwoChainCoinTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := coin.DeployTwoChainCoinTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.TWO_COIN_TRANSFER
}
func GetDeployErc721(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc721.DeployERC721(auth, client, "CaduceusErc721", "META")
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.ERC721
}
func GetDeployNftTokenTransfer(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc721.DeployNftTokenTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.TOKEN721_TRANSFER
}
func GetDeployOneNftTokenTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc721.DeployOneNftTokenTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.ONE_TOKEN721_TRANSFER
}
func GetDeployTwoNftTokenTransferTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := erc721.DeployTwoNftTokenTransfer(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.TWO_TOKEN721_TRANSFER
}
func GetDeployReadWriteVarTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := rw.DeployReadWriteVar(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.READ_WRITE
}
func GetDeployOneReadWriteVarTx(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := rw.DeployOneReadWriteVar(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.ONE_READ_WRITE
}
func GetDeployReadWriteBlock(auth *bind.TransactOpts, client *ethclient.Client) (common.Address, *types.Transaction, string) {
addr, tx, _, err := rw.DeployReadWriteBlock(auth, client)
if err != nil {
log.Fatal(err)
}
return addr, tx, constant.READ_CHAIN
}
package contractErc20
import (
contractToken20 "contract-case/contract_abi/erc20_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type OneErc20Trade struct {
TokenTransferAddr common.Address
Erc20Addr common.Address
FromAddr common.Address
ToAddr []common.Address
Amount *big.Int
}
func (trade *OneErc20Trade) Erc20OneTransferTx(tranOpts *bind.TransactOpts, tokenTransfer *contractToken20.OneTokenTransfer) (*types.Transaction, error) {
oneTransferTx, err := tokenTransfer.OneTransfer(tranOpts, trade.TokenTransferAddr, trade.Erc20Addr, trade.ToAddr, trade.Amount)
if err != nil {
log.Errorf("Erc20OneTransferTx func oneTransfer tx error: %s", err)
return nil, err
}
log.Info("tokenTransfer:", oneTransferTx.Hash())
return oneTransferTx, nil
}
func (trade *OneErc20Trade) Erc20OneTransferFromTx(tranOpts *bind.TransactOpts, tokenTransfer *contractToken20.OneTokenTransfer) (*types.Transaction, error) {
tokenTransferFromTx, err := tokenTransfer.OneTransferFrom(tranOpts, trade.TokenTransferAddr, trade.Erc20Addr, trade.FromAddr, trade.ToAddr[0], trade.Amount)
if err != nil {
log.Errorf("Constructor TokenTransferFrom tx error: %s", err)
return nil, err
}
log.Info("tokenTransferFromTx:", tokenTransferFromTx.Hash())
return tokenTransferFromTx, nil
}
package contractErc20
import (
contractToken20 "contract-case/contract_abi/erc20_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type Erc20Trade struct {
Erc20Addr common.Address
FromAddr common.Address
ToAddr []common.Address
Amount *big.Int
}
func (trade *Erc20Trade) Erc20TransferSignTx(tranOpts *bind.TransactOpts, tokenTransfer *contractToken20.TokenTransfer) (*types.Transaction, error) {
tokenTransferTx, err := tokenTransfer.TokenTransfer(tranOpts, trade.Erc20Addr, trade.ToAddr, trade.Amount)
if err != nil {
log.Errorf("Constructor tokenTransfer tx error: %s", err)
return nil, err
}
log.Info("tokenTransfer:", tokenTransferTx.Hash())
return tokenTransferTx, nil
}
func (trade *Erc20Trade) Erc20TransferFromSignTx(tranOpts *bind.TransactOpts, tokenTransfer *contractToken20.TokenTransfer) (*types.Transaction, error) {
tokenTransferFromTx, err := tokenTransfer.TokenTransferFrom(tranOpts, trade.Erc20Addr, trade.FromAddr, trade.ToAddr[0], trade.Amount)
if err != nil {
log.Errorf("Constructor TokenTransferFrom tx error: %s", err)
return nil, err
}
log.Info("tokenTransferFromTx:", tokenTransferFromTx.Hash())
return tokenTransferFromTx, nil
}
package contractErc20
import (
contractToken20 "contract-case/contract_abi/erc20_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type TwoErc20Trade struct {
OneTokenTransferAddr common.Address
TokenTransfer common.Address
Erc20Addr common.Address
FromAddr common.Address
ToAddr []common.Address
Amount *big.Int
}
func (trade *TwoErc20Trade) Erc20TwoTransferSignTx(tranOpts *bind.TransactOpts, tokenTransfer *contractToken20.TwoTokenTransfer) (*types.Transaction, error) {
tokenTransferTx, err := tokenTransfer.TwoTransfer(tranOpts, trade.OneTokenTransferAddr, trade.TokenTransfer, trade.Erc20Addr, trade.ToAddr, trade.Amount)
if err != nil {
log.Errorf("Erc20TwoTransferSignTx func twoTransfer tx error: %s", err)
return nil, err
}
log.Info("tokenTransfer:", tokenTransferTx.Hash())
return tokenTransferTx, nil
}
func (trade *TwoErc20Trade) Erc20TwoTransferFromSignTx(tranOpts *bind.TransactOpts, tokenTransfer *contractToken20.TwoTokenTransfer) (*types.Transaction, error) {
twoTransferFromTx, err := tokenTransfer.TwoTransferFrom(tranOpts, trade.OneTokenTransferAddr, trade.TokenTransfer, trade.Erc20Addr, trade.FromAddr, trade.ToAddr[0], trade.Amount)
if err != nil {
log.Errorf("Erc20TwoTransferFromSignTx func twoTransferFrom tx error: %s", err)
return nil, err
}
log.Info("twoTransferFromTx:", twoTransferFromTx.Hash())
return twoTransferFromTx, nil
}
package contractErc721
import (
erc721 "contract-case/contract_abi/erc721_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type Erc721Trade struct {
Erc721Addr common.Address
FromAddr common.Address
ToAddr common.Address
TokenId *big.Int
}
func (trade *Erc721Trade) Erc721TransferFromSignTx(tranOpts *bind.TransactOpts, transfer *erc721.NftTokenTransfer) (*types.Transaction, error) {
transferFromTx, err := transfer.TransferFrom(tranOpts, trade.Erc721Addr, trade.FromAddr, trade.ToAddr, trade.TokenId)
if err != nil {
log.Errorf("Erc721TransferFromSignTx func TransferFrom tx error: %s", err)
return nil, err
}
log.Info("transferFromTx:", transferFromTx.Hash())
return transferFromTx, nil
}
package contractErc721
import (
erc721 "contract-case/contract_abi/erc721_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type OneErc721Trade struct {
NftTokenTransferAddr common.Address
Erc721Addr common.Address
FromAddr common.Address
ToAddr common.Address
TokenId *big.Int
}
func (trade *OneErc721Trade) Erc721OneTransferFromSignTx(tranOpts *bind.TransactOpts, transfer *erc721.OneNftTokenTransfer) (*types.Transaction, error) {
transferFromTx, err := transfer.OneTransferFrom(tranOpts, trade.NftTokenTransferAddr, trade.Erc721Addr, trade.FromAddr, trade.ToAddr, trade.TokenId)
if err != nil {
log.Errorf("Erc721OneTransferFromSignTx func OneTransferFrom tx error: %s", err)
return nil, err
}
log.Info("transferFromTx:", transferFromTx.Hash())
return transferFromTx, nil
}
package contractErc721
import (
erc721 "contract-case/contract_abi/erc721_transfer/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type TwoErc721Trade struct {
OneErc721TransferAddr common.Address
NftTokenTransferAddr common.Address
Erc721Addr common.Address
FromAddr common.Address
ToAddr common.Address
TokenId *big.Int
}
func (trade *TwoErc721Trade) Erc721TwoTransferFromSignTx(tranOpts *bind.TransactOpts, transfer erc721.TwoNftTokenTransfer) (*types.Transaction, error) {
oneTransferFromTx, err := transfer.OneTransferFrom(tranOpts, trade.OneErc721TransferAddr, trade.NftTokenTransferAddr, trade.Erc721Addr, trade.FromAddr, trade.ToAddr, trade.TokenId)
if err != nil {
log.Errorf("Erc721TwoTransferFromSignTx func OneTransferFrom tx error: %s", err)
return nil, err
}
log.Info("oneTransferFromTx:", oneTransferFromTx.Hash())
return oneTransferFromTx, nil
}
package readWrite
import (
contractReadWrite "contract-case/contract_abi/read_write/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type OneReadWriteTrade struct {
ReadWriteContract common.Address
KeyParam *big.Int
ValueParam *big.Int
StringParam string
UintParam *big.Int
ValueArrParam []*big.Int
StringArrParam []string
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxPushVarMapArray(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
pushVarMapArrayTx, err := transfer.OnePushVarMapArray(tranOpts, trade.ReadWriteContract, trade.KeyParam, trade.ValueParam)
if err != nil {
log.Errorf("OneReadWriteSignTxPushVarMapArray func pushVarMapArrayTx tx error: %s", err)
return nil, err
}
log.Info("pushVarMapArrayTx:", pushVarMapArrayTx.Hash())
return pushVarMapArrayTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxPushVarStringArray(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
pushVarStringArrayTx, err := transfer.OnePushVarStringArray(tranOpts, trade.ReadWriteContract, trade.StringParam)
if err != nil {
log.Errorf("OneReadWriteSignTxPushVarStringArray func pushVarStringArrayTx tx error: %s", err)
return nil, err
}
log.Info("pushVarStringArrayTx:", pushVarStringArrayTx.Hash())
return pushVarStringArrayTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxPushVarUintArray(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
pushVarUintArrayTx, err := transfer.OnePushVarUintArray(tranOpts, trade.ReadWriteContract, trade.UintParam)
if err != nil {
log.Errorf("OneReadWriteSignTxPushVarUintArray func PushVarUintArray tx error: %s", err)
return nil, err
}
log.Info("pushVarUintArrayTx:", pushVarUintArrayTx.Hash())
return pushVarUintArrayTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxSetVarString(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
setVarStringTx, err := transfer.OneSetVarString(tranOpts, trade.ReadWriteContract, trade.StringParam)
if err != nil {
log.Errorf("OneReadWriteSignTxSetVarString func SetVarString tx error: %s", err)
return nil, err
}
log.Info("setVarStringTx:", setVarStringTx.Hash())
return setVarStringTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxSetVarMap(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
SetVarMapTx, err := transfer.OneSetVarMap(tranOpts, trade.ReadWriteContract, trade.KeyParam, trade.ValueParam)
if err != nil {
log.Errorf("OneReadWriteSignTxSetVarMap func SetVarMap tx error: %s", err)
return nil, err
}
log.Info("pushVarMapArrayTx:", SetVarMapTx.Hash())
return SetVarMapTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxSetVarMapArray(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
SetVarMapArrayTx, err := transfer.OneSetVarMapArray(tranOpts, trade.ReadWriteContract, trade.KeyParam, trade.ValueArrParam)
if err != nil {
log.Errorf("OneReadWriteSignTxSetVarMapArray func SetVarMapArray tx error: %s", err)
return nil, err
}
log.Info("SetVarMapArrayTx:", SetVarMapArrayTx.Hash())
return SetVarMapArrayTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxSetVarUint256(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
setVarUint256Tx, err := transfer.OneSetVarUint256(tranOpts, trade.ReadWriteContract, trade.UintParam)
if err != nil {
log.Errorf("OneReadWriteSignTxSetVarUint256 func SetVarUint256 tx error: %s", err)
return nil, err
}
log.Info("setVarUint256Tx:", setVarUint256Tx.Hash())
return setVarUint256Tx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxSetVarStringArray(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
SetVarStringArrayTx, err := transfer.OneSetVarStringArray(tranOpts, trade.ReadWriteContract, trade.StringArrParam)
if err != nil {
log.Errorf("OneReadWriteSignTxSetVarStringArray func SetVarStringArray tx error: %s", err)
return nil, err
}
log.Info("SetVarStringArrayTx:", SetVarStringArrayTx.Hash())
return SetVarStringArrayTx, nil
}
func (trade *OneReadWriteTrade) OneReadWriteSignTxSetVarUintArray(tranOpts *bind.TransactOpts, transfer contractReadWrite.OneReadWriteVar) (*types.Transaction, error) {
SetVarUintArrayTx, err := transfer.OneSetVarUintArray(tranOpts, trade.ReadWriteContract, trade.ValueArrParam)
if err != nil {
log.Errorf("OneReadWriteSignTxSetVarUintArray func SetVarUintArray tx error: %s", err)
return nil, err
}
log.Info("SetVarUintArrayTx:", SetVarUintArrayTx.Hash())
return SetVarUintArrayTx, nil
}
package readWrite
import (
contractReadWrite "contract-case/contract_abi/read_write/compile"
"contract-case/log"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
type ReadWriteTrade struct {
KeyParam *big.Int
ValueParam *big.Int
StringParam string
UintParam *big.Int
ValueArrParam []*big.Int
StringArrParam []string
}
func (trade *ReadWriteTrade) ReadWriteSignTxPushVarMapArray(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
pushVarMapArrayTx, err := transfer.PushVarMapArray(tranOpts, trade.KeyParam, trade.ValueParam)
if err != nil {
log.Errorf("ReadWriteSignTxPushVarMapArray func pushVarMapArrayTx tx error: %s", err)
return nil, err
}
log.Info("pushVarMapArrayTx:", pushVarMapArrayTx.Hash())
return pushVarMapArrayTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxPushVarStringArray(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
pushVarStringArrayTx, err := transfer.PushVarStringArray(tranOpts, trade.StringParam)
if err != nil {
log.Errorf("ReadWriteSignTxPushVarStringArray func pushVarStringArrayTx tx error: %s", err)
return nil, err
}
log.Info("pushVarStringArrayTx:", pushVarStringArrayTx.Hash())
return pushVarStringArrayTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxPushVarUintArray(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
pushVarUintArrayTx, err := transfer.PushVarUintArray(tranOpts, trade.UintParam)
if err != nil {
log.Errorf("ReadWriteSignTxPushVarUintArray func PushVarUintArray tx error: %s", err)
return nil, err
}
log.Info("pushVarUintArrayTx:", pushVarUintArrayTx.Hash())
return pushVarUintArrayTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxSetVarString(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
setVarStringTx, err := transfer.SetVarString(tranOpts, trade.StringParam)
if err != nil {
log.Errorf("ReadWriteSignTxSetVarString func SetVarString tx error: %s", err)
return nil, err
}
log.Info("setVarStringTx:", setVarStringTx.Hash())
return setVarStringTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxSetVarMap(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
SetVarMapTx, err := transfer.SetVarMap(tranOpts, trade.KeyParam, trade.ValueParam)
if err != nil {
log.Errorf("ReadWriteSignTxSetVarMap func SetVarMap tx error: %s", err)
return nil, err
}
log.Info("pushVarMapArrayTx:", SetVarMapTx.Hash())
return SetVarMapTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxSetVarMapArray(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
SetVarMapArrayTx, err := transfer.SetVarMapArray(tranOpts, trade.KeyParam, trade.ValueArrParam)
if err != nil {
log.Errorf("ReadWriteSignTxSetVarMapArray func SetVarMapArray tx error: %s", err)
return nil, err
}
log.Info("SetVarMapArrayTx:", SetVarMapArrayTx.Hash())
return SetVarMapArrayTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxSetVarUint256(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
setVarUint256Tx, err := transfer.SetVarUint256(tranOpts, trade.UintParam)
if err != nil {
log.Errorf("ReadWriteSignTxSetVarUint256 func SetVarUint256 tx error: %s", err)
return nil, err
}
log.Info("setVarUint256Tx:", setVarUint256Tx.Hash())
return setVarUint256Tx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxSetVarStringArray(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
SetVarStringArrayTx, err := transfer.SetVarStringArray(tranOpts, trade.StringArrParam)
if err != nil {
log.Errorf("ReadWriteSignTxSetVarStringArray func SetVarStringArray tx error: %s", err)
return nil, err
}
log.Info("SetVarStringArrayTx:", SetVarStringArrayTx.Hash())
return SetVarStringArrayTx, nil
}
func (trade *ReadWriteTrade) ReadWriteSignTxSetVarUintArray(tranOpts *bind.TransactOpts, transfer *contractReadWrite.ReadWriteVar) (*types.Transaction, error) {
SetVarUintArrayTx, err := transfer.SetVarUintArray(tranOpts, trade.ValueArrParam)
if err != nil {
log.Errorf("ReadWriteSignTxSetVarUintArray func SetVarUintArray tx error: %s", err)
return nil, err
}
log.Info("SetVarUintArrayTx:", SetVarUintArrayTx.Hash())
return SetVarUintArrayTx, nil
}
[{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"chainCoinAddr","type":"address"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"chainCoinAddr","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b50610461806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631805040514610030575b600080fd5b61004a600480360381019061004591906102bf565b61004c565b005b8273ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b81526004016100879291906103fb565b600060405180830381600087803b1580156100a157600080fd5b505af11580156100b5573d6000803e3d6000fd5b50505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100fd826100d2565b9050919050565b61010d816100f2565b811461011857600080fd5b50565b60008135905061012a81610104565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61017e82610135565b810181811067ffffffffffffffff8211171561019d5761019c610146565b5b80604052505050565b60006101b06100be565b90506101bc8282610175565b919050565b600067ffffffffffffffff8211156101dc576101db610146565b5b602082029050602081019050919050565b600080fd5b6000610205610200846101c1565b6101a6565b90508083825260208201905060208402830185811115610228576102276101ed565b5b835b81811015610251578061023d888261011b565b84526020840193505060208101905061022a565b5050509392505050565b600082601f8301126102705761026f610130565b5b81356102808482602086016101f2565b91505092915050565b6000819050919050565b61029c81610289565b81146102a757600080fd5b50565b6000813590506102b981610293565b92915050565b6000806000606084860312156102d8576102d76100c8565b5b60006102e68682870161011b565b935050602084013567ffffffffffffffff811115610307576103066100cd565b5b6103138682870161025b565b9250506040610324868287016102aa565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610363816100f2565b82525050565b6000610375838361035a565b60208301905092915050565b6000602082019050919050565b60006103998261032e565b6103a38185610339565b93506103ae8361034a565b8060005b838110156103df5781516103c68882610369565b97506103d183610381565b9250506001810190506103b2565b5085935050505092915050565b6103f581610289565b82525050565b60006040820190508181036000830152610415818561038e565b905061042460208301846103ec565b939250505056fea2646970667358221220a9ef4ef1aff041711f36e690b13f99c9fbf231c1d9181db88e74d68958a0eecc64736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"oneChainCoinAddr","type":"address"},{"internalType":"address","name":"chainCoinAddr","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"twoTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b50610495806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80639cf3ac7614610030575b600080fd5b61004a600480360381019061004591906102c2565b61004c565b005b8373ffffffffffffffffffffffffffffffffffffffff1663180504058484846040518463ffffffff1660e01b815260040161008993929190610421565b600060405180830381600087803b1580156100a357600080fd5b505af11580156100b7573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610100826100d5565b9050919050565b610110816100f5565b811461011b57600080fd5b50565b60008135905061012d81610107565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61018182610138565b810181811067ffffffffffffffff821117156101a05761019f610149565b5b80604052505050565b60006101b36100c1565b90506101bf8282610178565b919050565b600067ffffffffffffffff8211156101df576101de610149565b5b602082029050602081019050919050565b600080fd5b6000610208610203846101c4565b6101a9565b9050808382526020820190506020840283018581111561022b5761022a6101f0565b5b835b818110156102545780610240888261011e565b84526020840193505060208101905061022d565b5050509392505050565b600082601f83011261027357610272610133565b5b81356102838482602086016101f5565b91505092915050565b6000819050919050565b61029f8161028c565b81146102aa57600080fd5b50565b6000813590506102bc81610296565b92915050565b600080600080608085870312156102dc576102db6100cb565b5b60006102ea8782880161011e565b94505060206102fb8782880161011e565b935050604085013567ffffffffffffffff81111561031c5761031b6100d0565b5b6103288782880161025e565b9250506060610339878288016102ad565b91505092959194509250565b61034e816100f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610389816100f5565b82525050565b600061039b8383610380565b60208301905092915050565b6000602082019050919050565b60006103bf82610354565b6103c9818561035f565b93506103d483610370565b8060005b838110156104055781516103ec888261038f565b97506103f7836103a7565b9250506001810190506103d8565b5085935050505092915050565b61041b8161028c565b82525050565b60006060820190506104366000830186610345565b818103602083015261044881856103b4565b90506104576040830184610412565b94935050505056fea264697066735822122073e237c88157442f58c1369fe5ad7816641b5d9facacc7dad174b9bc3aaa045564736f6c63430008130033
\ No newline at end of file
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractCoin
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// ChainCoinTransferMetaData contains all meta data concerning the ChainCoinTransfer contract.
var ChainCoinTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"toArr\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
Bin: "0x608060405234801561001057600080fd5b50610415806100206000396000f3fe6080604052600436106100225760003560e01c80631939c1ff1461002e57610029565b3661002957005b600080fd5b34801561003a57600080fd5b50610055600480360381019061005091906102dd565b610057565b005b60005b82518110156100d75782818151811061007657610075610339565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156100c3573d6000803e3d6000fd5b5080806100cf90610397565b91505061005a565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61013e826100f5565b810181811067ffffffffffffffff8211171561015d5761015c610106565b5b80604052505050565b60006101706100dc565b905061017c8282610135565b919050565b600067ffffffffffffffff82111561019c5761019b610106565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101dd826101b2565b9050919050565b6101ed816101d2565b81146101f857600080fd5b50565b60008135905061020a816101e4565b92915050565b600061022361021e84610181565b610166565b90508083825260208201905060208402830185811115610246576102456101ad565b5b835b8181101561026f578061025b88826101fb565b845260208401935050602081019050610248565b5050509392505050565b600082601f83011261028e5761028d6100f0565b5b813561029e848260208601610210565b91505092915050565b6000819050919050565b6102ba816102a7565b81146102c557600080fd5b50565b6000813590506102d7816102b1565b92915050565b600080604083850312156102f4576102f36100e6565b5b600083013567ffffffffffffffff811115610312576103116100eb565b5b61031e85828601610279565b925050602061032f858286016102c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006103a2826102a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103d4576103d3610368565b5b60018201905091905056fea264697066735822122045edd05dbad485d4020b3b74545aef882f3d0b2eabe403598790641c8ded855164736f6c63430008130033",
}
// ChainCoinTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use ChainCoinTransferMetaData.ABI instead.
var ChainCoinTransferABI = ChainCoinTransferMetaData.ABI
// ChainCoinTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use ChainCoinTransferMetaData.Bin instead.
var ChainCoinTransferBin = ChainCoinTransferMetaData.Bin
// DeployChainCoinTransfer deploys a new Ethereum contract, binding an instance of ChainCoinTransfer to it.
func DeployChainCoinTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ChainCoinTransfer, error) {
parsed, err := ChainCoinTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ChainCoinTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &ChainCoinTransfer{ChainCoinTransferCaller: ChainCoinTransferCaller{contract: contract}, ChainCoinTransferTransactor: ChainCoinTransferTransactor{contract: contract}, ChainCoinTransferFilterer: ChainCoinTransferFilterer{contract: contract}}, nil
}
// ChainCoinTransfer is an auto generated Go binding around an Ethereum contract.
type ChainCoinTransfer struct {
ChainCoinTransferCaller // Read-only binding to the contract
ChainCoinTransferTransactor // Write-only binding to the contract
ChainCoinTransferFilterer // Log filterer for contract events
}
// ChainCoinTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type ChainCoinTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ChainCoinTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ChainCoinTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ChainCoinTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ChainCoinTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ChainCoinTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ChainCoinTransferSession struct {
Contract *ChainCoinTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ChainCoinTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ChainCoinTransferCallerSession struct {
Contract *ChainCoinTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// ChainCoinTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ChainCoinTransferTransactorSession struct {
Contract *ChainCoinTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ChainCoinTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type ChainCoinTransferRaw struct {
Contract *ChainCoinTransfer // Generic contract binding to access the raw methods on
}
// ChainCoinTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ChainCoinTransferCallerRaw struct {
Contract *ChainCoinTransferCaller // Generic read-only contract binding to access the raw methods on
}
// ChainCoinTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ChainCoinTransferTransactorRaw struct {
Contract *ChainCoinTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewChainCoinTransfer creates a new instance of ChainCoinTransfer, bound to a specific deployed contract.
func NewChainCoinTransfer(address common.Address, backend bind.ContractBackend) (*ChainCoinTransfer, error) {
contract, err := bindChainCoinTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &ChainCoinTransfer{ChainCoinTransferCaller: ChainCoinTransferCaller{contract: contract}, ChainCoinTransferTransactor: ChainCoinTransferTransactor{contract: contract}, ChainCoinTransferFilterer: ChainCoinTransferFilterer{contract: contract}}, nil
}
// NewChainCoinTransferCaller creates a new read-only instance of ChainCoinTransfer, bound to a specific deployed contract.
func NewChainCoinTransferCaller(address common.Address, caller bind.ContractCaller) (*ChainCoinTransferCaller, error) {
contract, err := bindChainCoinTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &ChainCoinTransferCaller{contract: contract}, nil
}
// NewChainCoinTransferTransactor creates a new write-only instance of ChainCoinTransfer, bound to a specific deployed contract.
func NewChainCoinTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*ChainCoinTransferTransactor, error) {
contract, err := bindChainCoinTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &ChainCoinTransferTransactor{contract: contract}, nil
}
// NewChainCoinTransferFilterer creates a new log filterer instance of ChainCoinTransfer, bound to a specific deployed contract.
func NewChainCoinTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*ChainCoinTransferFilterer, error) {
contract, err := bindChainCoinTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &ChainCoinTransferFilterer{contract: contract}, nil
}
// bindChainCoinTransfer binds a generic wrapper to an already deployed contract.
func bindChainCoinTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(ChainCoinTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ChainCoinTransfer *ChainCoinTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ChainCoinTransfer.Contract.ChainCoinTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ChainCoinTransfer *ChainCoinTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.ChainCoinTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ChainCoinTransfer *ChainCoinTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.ChainCoinTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ChainCoinTransfer *ChainCoinTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ChainCoinTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ChainCoinTransfer *ChainCoinTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ChainCoinTransfer *ChainCoinTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.contract.Transact(opts, method, params...)
}
// Transfer is a paid mutator transaction binding the contract method 0x1939c1ff.
//
// Solidity: function transfer(address[] toArr, uint256 value) returns()
func (_ChainCoinTransfer *ChainCoinTransferTransactor) Transfer(opts *bind.TransactOpts, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _ChainCoinTransfer.contract.Transact(opts, "transfer", toArr, value)
}
// Transfer is a paid mutator transaction binding the contract method 0x1939c1ff.
//
// Solidity: function transfer(address[] toArr, uint256 value) returns()
func (_ChainCoinTransfer *ChainCoinTransferSession) Transfer(toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.Transfer(&_ChainCoinTransfer.TransactOpts, toArr, value)
}
// Transfer is a paid mutator transaction binding the contract method 0x1939c1ff.
//
// Solidity: function transfer(address[] toArr, uint256 value) returns()
func (_ChainCoinTransfer *ChainCoinTransferTransactorSession) Transfer(toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.Transfer(&_ChainCoinTransfer.TransactOpts, toArr, value)
}
// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_ChainCoinTransfer *ChainCoinTransferTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ChainCoinTransfer.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}
// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_ChainCoinTransfer *ChainCoinTransferSession) Receive() (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.Receive(&_ChainCoinTransfer.TransactOpts)
}
// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_ChainCoinTransfer *ChainCoinTransferTransactorSession) Receive() (*types.Transaction, error) {
return _ChainCoinTransfer.Contract.Receive(&_ChainCoinTransfer.TransactOpts)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractCoin
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// OneChainCoinTransferMetaData contains all meta data concerning the OneChainCoinTransfer contract.
var OneChainCoinTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"chainCoinAddr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"toArr\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"oneTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50610461806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631805040514610030575b600080fd5b61004a600480360381019061004591906102bf565b61004c565b005b8273ffffffffffffffffffffffffffffffffffffffff16631939c1ff83836040518363ffffffff1660e01b81526004016100879291906103fb565b600060405180830381600087803b1580156100a157600080fd5b505af11580156100b5573d6000803e3d6000fd5b50505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100fd826100d2565b9050919050565b61010d816100f2565b811461011857600080fd5b50565b60008135905061012a81610104565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61017e82610135565b810181811067ffffffffffffffff8211171561019d5761019c610146565b5b80604052505050565b60006101b06100be565b90506101bc8282610175565b919050565b600067ffffffffffffffff8211156101dc576101db610146565b5b602082029050602081019050919050565b600080fd5b6000610205610200846101c1565b6101a6565b90508083825260208201905060208402830185811115610228576102276101ed565b5b835b81811015610251578061023d888261011b565b84526020840193505060208101905061022a565b5050509392505050565b600082601f8301126102705761026f610130565b5b81356102808482602086016101f2565b91505092915050565b6000819050919050565b61029c81610289565b81146102a757600080fd5b50565b6000813590506102b981610293565b92915050565b6000806000606084860312156102d8576102d76100c8565b5b60006102e68682870161011b565b935050602084013567ffffffffffffffff811115610307576103066100cd565b5b6103138682870161025b565b9250506040610324868287016102aa565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610363816100f2565b82525050565b6000610375838361035a565b60208301905092915050565b6000602082019050919050565b60006103998261032e565b6103a38185610339565b93506103ae8361034a565b8060005b838110156103df5781516103c68882610369565b97506103d183610381565b9250506001810190506103b2565b5085935050505092915050565b6103f581610289565b82525050565b60006040820190508181036000830152610415818561038e565b905061042460208301846103ec565b939250505056fea2646970667358221220a9ef4ef1aff041711f36e690b13f99c9fbf231c1d9181db88e74d68958a0eecc64736f6c63430008130033",
}
// OneChainCoinTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use OneChainCoinTransferMetaData.ABI instead.
var OneChainCoinTransferABI = OneChainCoinTransferMetaData.ABI
// OneChainCoinTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use OneChainCoinTransferMetaData.Bin instead.
var OneChainCoinTransferBin = OneChainCoinTransferMetaData.Bin
// DeployOneChainCoinTransfer deploys a new Ethereum contract, binding an instance of OneChainCoinTransfer to it.
func DeployOneChainCoinTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OneChainCoinTransfer, error) {
parsed, err := OneChainCoinTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OneChainCoinTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &OneChainCoinTransfer{OneChainCoinTransferCaller: OneChainCoinTransferCaller{contract: contract}, OneChainCoinTransferTransactor: OneChainCoinTransferTransactor{contract: contract}, OneChainCoinTransferFilterer: OneChainCoinTransferFilterer{contract: contract}}, nil
}
// OneChainCoinTransfer is an auto generated Go binding around an Ethereum contract.
type OneChainCoinTransfer struct {
OneChainCoinTransferCaller // Read-only binding to the contract
OneChainCoinTransferTransactor // Write-only binding to the contract
OneChainCoinTransferFilterer // Log filterer for contract events
}
// OneChainCoinTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type OneChainCoinTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneChainCoinTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type OneChainCoinTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneChainCoinTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type OneChainCoinTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneChainCoinTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type OneChainCoinTransferSession struct {
Contract *OneChainCoinTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneChainCoinTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type OneChainCoinTransferCallerSession struct {
Contract *OneChainCoinTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// OneChainCoinTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type OneChainCoinTransferTransactorSession struct {
Contract *OneChainCoinTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneChainCoinTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type OneChainCoinTransferRaw struct {
Contract *OneChainCoinTransfer // Generic contract binding to access the raw methods on
}
// OneChainCoinTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type OneChainCoinTransferCallerRaw struct {
Contract *OneChainCoinTransferCaller // Generic read-only contract binding to access the raw methods on
}
// OneChainCoinTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type OneChainCoinTransferTransactorRaw struct {
Contract *OneChainCoinTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewOneChainCoinTransfer creates a new instance of OneChainCoinTransfer, bound to a specific deployed contract.
func NewOneChainCoinTransfer(address common.Address, backend bind.ContractBackend) (*OneChainCoinTransfer, error) {
contract, err := bindOneChainCoinTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &OneChainCoinTransfer{OneChainCoinTransferCaller: OneChainCoinTransferCaller{contract: contract}, OneChainCoinTransferTransactor: OneChainCoinTransferTransactor{contract: contract}, OneChainCoinTransferFilterer: OneChainCoinTransferFilterer{contract: contract}}, nil
}
// NewOneChainCoinTransferCaller creates a new read-only instance of OneChainCoinTransfer, bound to a specific deployed contract.
func NewOneChainCoinTransferCaller(address common.Address, caller bind.ContractCaller) (*OneChainCoinTransferCaller, error) {
contract, err := bindOneChainCoinTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &OneChainCoinTransferCaller{contract: contract}, nil
}
// NewOneChainCoinTransferTransactor creates a new write-only instance of OneChainCoinTransfer, bound to a specific deployed contract.
func NewOneChainCoinTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*OneChainCoinTransferTransactor, error) {
contract, err := bindOneChainCoinTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &OneChainCoinTransferTransactor{contract: contract}, nil
}
// NewOneChainCoinTransferFilterer creates a new log filterer instance of OneChainCoinTransfer, bound to a specific deployed contract.
func NewOneChainCoinTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*OneChainCoinTransferFilterer, error) {
contract, err := bindOneChainCoinTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &OneChainCoinTransferFilterer{contract: contract}, nil
}
// bindOneChainCoinTransfer binds a generic wrapper to an already deployed contract.
func bindOneChainCoinTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(OneChainCoinTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneChainCoinTransfer *OneChainCoinTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneChainCoinTransfer.Contract.OneChainCoinTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneChainCoinTransfer *OneChainCoinTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneChainCoinTransfer.Contract.OneChainCoinTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneChainCoinTransfer *OneChainCoinTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneChainCoinTransfer.Contract.OneChainCoinTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneChainCoinTransfer *OneChainCoinTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneChainCoinTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneChainCoinTransfer *OneChainCoinTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneChainCoinTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneChainCoinTransfer *OneChainCoinTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneChainCoinTransfer.Contract.contract.Transact(opts, method, params...)
}
// OneTransfer is a paid mutator transaction binding the contract method 0x18050405.
//
// Solidity: function oneTransfer(address chainCoinAddr, address[] toArr, uint256 value) returns()
func (_OneChainCoinTransfer *OneChainCoinTransferTransactor) OneTransfer(opts *bind.TransactOpts, chainCoinAddr common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _OneChainCoinTransfer.contract.Transact(opts, "oneTransfer", chainCoinAddr, toArr, value)
}
// OneTransfer is a paid mutator transaction binding the contract method 0x18050405.
//
// Solidity: function oneTransfer(address chainCoinAddr, address[] toArr, uint256 value) returns()
func (_OneChainCoinTransfer *OneChainCoinTransferSession) OneTransfer(chainCoinAddr common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _OneChainCoinTransfer.Contract.OneTransfer(&_OneChainCoinTransfer.TransactOpts, chainCoinAddr, toArr, value)
}
// OneTransfer is a paid mutator transaction binding the contract method 0x18050405.
//
// Solidity: function oneTransfer(address chainCoinAddr, address[] toArr, uint256 value) returns()
func (_OneChainCoinTransfer *OneChainCoinTransferTransactorSession) OneTransfer(chainCoinAddr common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _OneChainCoinTransfer.Contract.OneTransfer(&_OneChainCoinTransfer.TransactOpts, chainCoinAddr, toArr, value)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractCoin
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// TwoChainCoinTransferMetaData contains all meta data concerning the TwoChainCoinTransfer contract.
var TwoChainCoinTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oneChainCoinAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"chainCoinAddr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"toArr\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"twoTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50610495806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80639cf3ac7614610030575b600080fd5b61004a600480360381019061004591906102c2565b61004c565b005b8373ffffffffffffffffffffffffffffffffffffffff1663180504058484846040518463ffffffff1660e01b815260040161008993929190610421565b600060405180830381600087803b1580156100a357600080fd5b505af11580156100b7573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610100826100d5565b9050919050565b610110816100f5565b811461011b57600080fd5b50565b60008135905061012d81610107565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61018182610138565b810181811067ffffffffffffffff821117156101a05761019f610149565b5b80604052505050565b60006101b36100c1565b90506101bf8282610178565b919050565b600067ffffffffffffffff8211156101df576101de610149565b5b602082029050602081019050919050565b600080fd5b6000610208610203846101c4565b6101a9565b9050808382526020820190506020840283018581111561022b5761022a6101f0565b5b835b818110156102545780610240888261011e565b84526020840193505060208101905061022d565b5050509392505050565b600082601f83011261027357610272610133565b5b81356102838482602086016101f5565b91505092915050565b6000819050919050565b61029f8161028c565b81146102aa57600080fd5b50565b6000813590506102bc81610296565b92915050565b600080600080608085870312156102dc576102db6100cb565b5b60006102ea8782880161011e565b94505060206102fb8782880161011e565b935050604085013567ffffffffffffffff81111561031c5761031b6100d0565b5b6103288782880161025e565b9250506060610339878288016102ad565b91505092959194509250565b61034e816100f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610389816100f5565b82525050565b600061039b8383610380565b60208301905092915050565b6000602082019050919050565b60006103bf82610354565b6103c9818561035f565b93506103d483610370565b8060005b838110156104055781516103ec888261038f565b97506103f7836103a7565b9250506001810190506103d8565b5085935050505092915050565b61041b8161028c565b82525050565b60006060820190506104366000830186610345565b818103602083015261044881856103b4565b90506104576040830184610412565b94935050505056fea264697066735822122073e237c88157442f58c1369fe5ad7816641b5d9facacc7dad174b9bc3aaa045564736f6c63430008130033",
}
// TwoChainCoinTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use TwoChainCoinTransferMetaData.ABI instead.
var TwoChainCoinTransferABI = TwoChainCoinTransferMetaData.ABI
// TwoChainCoinTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use TwoChainCoinTransferMetaData.Bin instead.
var TwoChainCoinTransferBin = TwoChainCoinTransferMetaData.Bin
// DeployTwoChainCoinTransfer deploys a new Ethereum contract, binding an instance of TwoChainCoinTransfer to it.
func DeployTwoChainCoinTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TwoChainCoinTransfer, error) {
parsed, err := TwoChainCoinTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TwoChainCoinTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &TwoChainCoinTransfer{TwoChainCoinTransferCaller: TwoChainCoinTransferCaller{contract: contract}, TwoChainCoinTransferTransactor: TwoChainCoinTransferTransactor{contract: contract}, TwoChainCoinTransferFilterer: TwoChainCoinTransferFilterer{contract: contract}}, nil
}
// TwoChainCoinTransfer is an auto generated Go binding around an Ethereum contract.
type TwoChainCoinTransfer struct {
TwoChainCoinTransferCaller // Read-only binding to the contract
TwoChainCoinTransferTransactor // Write-only binding to the contract
TwoChainCoinTransferFilterer // Log filterer for contract events
}
// TwoChainCoinTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type TwoChainCoinTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoChainCoinTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type TwoChainCoinTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoChainCoinTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type TwoChainCoinTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoChainCoinTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TwoChainCoinTransferSession struct {
Contract *TwoChainCoinTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TwoChainCoinTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type TwoChainCoinTransferCallerSession struct {
Contract *TwoChainCoinTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// TwoChainCoinTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type TwoChainCoinTransferTransactorSession struct {
Contract *TwoChainCoinTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TwoChainCoinTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type TwoChainCoinTransferRaw struct {
Contract *TwoChainCoinTransfer // Generic contract binding to access the raw methods on
}
// TwoChainCoinTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type TwoChainCoinTransferCallerRaw struct {
Contract *TwoChainCoinTransferCaller // Generic read-only contract binding to access the raw methods on
}
// TwoChainCoinTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type TwoChainCoinTransferTransactorRaw struct {
Contract *TwoChainCoinTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewTwoChainCoinTransfer creates a new instance of TwoChainCoinTransfer, bound to a specific deployed contract.
func NewTwoChainCoinTransfer(address common.Address, backend bind.ContractBackend) (*TwoChainCoinTransfer, error) {
contract, err := bindTwoChainCoinTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &TwoChainCoinTransfer{TwoChainCoinTransferCaller: TwoChainCoinTransferCaller{contract: contract}, TwoChainCoinTransferTransactor: TwoChainCoinTransferTransactor{contract: contract}, TwoChainCoinTransferFilterer: TwoChainCoinTransferFilterer{contract: contract}}, nil
}
// NewTwoChainCoinTransferCaller creates a new read-only instance of TwoChainCoinTransfer, bound to a specific deployed contract.
func NewTwoChainCoinTransferCaller(address common.Address, caller bind.ContractCaller) (*TwoChainCoinTransferCaller, error) {
contract, err := bindTwoChainCoinTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &TwoChainCoinTransferCaller{contract: contract}, nil
}
// NewTwoChainCoinTransferTransactor creates a new write-only instance of TwoChainCoinTransfer, bound to a specific deployed contract.
func NewTwoChainCoinTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*TwoChainCoinTransferTransactor, error) {
contract, err := bindTwoChainCoinTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &TwoChainCoinTransferTransactor{contract: contract}, nil
}
// NewTwoChainCoinTransferFilterer creates a new log filterer instance of TwoChainCoinTransfer, bound to a specific deployed contract.
func NewTwoChainCoinTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*TwoChainCoinTransferFilterer, error) {
contract, err := bindTwoChainCoinTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &TwoChainCoinTransferFilterer{contract: contract}, nil
}
// bindTwoChainCoinTransfer binds a generic wrapper to an already deployed contract.
func bindTwoChainCoinTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(TwoChainCoinTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TwoChainCoinTransfer *TwoChainCoinTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TwoChainCoinTransfer.Contract.TwoChainCoinTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TwoChainCoinTransfer *TwoChainCoinTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TwoChainCoinTransfer.Contract.TwoChainCoinTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TwoChainCoinTransfer *TwoChainCoinTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TwoChainCoinTransfer.Contract.TwoChainCoinTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TwoChainCoinTransfer *TwoChainCoinTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TwoChainCoinTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TwoChainCoinTransfer *TwoChainCoinTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TwoChainCoinTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TwoChainCoinTransfer *TwoChainCoinTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TwoChainCoinTransfer.Contract.contract.Transact(opts, method, params...)
}
// TwoTransfer is a paid mutator transaction binding the contract method 0x9cf3ac76.
//
// Solidity: function twoTransfer(address oneChainCoinAddr, address chainCoinAddr, address[] toArr, uint256 value) returns()
func (_TwoChainCoinTransfer *TwoChainCoinTransferTransactor) TwoTransfer(opts *bind.TransactOpts, oneChainCoinAddr common.Address, chainCoinAddr common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _TwoChainCoinTransfer.contract.Transact(opts, "twoTransfer", oneChainCoinAddr, chainCoinAddr, toArr, value)
}
// TwoTransfer is a paid mutator transaction binding the contract method 0x9cf3ac76.
//
// Solidity: function twoTransfer(address oneChainCoinAddr, address chainCoinAddr, address[] toArr, uint256 value) returns()
func (_TwoChainCoinTransfer *TwoChainCoinTransferSession) TwoTransfer(oneChainCoinAddr common.Address, chainCoinAddr common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _TwoChainCoinTransfer.Contract.TwoTransfer(&_TwoChainCoinTransfer.TransactOpts, oneChainCoinAddr, chainCoinAddr, toArr, value)
}
// TwoTransfer is a paid mutator transaction binding the contract method 0x9cf3ac76.
//
// Solidity: function twoTransfer(address oneChainCoinAddr, address chainCoinAddr, address[] toArr, uint256 value) returns()
func (_TwoChainCoinTransfer *TwoChainCoinTransferTransactorSession) TwoTransfer(oneChainCoinAddr common.Address, chainCoinAddr common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _TwoChainCoinTransfer.Contract.TwoTransfer(&_TwoChainCoinTransfer.TransactOpts, oneChainCoinAddr, chainCoinAddr, toArr, value)
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
contract ChainCoinTransfer {
receive() external payable {}
function transfer(address[] memory toArr, uint256 value) external {
for (uint i = 0; i < toArr.length; i++) {
payable(toArr[i]).transfer(value);
}
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "../../interface/IChainCoinTransfer.sol";
contract OneChainCoinTransfer {
function oneTransfer(
address chainCoinAddr,
address[] memory toArr,
uint256 value
) external {
IChainCoinTransfer(chainCoinAddr).transfer(toArr, value);
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "../../interface/IOneChainCoinTransfer.sol";
contract TwoChainCoinTransfer {
function twoTransfer(
address oneChainCoinAddr,
address chainCoinAddr,
address[] memory toArr,
uint256 value
) external {
IOneChainCoinTransfer(oneChainCoinAddr).oneTransfer(
chainCoinAddr,
toArr,
value
);
}
}
60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122046cff3afd324baa9d02f4baa1fb29a5314647e4182dd1e829a66ea5e3a0d9cc964736f6c63430008130033
\ 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"}]
\ No newline at end of file
60806040523480156200001157600080fd5b5060405162001ede38038062001ede8339818101604052810190620000379190620002e2565b620000576200004b6200008360201b60201c565b6200008b60201b60201c565b8160049081620000689190620005b2565b5080600590816200007a9190620005b2565b50505062000699565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b8826200016d565b810181811067ffffffffffffffff82111715620001da57620001d96200017e565b5b80604052505050565b6000620001ef6200014f565b9050620001fd8282620001ad565b919050565b600067ffffffffffffffff82111562000220576200021f6200017e565b5b6200022b826200016d565b9050602081019050919050565b60005b83811015620002585780820151818401526020810190506200023b565b60008484015250505050565b60006200027b620002758462000202565b620001e3565b9050828152602081018484840111156200029a576200029962000168565b5b620002a784828562000238565b509392505050565b600082601f830112620002c757620002c662000163565b5b8151620002d984826020860162000264565b91505092915050565b60008060408385031215620002fc57620002fb62000159565b5b600083015167ffffffffffffffff8111156200031d576200031c6200015e565b5b6200032b85828601620002af565b925050602083015167ffffffffffffffff8111156200034f576200034e6200015e565b5b6200035d85828601620002af565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ba57607f821691505b602082108103620003d057620003cf62000372565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200043a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003fb565b620004468683620003fb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004936200048d62000487846200045e565b62000468565b6200045e565b9050919050565b6000819050919050565b620004af8362000472565b620004c7620004be826200049a565b84845462000408565b825550505050565b600090565b620004de620004cf565b620004eb818484620004a4565b505050565b5b81811015620005135762000507600082620004d4565b600181019050620004f1565b5050565b601f82111562000562576200052c81620003d6565b6200053784620003eb565b8101602085101562000547578190505b6200055f6200055685620003eb565b830182620004f0565b50505b505050565b600082821c905092915050565b6000620005876000198460080262000567565b1980831691505092915050565b6000620005a2838362000574565b9150826002028217905092915050565b620005bd8262000367565b67ffffffffffffffff811115620005d957620005d86200017e565b5b620005e58254620003a1565b620005f282828562000517565b600060209050601f8311600181146200062a576000841562000615578287015190505b62000621858262000594565b86555062000691565b601f1984166200063a86620003d6565b60005b8281101562000664578489015182556001820191506020850194506020810190506200063d565b8683101562000684578489015162000680601f89168262000574565b8355505b6001600288020188555050505b505050505050565b61183580620006a96000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d7146102b1578063a9059cbb146102e1578063dd62ed3e14610311578063f2fde38b1461034157610100565b806370a082311461023b578063715018a61461026b5780638da5cb5b1461027557806395d89b411461029357610100565b8063313ce567116100d3578063313ce567146101a157806339509351146101bf57806340c10f19146101ef57806352ec85291461020b57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61035d565b60405161011a9190610f7e565b60405180910390f35b61013d60048036038101906101389190611039565b6103ef565b60405161014a9190611094565b60405180910390f35b61015b610412565b60405161016891906110be565b60405180910390f35b61018b600480360381019061018691906110d9565b61041c565b6040516101989190611094565b60405180910390f35b6101a961044b565b6040516101b69190611148565b60405180910390f35b6101d960048036038101906101d49190611039565b610454565b6040516101e69190611094565b60405180910390f35b61020960048036038101906102049190611039565b61048b565b005b610225600480360381019061022091906110d9565b610499565b6040516102329190611094565b60405180910390f35b61025560048036038101906102509190611163565b6104b9565b60405161026291906110be565b60405180910390f35b610273610502565b005b61027d610516565b60405161028a919061119f565b60405180910390f35b61029b61053f565b6040516102a89190610f7e565b60405180910390f35b6102cb60048036038101906102c69190611039565b6105d1565b6040516102d89190611094565b60405180910390f35b6102fb60048036038101906102f69190611039565b610648565b6040516103089190611094565b60405180910390f35b61032b600480360381019061032691906111ba565b61066b565b60405161033891906110be565b60405180910390f35b61035b60048036038101906103569190611163565b6106f2565b005b60606004805461036c90611229565b80601f016020809104026020016040519081016040528092919081815260200182805461039890611229565b80156103e55780601f106103ba576101008083540402835291602001916103e5565b820191906000526020600020905b8154815290600101906020018083116103c857829003601f168201915b5050505050905090565b6000806103fa610775565b905061040781858561077d565b600191505092915050565b6000600354905090565b600080610427610775565b9050610434858285610946565b61043f8585856109d2565b60019150509392505050565b60006012905090565b60008061045f610775565b9050610480818585610471858961066b565b61047b9190611289565b61077d565b600191505092915050565b6104958282610c4b565b5050565b60006104a3610da2565b6104ae84848461077d565b600190509392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61050a610da2565b6105146000610e20565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461054e90611229565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90611229565b80156105c75780601f1061059c576101008083540402835291602001916105c7565b820191906000526020600020905b8154815290600101906020018083116105aa57829003601f168201915b5050505050905090565b6000806105dc610775565b905060006105ea828661066b565b90508381101561062f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106269061132f565b60405180910390fd5b61063c828686840361077d565b60019250505092915050565b600080610653610775565b90506106608185856109d2565b600191505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6106fa610da2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610760906113c1565b60405180910390fd5b61077281610e20565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e390611453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906114e5565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161093991906110be565b60405180910390a3505050565b6000610952848461066b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109cc57818110156109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590611551565b60405180910390fd5b6109cb848484840361077d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a38906115e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790611675565b60405180910390fd5b610abb838383610ee4565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990611707565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c3291906110be565b60405180910390a3610c45848484610ee9565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190611773565b60405180910390fd5b610cc660008383610ee4565b8060036000828254610cd89190611289565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d8a91906110be565b60405180910390a3610d9e60008383610ee9565b5050565b610daa610775565b73ffffffffffffffffffffffffffffffffffffffff16610dc8610516565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906117df565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f28578082015181840152602081019050610f0d565b60008484015250505050565b6000601f19601f8301169050919050565b6000610f5082610eee565b610f5a8185610ef9565b9350610f6a818560208601610f0a565b610f7381610f34565b840191505092915050565b60006020820190508181036000830152610f988184610f45565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fd082610fa5565b9050919050565b610fe081610fc5565b8114610feb57600080fd5b50565b600081359050610ffd81610fd7565b92915050565b6000819050919050565b61101681611003565b811461102157600080fd5b50565b6000813590506110338161100d565b92915050565b600080604083850312156110505761104f610fa0565b5b600061105e85828601610fee565b925050602061106f85828601611024565b9150509250929050565b60008115159050919050565b61108e81611079565b82525050565b60006020820190506110a96000830184611085565b92915050565b6110b881611003565b82525050565b60006020820190506110d360008301846110af565b92915050565b6000806000606084860312156110f2576110f1610fa0565b5b600061110086828701610fee565b935050602061111186828701610fee565b925050604061112286828701611024565b9150509250925092565b600060ff82169050919050565b6111428161112c565b82525050565b600060208201905061115d6000830184611139565b92915050565b60006020828403121561117957611178610fa0565b5b600061118784828501610fee565b91505092915050565b61119981610fc5565b82525050565b60006020820190506111b46000830184611190565b92915050565b600080604083850312156111d1576111d0610fa0565b5b60006111df85828601610fee565b92505060206111f085828601610fee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061124157607f821691505b602082108103611254576112536111fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061129482611003565b915061129f83611003565b92508282019050808211156112b7576112b661125a565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611319602583610ef9565b9150611324826112bd565b604082019050919050565b600060208201905081810360008301526113488161130c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006113ab602683610ef9565b91506113b68261134f565b604082019050919050565b600060208201905081810360008301526113da8161139e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061143d602483610ef9565b9150611448826113e1565b604082019050919050565b6000602082019050818103600083015261146c81611430565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006114cf602283610ef9565b91506114da82611473565b604082019050919050565b600060208201905081810360008301526114fe816114c2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061153b601d83610ef9565b915061154682611505565b602082019050919050565b6000602082019050818103600083015261156a8161152e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006115cd602583610ef9565b91506115d882611571565b604082019050919050565b600060208201905081810360008301526115fc816115c0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061165f602383610ef9565b915061166a82611603565b604082019050919050565b6000602082019050818103600083015261168e81611652565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006116f1602683610ef9565b91506116fc82611695565b604082019050919050565b60006020820190508181036000830152611720816116e4565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061175d601f83610ef9565b915061176882611727565b602082019050919050565b6000602082019050818103600083015261178c81611750565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006117c9602083610ef9565b91506117d482611793565b602082019050919050565b600060208201905081810360008301526117f8816117bc565b905091905056fea2646970667358221220bcd8ff4822f6ba3910d9a240f15e47ca3fdabbd60edf26e665e180ae7683cf9464736f6c63430008130033
\ No newline at end of file
[{"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":"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
[{"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":[],"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
[{"inputs":[{"internalType":"address","name":"tokenTransferAddr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"oneTokenTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenTransferAddr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"oneTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"to","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
[{"inputs":[{"internalType":"address","name":"tokenTransferAddr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"oneTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenTransferAddr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"oneTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b506105f4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063d39aee2b1461003b578063e2283c0314610057575b600080fd5b61005560048036038101906100509190610208565b610073565b005b610071600480360381019061006c91906103dc565b6100eb565b005b8473ffffffffffffffffffffffffffffffffffffffff1663f3913e69858585856040518563ffffffff1660e01b81526004016100b2949392919061047d565b600060405180830381600087803b1580156100cc57600080fd5b505af11580156100e0573d6000803e3d6000fd5b505050505050505050565b8373ffffffffffffffffffffffffffffffffffffffff1663c8ce6c788484846040518463ffffffff1660e01b815260040161012893929190610580565b600060405180830381600087803b15801561014257600080fd5b505af1158015610156573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061019f82610174565b9050919050565b6101af81610194565b81146101ba57600080fd5b50565b6000813590506101cc816101a6565b92915050565b6000819050919050565b6101e5816101d2565b81146101f057600080fd5b50565b600081359050610202816101dc565b92915050565b600080600080600060a086880312156102245761022361016a565b5b6000610232888289016101bd565b9550506020610243888289016101bd565b9450506040610254888289016101bd565b9350506060610265888289016101bd565b9250506080610276888289016101f3565b9150509295509295909350565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102d182610288565b810181811067ffffffffffffffff821117156102f0576102ef610299565b5b80604052505050565b6000610303610160565b905061030f82826102c8565b919050565b600067ffffffffffffffff82111561032f5761032e610299565b5b602082029050602081019050919050565b600080fd5b600061035861035384610314565b6102f9565b9050808382526020820190506020840283018581111561037b5761037a610340565b5b835b818110156103a4578061039088826101bd565b84526020840193505060208101905061037d565b5050509392505050565b600082601f8301126103c3576103c2610283565b5b81356103d3848260208601610345565b91505092915050565b600080600080608085870312156103f6576103f561016a565b5b6000610404878288016101bd565b9450506020610415878288016101bd565b935050604085013567ffffffffffffffff8111156104365761043561016f565b5b610442878288016103ae565b9250506060610453878288016101f3565b91505092959194509250565b61046881610194565b82525050565b610477816101d2565b82525050565b6000608082019050610492600083018761045f565b61049f602083018661045f565b6104ac604083018561045f565b6104b9606083018461046e565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6104f781610194565b82525050565b600061050983836104ee565b60208301905092915050565b6000602082019050919050565b600061052d826104c2565b61053781856104cd565b9350610542836104de565b8060005b8381101561057357815161055a88826104fd565b975061056583610515565b925050600181019050610546565b5085935050505092915050565b6000606082019050610595600083018661045f565b81810360208301526105a78185610522565b90506105b6604083018461046e565b94935050505056fea26469706673582212203258fa028722e747b8c8c1d701164299e665b417ab67521c6ca353c3fb2fb0cb64736f6c63430008130033
\ No newline at end of file
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f8c9582a434933d54a2b00861b82594280596b852cfa7efbeb6af0b3a0e1133d64736f6c63430008130033
\ 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"}]
\ No newline at end of file
608060405234801561001057600080fd5b50610c42806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063c8ce6c781461003b578063f3913e6914610057575b600080fd5b6100556004803603810190610050919061071e565b610073565b005b610071600480360381019061006c919061078d565b6100dd565b005b60005b82518110156100d7576100c4838281518110610095576100946107f4565b5b6020026020010151838673ffffffffffffffffffffffffffffffffffffffff166101919092919063ffffffff16565b80806100cf90610852565b915050610076565b50505050565b8373ffffffffffffffffffffffffffffffffffffffff166352ec85298484846040518463ffffffff1660e01b815260040161011a939291906108b8565b6020604051808303816000875af1158015610139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015d9190610927565b5061018b8383838773ffffffffffffffffffffffffffffffffffffffff16610217909392919063ffffffff16565b50505050565b6102128363a9059cbb60e01b84846040516024016101b0929190610954565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506102a0565b505050565b61029a846323b872dd60e01b858585604051602401610238939291906108b8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506102a0565b50505050565b6000610302826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103679092919063ffffffff16565b905060008151111561036257808060200190518101906103229190610927565b610361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035890610a00565b60405180910390fd5b5b505050565b6060610376848460008561037f565b90509392505050565b6060824710156103c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bb90610a92565b60405180910390fd5b6103cd85610493565b61040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390610afe565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516104359190610b8f565b60006040518083038185875af1925050503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b50915091506104878282866104b6565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156104c657829050610516565b6000835111156104d95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050d9190610bea565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061055c82610531565b9050919050565b61056c81610551565b811461057757600080fd5b50565b60008135905061058981610563565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6105dd82610594565b810181811067ffffffffffffffff821117156105fc576105fb6105a5565b5b80604052505050565b600061060f61051d565b905061061b82826105d4565b919050565b600067ffffffffffffffff82111561063b5761063a6105a5565b5b602082029050602081019050919050565b600080fd5b600061066461065f84610620565b610605565b905080838252602082019050602084028301858111156106875761068661064c565b5b835b818110156106b0578061069c888261057a565b845260208401935050602081019050610689565b5050509392505050565b600082601f8301126106cf576106ce61058f565b5b81356106df848260208601610651565b91505092915050565b6000819050919050565b6106fb816106e8565b811461070657600080fd5b50565b600081359050610718816106f2565b92915050565b60008060006060848603121561073757610736610527565b5b60006107458682870161057a565b935050602084013567ffffffffffffffff8111156107665761076561052c565b5b610772868287016106ba565b925050604061078386828701610709565b9150509250925092565b600080600080608085870312156107a7576107a6610527565b5b60006107b58782880161057a565b94505060206107c68782880161057a565b93505060406107d78782880161057a565b92505060606107e887828801610709565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061085d826106e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361088f5761088e610823565b5b600182019050919050565b6108a381610551565b82525050565b6108b2816106e8565b82525050565b60006060820190506108cd600083018661089a565b6108da602083018561089a565b6108e760408301846108a9565b949350505050565b60008115159050919050565b610904816108ef565b811461090f57600080fd5b50565b600081519050610921816108fb565b92915050565b60006020828403121561093d5761093c610527565b5b600061094b84828501610912565b91505092915050565b6000604082019050610969600083018561089a565b61097660208301846108a9565b9392505050565b600082825260208201905092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006109ea602a8361097d565b91506109f58261098e565b604082019050919050565b60006020820190508181036000830152610a19816109dd565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000610a7c60268361097d565b9150610a8782610a20565b604082019050919050565b60006020820190508181036000830152610aab81610a6f565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610ae8601d8361097d565b9150610af382610ab2565b602082019050919050565b60006020820190508181036000830152610b1781610adb565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015610b52578082015181840152602081019050610b37565b60008484015250505050565b6000610b6982610b1e565b610b738185610b29565b9350610b83818560208601610b34565b80840191505092915050565b6000610b9b8284610b5e565b915081905092915050565b600081519050919050565b6000610bbc82610ba6565b610bc6818561097d565b9350610bd6818560208601610b34565b610bdf81610594565b840191505092915050565b60006020820190508181036000830152610c048184610bb1565b90509291505056fea2646970667358221220664cb0bbaca7ee0cb22ed4a9acdac832af5e72b37def9b7ede648d25d7b661d664736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"oneTokenTransferAddr","type":"address"},{"internalType":"address","name":"tokenTransferAddr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"toArr","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"twoTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oneTokenTransferAddr","type":"address"},{"internalType":"address","name":"tokenTransferAddr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"twoTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b5061063c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806310d5e9721461003b578063814f5a5e14610057575b600080fd5b61005560048036038101906100509190610367565b610073565b005b610071600480360381019061006c91906103fe565b6100eb565b005b8473ffffffffffffffffffffffffffffffffffffffff1663e2283c03858585856040518563ffffffff1660e01b81526004016100b29493929190610567565b600060405180830381600087803b1580156100cc57600080fd5b505af11580156100e0573d6000803e3d6000fd5b505050505050505050565b8573ffffffffffffffffffffffffffffffffffffffff16636c8c52c286868686866040518663ffffffff1660e01b815260040161012c9594939291906105b3565b600060405180830381600087803b15801561014657600080fd5b505af115801561015a573d6000803e3d6000fd5b50505050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101a58261017a565b9050919050565b6101b58161019a565b81146101c057600080fd5b50565b6000813590506101d2816101ac565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610226826101dd565b810181811067ffffffffffffffff82111715610245576102446101ee565b5b80604052505050565b6000610258610166565b9050610264828261021d565b919050565b600067ffffffffffffffff821115610284576102836101ee565b5b602082029050602081019050919050565b600080fd5b60006102ad6102a884610269565b61024e565b905080838252602082019050602084028301858111156102d0576102cf610295565b5b835b818110156102f957806102e588826101c3565b8452602084019350506020810190506102d2565b5050509392505050565b600082601f830112610318576103176101d8565b5b813561032884826020860161029a565b91505092915050565b6000819050919050565b61034481610331565b811461034f57600080fd5b50565b6000813590506103618161033b565b92915050565b600080600080600060a0868803121561038357610382610170565b5b6000610391888289016101c3565b95505060206103a2888289016101c3565b94505060406103b3888289016101c3565b935050606086013567ffffffffffffffff8111156103d4576103d3610175565b5b6103e088828901610303565b92505060806103f188828901610352565b9150509295509295909350565b60008060008060008060c0878903121561041b5761041a610170565b5b600061042989828a016101c3565b965050602061043a89828a016101c3565b955050604061044b89828a016101c3565b945050606061045c89828a016101c3565b935050608061046d89828a016101c3565b92505060a061047e89828a01610352565b9150509295509295509295565b6104948161019a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6104cf8161019a565b82525050565b60006104e183836104c6565b60208301905092915050565b6000602082019050919050565b60006105058261049a565b61050f81856104a5565b935061051a836104b6565b8060005b8381101561054b57815161053288826104d5565b975061053d836104ed565b92505060018101905061051e565b5085935050505092915050565b61056181610331565b82525050565b600060808201905061057c600083018761048b565b610589602083018661048b565b818103604083015261059b81856104fa565b90506105aa6060830184610558565b95945050505050565b600060a0820190506105c8600083018861048b565b6105d5602083018761048b565b6105e2604083018661048b565b6105ef606083018561048b565b6105fc6080830184610558565b969550505050505056fea264697066735822122041efa911e2697c3e77cc8cbdfa9b32896fd410ae611d70a62e88cc0cdd6ffa5964736f6c63430008130033
\ No newline at end of file
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken20
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// ERC20MetaData contains all meta data concerning the ERC20 contract.
var ERC20MetaData = &bind.MetaData{
ABI: "[{\"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\"}]",
Bin: "0x60806040523480156200001157600080fd5b5060405162001ede38038062001ede8339818101604052810190620000379190620002e2565b620000576200004b6200008360201b60201c565b6200008b60201b60201c565b8160049081620000689190620005b2565b5080600590816200007a9190620005b2565b50505062000699565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b8826200016d565b810181811067ffffffffffffffff82111715620001da57620001d96200017e565b5b80604052505050565b6000620001ef6200014f565b9050620001fd8282620001ad565b919050565b600067ffffffffffffffff82111562000220576200021f6200017e565b5b6200022b826200016d565b9050602081019050919050565b60005b83811015620002585780820151818401526020810190506200023b565b60008484015250505050565b60006200027b620002758462000202565b620001e3565b9050828152602081018484840111156200029a576200029962000168565b5b620002a784828562000238565b509392505050565b600082601f830112620002c757620002c662000163565b5b8151620002d984826020860162000264565b91505092915050565b60008060408385031215620002fc57620002fb62000159565b5b600083015167ffffffffffffffff8111156200031d576200031c6200015e565b5b6200032b85828601620002af565b925050602083015167ffffffffffffffff8111156200034f576200034e6200015e565b5b6200035d85828601620002af565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ba57607f821691505b602082108103620003d057620003cf62000372565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200043a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003fb565b620004468683620003fb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004936200048d62000487846200045e565b62000468565b6200045e565b9050919050565b6000819050919050565b620004af8362000472565b620004c7620004be826200049a565b84845462000408565b825550505050565b600090565b620004de620004cf565b620004eb818484620004a4565b505050565b5b81811015620005135762000507600082620004d4565b600181019050620004f1565b5050565b601f82111562000562576200052c81620003d6565b6200053784620003eb565b8101602085101562000547578190505b6200055f6200055685620003eb565b830182620004f0565b50505b505050565b600082821c905092915050565b6000620005876000198460080262000567565b1980831691505092915050565b6000620005a2838362000574565b9150826002028217905092915050565b620005bd8262000367565b67ffffffffffffffff811115620005d957620005d86200017e565b5b620005e58254620003a1565b620005f282828562000517565b600060209050601f8311600181146200062a576000841562000615578287015190505b62000621858262000594565b86555062000691565b601f1984166200063a86620003d6565b60005b8281101562000664578489015182556001820191506020850194506020810190506200063d565b8683101562000684578489015162000680601f89168262000574565b8355505b6001600288020188555050505b505050505050565b61183580620006a96000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d7146102b1578063a9059cbb146102e1578063dd62ed3e14610311578063f2fde38b1461034157610100565b806370a082311461023b578063715018a61461026b5780638da5cb5b1461027557806395d89b411461029357610100565b8063313ce567116100d3578063313ce567146101a157806339509351146101bf57806340c10f19146101ef57806352ec85291461020b57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61035d565b60405161011a9190610f7e565b60405180910390f35b61013d60048036038101906101389190611039565b6103ef565b60405161014a9190611094565b60405180910390f35b61015b610412565b60405161016891906110be565b60405180910390f35b61018b600480360381019061018691906110d9565b61041c565b6040516101989190611094565b60405180910390f35b6101a961044b565b6040516101b69190611148565b60405180910390f35b6101d960048036038101906101d49190611039565b610454565b6040516101e69190611094565b60405180910390f35b61020960048036038101906102049190611039565b61048b565b005b610225600480360381019061022091906110d9565b610499565b6040516102329190611094565b60405180910390f35b61025560048036038101906102509190611163565b6104b9565b60405161026291906110be565b60405180910390f35b610273610502565b005b61027d610516565b60405161028a919061119f565b60405180910390f35b61029b61053f565b6040516102a89190610f7e565b60405180910390f35b6102cb60048036038101906102c69190611039565b6105d1565b6040516102d89190611094565b60405180910390f35b6102fb60048036038101906102f69190611039565b610648565b6040516103089190611094565b60405180910390f35b61032b600480360381019061032691906111ba565b61066b565b60405161033891906110be565b60405180910390f35b61035b60048036038101906103569190611163565b6106f2565b005b60606004805461036c90611229565b80601f016020809104026020016040519081016040528092919081815260200182805461039890611229565b80156103e55780601f106103ba576101008083540402835291602001916103e5565b820191906000526020600020905b8154815290600101906020018083116103c857829003601f168201915b5050505050905090565b6000806103fa610775565b905061040781858561077d565b600191505092915050565b6000600354905090565b600080610427610775565b9050610434858285610946565b61043f8585856109d2565b60019150509392505050565b60006012905090565b60008061045f610775565b9050610480818585610471858961066b565b61047b9190611289565b61077d565b600191505092915050565b6104958282610c4b565b5050565b60006104a3610da2565b6104ae84848461077d565b600190509392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61050a610da2565b6105146000610e20565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461054e90611229565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90611229565b80156105c75780601f1061059c576101008083540402835291602001916105c7565b820191906000526020600020905b8154815290600101906020018083116105aa57829003601f168201915b5050505050905090565b6000806105dc610775565b905060006105ea828661066b565b90508381101561062f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106269061132f565b60405180910390fd5b61063c828686840361077d565b60019250505092915050565b600080610653610775565b90506106608185856109d2565b600191505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6106fa610da2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610760906113c1565b60405180910390fd5b61077281610e20565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e390611453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906114e5565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161093991906110be565b60405180910390a3505050565b6000610952848461066b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109cc57818110156109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590611551565b60405180910390fd5b6109cb848484840361077d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a38906115e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790611675565b60405180910390fd5b610abb838383610ee4565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990611707565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c3291906110be565b60405180910390a3610c45848484610ee9565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190611773565b60405180910390fd5b610cc660008383610ee4565b8060036000828254610cd89190611289565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d8a91906110be565b60405180910390a3610d9e60008383610ee9565b5050565b610daa610775565b73ffffffffffffffffffffffffffffffffffffffff16610dc8610516565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906117df565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f28578082015181840152602081019050610f0d565b60008484015250505050565b6000601f19601f8301169050919050565b6000610f5082610eee565b610f5a8185610ef9565b9350610f6a818560208601610f0a565b610f7381610f34565b840191505092915050565b60006020820190508181036000830152610f988184610f45565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fd082610fa5565b9050919050565b610fe081610fc5565b8114610feb57600080fd5b50565b600081359050610ffd81610fd7565b92915050565b6000819050919050565b61101681611003565b811461102157600080fd5b50565b6000813590506110338161100d565b92915050565b600080604083850312156110505761104f610fa0565b5b600061105e85828601610fee565b925050602061106f85828601611024565b9150509250929050565b60008115159050919050565b61108e81611079565b82525050565b60006020820190506110a96000830184611085565b92915050565b6110b881611003565b82525050565b60006020820190506110d360008301846110af565b92915050565b6000806000606084860312156110f2576110f1610fa0565b5b600061110086828701610fee565b935050602061111186828701610fee565b925050604061112286828701611024565b9150509250925092565b600060ff82169050919050565b6111428161112c565b82525050565b600060208201905061115d6000830184611139565b92915050565b60006020828403121561117957611178610fa0565b5b600061118784828501610fee565b91505092915050565b61119981610fc5565b82525050565b60006020820190506111b46000830184611190565b92915050565b600080604083850312156111d1576111d0610fa0565b5b60006111df85828601610fee565b92505060206111f085828601610fee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061124157607f821691505b602082108103611254576112536111fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061129482611003565b915061129f83611003565b92508282019050808211156112b7576112b661125a565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611319602583610ef9565b9150611324826112bd565b604082019050919050565b600060208201905081810360008301526113488161130c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006113ab602683610ef9565b91506113b68261134f565b604082019050919050565b600060208201905081810360008301526113da8161139e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061143d602483610ef9565b9150611448826113e1565b604082019050919050565b6000602082019050818103600083015261146c81611430565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006114cf602283610ef9565b91506114da82611473565b604082019050919050565b600060208201905081810360008301526114fe816114c2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061153b601d83610ef9565b915061154682611505565b602082019050919050565b6000602082019050818103600083015261156a8161152e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006115cd602583610ef9565b91506115d882611571565b604082019050919050565b600060208201905081810360008301526115fc816115c0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061165f602383610ef9565b915061166a82611603565b604082019050919050565b6000602082019050818103600083015261168e81611652565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006116f1602683610ef9565b91506116fc82611695565b604082019050919050565b60006020820190508181036000830152611720816116e4565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061175d601f83610ef9565b915061176882611727565b602082019050919050565b6000602082019050818103600083015261178c81611750565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006117c9602083610ef9565b91506117d482611793565b602082019050919050565b600060208201905081810360008301526117f8816117bc565b905091905056fea2646970667358221220bcd8ff4822f6ba3910d9a240f15e47ca3fdabbd60edf26e665e180ae7683cf9464736f6c63430008130033",
}
// ERC20ABI is the input ABI used to generate the binding from.
// Deprecated: Use ERC20MetaData.ABI instead.
var ERC20ABI = ERC20MetaData.ABI
// ERC20Bin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use ERC20MetaData.Bin instead.
var ERC20Bin = ERC20MetaData.Bin
// DeployERC20 deploys a new Ethereum contract, binding an instance of ERC20 to it.
func DeployERC20(auth *bind.TransactOpts, backend bind.ContractBackend, name_ string, symbol_ string) (common.Address, *types.Transaction, *ERC20, error) {
parsed, err := ERC20MetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20Bin), backend, name_, symbol_)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &ERC20{ERC20Caller: ERC20Caller{contract: contract}, ERC20Transactor: ERC20Transactor{contract: contract}, ERC20Filterer: ERC20Filterer{contract: contract}}, nil
}
// ERC20 is an auto generated Go binding around an Ethereum contract.
type ERC20 struct {
ERC20Caller // Read-only binding to the contract
ERC20Transactor // Write-only binding to the contract
ERC20Filterer // Log filterer for contract events
}
// ERC20Caller is an auto generated read-only Go binding around an Ethereum contract.
type ERC20Caller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ERC20Transactor is an auto generated write-only Go binding around an Ethereum contract.
type ERC20Transactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ERC20Filterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ERC20Session is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ERC20Session struct {
Contract *ERC20 // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ERC20CallerSession struct {
Contract *ERC20Caller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// ERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ERC20TransactorSession struct {
Contract *ERC20Transactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ERC20Raw is an auto generated low-level Go binding around an Ethereum contract.
type ERC20Raw struct {
Contract *ERC20 // Generic contract binding to access the raw methods on
}
// ERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ERC20CallerRaw struct {
Contract *ERC20Caller // Generic read-only contract binding to access the raw methods on
}
// ERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ERC20TransactorRaw struct {
Contract *ERC20Transactor // Generic write-only contract binding to access the raw methods on
}
// NewERC20 creates a new instance of ERC20, bound to a specific deployed contract.
func NewERC20(address common.Address, backend bind.ContractBackend) (*ERC20, error) {
contract, err := bindERC20(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &ERC20{ERC20Caller: ERC20Caller{contract: contract}, ERC20Transactor: ERC20Transactor{contract: contract}, ERC20Filterer: ERC20Filterer{contract: contract}}, nil
}
// NewERC20Caller creates a new read-only instance of ERC20, bound to a specific deployed contract.
func NewERC20Caller(address common.Address, caller bind.ContractCaller) (*ERC20Caller, error) {
contract, err := bindERC20(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &ERC20Caller{contract: contract}, nil
}
// NewERC20Transactor creates a new write-only instance of ERC20, bound to a specific deployed contract.
func NewERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC20Transactor, error) {
contract, err := bindERC20(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &ERC20Transactor{contract: contract}, nil
}
// NewERC20Filterer creates a new log filterer instance of ERC20, bound to a specific deployed contract.
func NewERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC20Filterer, error) {
contract, err := bindERC20(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &ERC20Filterer{contract: contract}, nil
}
// bindERC20 binds a generic wrapper to an already deployed contract.
func bindERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(ERC20ABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ERC20 *ERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ERC20.Contract.ERC20Caller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ERC20 *ERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ERC20.Contract.ERC20Transactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ERC20 *ERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ERC20.Contract.ERC20Transactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ERC20 *ERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ERC20.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ERC20 *ERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ERC20.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ERC20 *ERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ERC20.Contract.contract.Transact(opts, method, params...)
}
// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_ERC20 *ERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "allowance", owner, spender)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_ERC20 *ERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
return _ERC20.Contract.Allowance(&_ERC20.CallOpts, owner, spender)
}
// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_ERC20 *ERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
return _ERC20.Contract.Allowance(&_ERC20.CallOpts, owner, spender)
}
// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_ERC20 *ERC20Caller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "balanceOf", account)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_ERC20 *ERC20Session) BalanceOf(account common.Address) (*big.Int, error) {
return _ERC20.Contract.BalanceOf(&_ERC20.CallOpts, account)
}
// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_ERC20 *ERC20CallerSession) BalanceOf(account common.Address) (*big.Int, error) {
return _ERC20.Contract.BalanceOf(&_ERC20.CallOpts, account)
}
// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() view returns(uint8)
func (_ERC20 *ERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "decimals")
if err != nil {
return *new(uint8), err
}
out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
return out0, err
}
// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() view returns(uint8)
func (_ERC20 *ERC20Session) Decimals() (uint8, error) {
return _ERC20.Contract.Decimals(&_ERC20.CallOpts)
}
// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() view returns(uint8)
func (_ERC20 *ERC20CallerSession) Decimals() (uint8, error) {
return _ERC20.Contract.Decimals(&_ERC20.CallOpts)
}
// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC20 *ERC20Caller) Name(opts *bind.CallOpts) (string, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "name")
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC20 *ERC20Session) Name() (string, error) {
return _ERC20.Contract.Name(&_ERC20.CallOpts)
}
// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC20 *ERC20CallerSession) Name() (string, error) {
return _ERC20.Contract.Name(&_ERC20.CallOpts)
}
// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_ERC20 *ERC20Caller) Owner(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "owner")
if err != nil {
return *new(common.Address), err
}
out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
return out0, err
}
// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_ERC20 *ERC20Session) Owner() (common.Address, error) {
return _ERC20.Contract.Owner(&_ERC20.CallOpts)
}
// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_ERC20 *ERC20CallerSession) Owner() (common.Address, error) {
return _ERC20.Contract.Owner(&_ERC20.CallOpts)
}
// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC20 *ERC20Caller) Symbol(opts *bind.CallOpts) (string, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "symbol")
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC20 *ERC20Session) Symbol() (string, error) {
return _ERC20.Contract.Symbol(&_ERC20.CallOpts)
}
// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC20 *ERC20CallerSession) Symbol() (string, error) {
return _ERC20.Contract.Symbol(&_ERC20.CallOpts)
}
// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ERC20 *ERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _ERC20.contract.Call(opts, &out, "totalSupply")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ERC20 *ERC20Session) TotalSupply() (*big.Int, error) {
return _ERC20.Contract.TotalSupply(&_ERC20.CallOpts)
}
// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ERC20 *ERC20CallerSession) TotalSupply() (*big.Int, error) {
return _ERC20.Contract.TotalSupply(&_ERC20.CallOpts)
}
// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_ERC20 *ERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "approve", spender, amount)
}
// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_ERC20 *ERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.Approve(&_ERC20.TransactOpts, spender, amount)
}
// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_ERC20 *ERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.Approve(&_ERC20.TransactOpts, spender, amount)
}
// ApproveFrom is a paid mutator transaction binding the contract method 0x52ec8529.
//
// Solidity: function approveFrom(address owner, address spender, uint256 amount) returns(bool)
func (_ERC20 *ERC20Transactor) ApproveFrom(opts *bind.TransactOpts, owner common.Address, spender common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "approveFrom", owner, spender, amount)
}
// ApproveFrom is a paid mutator transaction binding the contract method 0x52ec8529.
//
// Solidity: function approveFrom(address owner, address spender, uint256 amount) returns(bool)
func (_ERC20 *ERC20Session) ApproveFrom(owner common.Address, spender common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.ApproveFrom(&_ERC20.TransactOpts, owner, spender, amount)
}
// ApproveFrom is a paid mutator transaction binding the contract method 0x52ec8529.
//
// Solidity: function approveFrom(address owner, address spender, uint256 amount) returns(bool)
func (_ERC20 *ERC20TransactorSession) ApproveFrom(owner common.Address, spender common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.ApproveFrom(&_ERC20.TransactOpts, owner, spender, amount)
}
// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7.
//
// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool)
func (_ERC20 *ERC20Transactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue)
}
// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7.
//
// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool)
func (_ERC20 *ERC20Session) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.DecreaseAllowance(&_ERC20.TransactOpts, spender, subtractedValue)
}
// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7.
//
// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool)
func (_ERC20 *ERC20TransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.DecreaseAllowance(&_ERC20.TransactOpts, spender, subtractedValue)
}
// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351.
//
// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool)
func (_ERC20 *ERC20Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "increaseAllowance", spender, addedValue)
}
// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351.
//
// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool)
func (_ERC20 *ERC20Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.IncreaseAllowance(&_ERC20.TransactOpts, spender, addedValue)
}
// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351.
//
// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool)
func (_ERC20 *ERC20TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.IncreaseAllowance(&_ERC20.TransactOpts, spender, addedValue)
}
// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address account, uint256 amount) returns()
func (_ERC20 *ERC20Transactor) Mint(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "mint", account, amount)
}
// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address account, uint256 amount) returns()
func (_ERC20 *ERC20Session) Mint(account common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.Mint(&_ERC20.TransactOpts, account, amount)
}
// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address account, uint256 amount) returns()
func (_ERC20 *ERC20TransactorSession) Mint(account common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.Mint(&_ERC20.TransactOpts, account, amount)
}
// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_ERC20 *ERC20Transactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "renounceOwnership")
}
// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_ERC20 *ERC20Session) RenounceOwnership() (*types.Transaction, error) {
return _ERC20.Contract.RenounceOwnership(&_ERC20.TransactOpts)
}
// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_ERC20 *ERC20TransactorSession) RenounceOwnership() (*types.Transaction, error) {
return _ERC20.Contract.RenounceOwnership(&_ERC20.TransactOpts)
}
// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address to, uint256 amount) returns(bool)
func (_ERC20 *ERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "transfer", to, amount)
}
// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address to, uint256 amount) returns(bool)
func (_ERC20 *ERC20Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.Transfer(&_ERC20.TransactOpts, to, amount)
}
// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address to, uint256 amount) returns(bool)
func (_ERC20 *ERC20TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.Transfer(&_ERC20.TransactOpts, to, amount)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
func (_ERC20 *ERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "transferFrom", from, to, amount)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
func (_ERC20 *ERC20Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.TransferFrom(&_ERC20.TransactOpts, from, to, amount)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
func (_ERC20 *ERC20TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _ERC20.Contract.TransferFrom(&_ERC20.TransactOpts, from, to, amount)
}
// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_ERC20 *ERC20Transactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
return _ERC20.contract.Transact(opts, "transferOwnership", newOwner)
}
// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_ERC20 *ERC20Session) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
return _ERC20.Contract.TransferOwnership(&_ERC20.TransactOpts, newOwner)
}
// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_ERC20 *ERC20TransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
return _ERC20.Contract.TransferOwnership(&_ERC20.TransactOpts, newOwner)
}
// ERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC20 contract.
type ERC20ApprovalIterator struct {
Event *ERC20Approval // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data
logs chan types.Log // Log channel receiving the found contract events
sub ethereum.Subscription // Subscription for errors, completion and termination
done bool // Whether the subscription completed delivering logs
fail error // Occurred error to stop iteration
}
// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC20ApprovalIterator) Next() bool {
// If the iterator failed, stop iterating
if it.fail != nil {
return false
}
// If the iterator completed, deliver directly whatever's available
if it.done {
select {
case log := <-it.logs:
it.Event = new(ERC20Approval)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
default:
return false
}
}
// Iterator still in progress, wait for either a data or an error event
select {
case log := <-it.logs:
it.Event = new(ERC20Approval)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
case err := <-it.sub.Err():
it.done = true
it.fail = err
return it.Next()
}
}
// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC20ApprovalIterator) Error() error {
return it.fail
}
// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ERC20ApprovalIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
// ERC20Approval represents a Approval event raised by the ERC20 contract.
type ERC20Approval struct {
Owner common.Address
Spender common.Address
Value *big.Int
Raw types.Log // Blockchain specific contextual infos
}
// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_ERC20 *ERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ERC20ApprovalIterator, error) {
var ownerRule []interface{}
for _, ownerItem := range owner {
ownerRule = append(ownerRule, ownerItem)
}
var spenderRule []interface{}
for _, spenderItem := range spender {
spenderRule = append(spenderRule, spenderItem)
}
logs, sub, err := _ERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
if err != nil {
return nil, err
}
return &ERC20ApprovalIterator{contract: _ERC20.contract, event: "Approval", logs: logs, sub: sub}, nil
}
// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_ERC20 *ERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
var ownerRule []interface{}
for _, ownerItem := range owner {
ownerRule = append(ownerRule, ownerItem)
}
var spenderRule []interface{}
for _, spenderItem := range spender {
spenderRule = append(spenderRule, spenderItem)
}
logs, sub, err := _ERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
if err != nil {
return nil, err
}
return event.NewSubscription(func(quit <-chan struct{}) error {
defer sub.Unsubscribe()
for {
select {
case log := <-logs:
// New log arrived, parse the event and forward to the user
event := new(ERC20Approval)
if err := _ERC20.contract.UnpackLog(event, "Approval", log); err != nil {
return err
}
event.Raw = log
select {
case sink <- event:
case err := <-sub.Err():
return err
case <-quit:
return nil
}
case err := <-sub.Err():
return err
case <-quit:
return nil
}
}
}), nil
}
// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_ERC20 *ERC20Filterer) ParseApproval(log types.Log) (*ERC20Approval, error) {
event := new(ERC20Approval)
if err := _ERC20.contract.UnpackLog(event, "Approval", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
// ERC20OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ERC20 contract.
type ERC20OwnershipTransferredIterator struct {
Event *ERC20OwnershipTransferred // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data
logs chan types.Log // Log channel receiving the found contract events
sub ethereum.Subscription // Subscription for errors, completion and termination
done bool // Whether the subscription completed delivering logs
fail error // Occurred error to stop iteration
}
// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC20OwnershipTransferredIterator) Next() bool {
// If the iterator failed, stop iterating
if it.fail != nil {
return false
}
// If the iterator completed, deliver directly whatever's available
if it.done {
select {
case log := <-it.logs:
it.Event = new(ERC20OwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
default:
return false
}
}
// Iterator still in progress, wait for either a data or an error event
select {
case log := <-it.logs:
it.Event = new(ERC20OwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
case err := <-it.sub.Err():
it.done = true
it.fail = err
return it.Next()
}
}
// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC20OwnershipTransferredIterator) Error() error {
return it.fail
}
// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ERC20OwnershipTransferredIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
// ERC20OwnershipTransferred represents a OwnershipTransferred event raised by the ERC20 contract.
type ERC20OwnershipTransferred struct {
PreviousOwner common.Address
NewOwner common.Address
Raw types.Log // Blockchain specific contextual infos
}
// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_ERC20 *ERC20Filterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ERC20OwnershipTransferredIterator, error) {
var previousOwnerRule []interface{}
for _, previousOwnerItem := range previousOwner {
previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
}
var newOwnerRule []interface{}
for _, newOwnerItem := range newOwner {
newOwnerRule = append(newOwnerRule, newOwnerItem)
}
logs, sub, err := _ERC20.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
if err != nil {
return nil, err
}
return &ERC20OwnershipTransferredIterator{contract: _ERC20.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}
// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_ERC20 *ERC20Filterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ERC20OwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
var previousOwnerRule []interface{}
for _, previousOwnerItem := range previousOwner {
previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
}
var newOwnerRule []interface{}
for _, newOwnerItem := range newOwner {
newOwnerRule = append(newOwnerRule, newOwnerItem)
}
logs, sub, err := _ERC20.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
if err != nil {
return nil, err
}
return event.NewSubscription(func(quit <-chan struct{}) error {
defer sub.Unsubscribe()
for {
select {
case log := <-logs:
// New log arrived, parse the event and forward to the user
event := new(ERC20OwnershipTransferred)
if err := _ERC20.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return err
}
event.Raw = log
select {
case sink <- event:
case err := <-sub.Err():
return err
case <-quit:
return nil
}
case err := <-sub.Err():
return err
case <-quit:
return nil
}
}
}), nil
}
// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_ERC20 *ERC20Filterer) ParseOwnershipTransferred(log types.Log) (*ERC20OwnershipTransferred, error) {
event := new(ERC20OwnershipTransferred)
if err := _ERC20.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
// ERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC20 contract.
type ERC20TransferIterator struct {
Event *ERC20Transfer // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data
logs chan types.Log // Log channel receiving the found contract events
sub ethereum.Subscription // Subscription for errors, completion and termination
done bool // Whether the subscription completed delivering logs
fail error // Occurred error to stop iteration
}
// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC20TransferIterator) Next() bool {
// If the iterator failed, stop iterating
if it.fail != nil {
return false
}
// If the iterator completed, deliver directly whatever's available
if it.done {
select {
case log := <-it.logs:
it.Event = new(ERC20Transfer)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
default:
return false
}
}
// Iterator still in progress, wait for either a data or an error event
select {
case log := <-it.logs:
it.Event = new(ERC20Transfer)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
case err := <-it.sub.Err():
it.done = true
it.fail = err
return it.Next()
}
}
// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC20TransferIterator) Error() error {
return it.fail
}
// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ERC20TransferIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
// ERC20Transfer represents a Transfer event raised by the ERC20 contract.
type ERC20Transfer struct {
From common.Address
To common.Address
Value *big.Int
Raw types.Log // Blockchain specific contextual infos
}
// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_ERC20 *ERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ERC20TransferIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
fromRule = append(fromRule, fromItem)
}
var toRule []interface{}
for _, toItem := range to {
toRule = append(toRule, toItem)
}
logs, sub, err := _ERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
if err != nil {
return nil, err
}
return &ERC20TransferIterator{contract: _ERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil
}
// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_ERC20 *ERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
fromRule = append(fromRule, fromItem)
}
var toRule []interface{}
for _, toItem := range to {
toRule = append(toRule, toItem)
}
logs, sub, err := _ERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
if err != nil {
return nil, err
}
return event.NewSubscription(func(quit <-chan struct{}) error {
defer sub.Unsubscribe()
for {
select {
case log := <-logs:
// New log arrived, parse the event and forward to the user
event := new(ERC20Transfer)
if err := _ERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
return err
}
event.Raw = log
select {
case sink <- event:
case err := <-sub.Err():
return err
case <-quit:
return nil
}
case err := <-sub.Err():
return err
case <-quit:
return nil
}
}
}), nil
}
// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_ERC20 *ERC20Filterer) ParseTransfer(log types.Log) (*ERC20Transfer, error) {
event := new(ERC20Transfer)
if err := _ERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken20
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// OneTokenTransferMetaData contains all meta data concerning the OneTokenTransfer contract.
var OneTokenTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenTransferAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"toArr\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"oneTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenTransferAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"oneTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b506105f4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063d39aee2b1461003b578063e2283c0314610057575b600080fd5b61005560048036038101906100509190610208565b610073565b005b610071600480360381019061006c91906103dc565b6100eb565b005b8473ffffffffffffffffffffffffffffffffffffffff1663f3913e69858585856040518563ffffffff1660e01b81526004016100b2949392919061047d565b600060405180830381600087803b1580156100cc57600080fd5b505af11580156100e0573d6000803e3d6000fd5b505050505050505050565b8373ffffffffffffffffffffffffffffffffffffffff1663c8ce6c788484846040518463ffffffff1660e01b815260040161012893929190610580565b600060405180830381600087803b15801561014257600080fd5b505af1158015610156573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061019f82610174565b9050919050565b6101af81610194565b81146101ba57600080fd5b50565b6000813590506101cc816101a6565b92915050565b6000819050919050565b6101e5816101d2565b81146101f057600080fd5b50565b600081359050610202816101dc565b92915050565b600080600080600060a086880312156102245761022361016a565b5b6000610232888289016101bd565b9550506020610243888289016101bd565b9450506040610254888289016101bd565b9350506060610265888289016101bd565b9250506080610276888289016101f3565b9150509295509295909350565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102d182610288565b810181811067ffffffffffffffff821117156102f0576102ef610299565b5b80604052505050565b6000610303610160565b905061030f82826102c8565b919050565b600067ffffffffffffffff82111561032f5761032e610299565b5b602082029050602081019050919050565b600080fd5b600061035861035384610314565b6102f9565b9050808382526020820190506020840283018581111561037b5761037a610340565b5b835b818110156103a4578061039088826101bd565b84526020840193505060208101905061037d565b5050509392505050565b600082601f8301126103c3576103c2610283565b5b81356103d3848260208601610345565b91505092915050565b600080600080608085870312156103f6576103f561016a565b5b6000610404878288016101bd565b9450506020610415878288016101bd565b935050604085013567ffffffffffffffff8111156104365761043561016f565b5b610442878288016103ae565b9250506060610453878288016101f3565b91505092959194509250565b61046881610194565b82525050565b610477816101d2565b82525050565b6000608082019050610492600083018761045f565b61049f602083018661045f565b6104ac604083018561045f565b6104b9606083018461046e565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6104f781610194565b82525050565b600061050983836104ee565b60208301905092915050565b6000602082019050919050565b600061052d826104c2565b61053781856104cd565b9350610542836104de565b8060005b8381101561057357815161055a88826104fd565b975061056583610515565b925050600181019050610546565b5085935050505092915050565b6000606082019050610595600083018661045f565b81810360208301526105a78185610522565b90506105b6604083018461046e565b94935050505056fea26469706673582212203258fa028722e747b8c8c1d701164299e665b417ab67521c6ca353c3fb2fb0cb64736f6c63430008130033",
}
// OneTokenTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use OneTokenTransferMetaData.ABI instead.
var OneTokenTransferABI = OneTokenTransferMetaData.ABI
// OneTokenTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use OneTokenTransferMetaData.Bin instead.
var OneTokenTransferBin = OneTokenTransferMetaData.Bin
// DeployOneTokenTransfer deploys a new Ethereum contract, binding an instance of OneTokenTransfer to it.
func DeployOneTokenTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OneTokenTransfer, error) {
parsed, err := OneTokenTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OneTokenTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &OneTokenTransfer{OneTokenTransferCaller: OneTokenTransferCaller{contract: contract}, OneTokenTransferTransactor: OneTokenTransferTransactor{contract: contract}, OneTokenTransferFilterer: OneTokenTransferFilterer{contract: contract}}, nil
}
// OneTokenTransfer is an auto generated Go binding around an Ethereum contract.
type OneTokenTransfer struct {
OneTokenTransferCaller // Read-only binding to the contract
OneTokenTransferTransactor // Write-only binding to the contract
OneTokenTransferFilterer // Log filterer for contract events
}
// OneTokenTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type OneTokenTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneTokenTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type OneTokenTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneTokenTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type OneTokenTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneTokenTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type OneTokenTransferSession struct {
Contract *OneTokenTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneTokenTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type OneTokenTransferCallerSession struct {
Contract *OneTokenTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// OneTokenTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type OneTokenTransferTransactorSession struct {
Contract *OneTokenTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneTokenTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type OneTokenTransferRaw struct {
Contract *OneTokenTransfer // Generic contract binding to access the raw methods on
}
// OneTokenTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type OneTokenTransferCallerRaw struct {
Contract *OneTokenTransferCaller // Generic read-only contract binding to access the raw methods on
}
// OneTokenTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type OneTokenTransferTransactorRaw struct {
Contract *OneTokenTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewOneTokenTransfer creates a new instance of OneTokenTransfer, bound to a specific deployed contract.
func NewOneTokenTransfer(address common.Address, backend bind.ContractBackend) (*OneTokenTransfer, error) {
contract, err := bindOneTokenTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &OneTokenTransfer{OneTokenTransferCaller: OneTokenTransferCaller{contract: contract}, OneTokenTransferTransactor: OneTokenTransferTransactor{contract: contract}, OneTokenTransferFilterer: OneTokenTransferFilterer{contract: contract}}, nil
}
// NewOneTokenTransferCaller creates a new read-only instance of OneTokenTransfer, bound to a specific deployed contract.
func NewOneTokenTransferCaller(address common.Address, caller bind.ContractCaller) (*OneTokenTransferCaller, error) {
contract, err := bindOneTokenTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &OneTokenTransferCaller{contract: contract}, nil
}
// NewOneTokenTransferTransactor creates a new write-only instance of OneTokenTransfer, bound to a specific deployed contract.
func NewOneTokenTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*OneTokenTransferTransactor, error) {
contract, err := bindOneTokenTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &OneTokenTransferTransactor{contract: contract}, nil
}
// NewOneTokenTransferFilterer creates a new log filterer instance of OneTokenTransfer, bound to a specific deployed contract.
func NewOneTokenTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*OneTokenTransferFilterer, error) {
contract, err := bindOneTokenTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &OneTokenTransferFilterer{contract: contract}, nil
}
// bindOneTokenTransfer binds a generic wrapper to an already deployed contract.
func bindOneTokenTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(OneTokenTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneTokenTransfer *OneTokenTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneTokenTransfer.Contract.OneTokenTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneTokenTransfer *OneTokenTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.OneTokenTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneTokenTransfer *OneTokenTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.OneTokenTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneTokenTransfer *OneTokenTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneTokenTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneTokenTransfer *OneTokenTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneTokenTransfer *OneTokenTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.contract.Transact(opts, method, params...)
}
// OneTransfer is a paid mutator transaction binding the contract method 0xe2283c03.
//
// Solidity: function oneTransfer(address tokenTransferAddr, address token, address[] toArr, uint256 amount) returns()
func (_OneTokenTransfer *OneTokenTransferTransactor) OneTransfer(opts *bind.TransactOpts, tokenTransferAddr common.Address, token common.Address, toArr []common.Address, amount *big.Int) (*types.Transaction, error) {
return _OneTokenTransfer.contract.Transact(opts, "oneTransfer", tokenTransferAddr, token, toArr, amount)
}
// OneTransfer is a paid mutator transaction binding the contract method 0xe2283c03.
//
// Solidity: function oneTransfer(address tokenTransferAddr, address token, address[] toArr, uint256 amount) returns()
func (_OneTokenTransfer *OneTokenTransferSession) OneTransfer(tokenTransferAddr common.Address, token common.Address, toArr []common.Address, amount *big.Int) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.OneTransfer(&_OneTokenTransfer.TransactOpts, tokenTransferAddr, token, toArr, amount)
}
// OneTransfer is a paid mutator transaction binding the contract method 0xe2283c03.
//
// Solidity: function oneTransfer(address tokenTransferAddr, address token, address[] toArr, uint256 amount) returns()
func (_OneTokenTransfer *OneTokenTransferTransactorSession) OneTransfer(tokenTransferAddr common.Address, token common.Address, toArr []common.Address, amount *big.Int) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.OneTransfer(&_OneTokenTransfer.TransactOpts, tokenTransferAddr, token, toArr, amount)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xd39aee2b.
//
// Solidity: function oneTransferFrom(address tokenTransferAddr, address token, address from, address to, uint256 amount) returns()
func (_OneTokenTransfer *OneTokenTransferTransactor) OneTransferFrom(opts *bind.TransactOpts, tokenTransferAddr common.Address, token common.Address, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _OneTokenTransfer.contract.Transact(opts, "oneTransferFrom", tokenTransferAddr, token, from, to, amount)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xd39aee2b.
//
// Solidity: function oneTransferFrom(address tokenTransferAddr, address token, address from, address to, uint256 amount) returns()
func (_OneTokenTransfer *OneTokenTransferSession) OneTransferFrom(tokenTransferAddr common.Address, token common.Address, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.OneTransferFrom(&_OneTokenTransfer.TransactOpts, tokenTransferAddr, token, from, to, amount)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xd39aee2b.
//
// Solidity: function oneTransferFrom(address tokenTransferAddr, address token, address from, address to, uint256 amount) returns()
func (_OneTokenTransfer *OneTokenTransferTransactorSession) OneTransferFrom(tokenTransferAddr common.Address, token common.Address, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _OneTokenTransfer.Contract.OneTransferFrom(&_OneTokenTransfer.TransactOpts, tokenTransferAddr, token, from, to, amount)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken20
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// TokenTransferMetaData contains all meta data concerning the TokenTransfer contract.
var TokenTransferMetaData = &bind.MetaData{
ABI: "[{\"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\"}]",
Bin: "0x608060405234801561001057600080fd5b50610c42806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063c8ce6c781461003b578063f3913e6914610057575b600080fd5b6100556004803603810190610050919061071e565b610073565b005b610071600480360381019061006c919061078d565b6100dd565b005b60005b82518110156100d7576100c4838281518110610095576100946107f4565b5b6020026020010151838673ffffffffffffffffffffffffffffffffffffffff166101919092919063ffffffff16565b80806100cf90610852565b915050610076565b50505050565b8373ffffffffffffffffffffffffffffffffffffffff166352ec85298484846040518463ffffffff1660e01b815260040161011a939291906108b8565b6020604051808303816000875af1158015610139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015d9190610927565b5061018b8383838773ffffffffffffffffffffffffffffffffffffffff16610217909392919063ffffffff16565b50505050565b6102128363a9059cbb60e01b84846040516024016101b0929190610954565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506102a0565b505050565b61029a846323b872dd60e01b858585604051602401610238939291906108b8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506102a0565b50505050565b6000610302826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103679092919063ffffffff16565b905060008151111561036257808060200190518101906103229190610927565b610361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035890610a00565b60405180910390fd5b5b505050565b6060610376848460008561037f565b90509392505050565b6060824710156103c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bb90610a92565b60405180910390fd5b6103cd85610493565b61040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390610afe565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516104359190610b8f565b60006040518083038185875af1925050503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b50915091506104878282866104b6565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156104c657829050610516565b6000835111156104d95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050d9190610bea565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061055c82610531565b9050919050565b61056c81610551565b811461057757600080fd5b50565b60008135905061058981610563565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6105dd82610594565b810181811067ffffffffffffffff821117156105fc576105fb6105a5565b5b80604052505050565b600061060f61051d565b905061061b82826105d4565b919050565b600067ffffffffffffffff82111561063b5761063a6105a5565b5b602082029050602081019050919050565b600080fd5b600061066461065f84610620565b610605565b905080838252602082019050602084028301858111156106875761068661064c565b5b835b818110156106b0578061069c888261057a565b845260208401935050602081019050610689565b5050509392505050565b600082601f8301126106cf576106ce61058f565b5b81356106df848260208601610651565b91505092915050565b6000819050919050565b6106fb816106e8565b811461070657600080fd5b50565b600081359050610718816106f2565b92915050565b60008060006060848603121561073757610736610527565b5b60006107458682870161057a565b935050602084013567ffffffffffffffff8111156107665761076561052c565b5b610772868287016106ba565b925050604061078386828701610709565b9150509250925092565b600080600080608085870312156107a7576107a6610527565b5b60006107b58782880161057a565b94505060206107c68782880161057a565b93505060406107d78782880161057a565b92505060606107e887828801610709565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061085d826106e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361088f5761088e610823565b5b600182019050919050565b6108a381610551565b82525050565b6108b2816106e8565b82525050565b60006060820190506108cd600083018661089a565b6108da602083018561089a565b6108e760408301846108a9565b949350505050565b60008115159050919050565b610904816108ef565b811461090f57600080fd5b50565b600081519050610921816108fb565b92915050565b60006020828403121561093d5761093c610527565b5b600061094b84828501610912565b91505092915050565b6000604082019050610969600083018561089a565b61097660208301846108a9565b9392505050565b600082825260208201905092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006109ea602a8361097d565b91506109f58261098e565b604082019050919050565b60006020820190508181036000830152610a19816109dd565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000610a7c60268361097d565b9150610a8782610a20565b604082019050919050565b60006020820190508181036000830152610aab81610a6f565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610ae8601d8361097d565b9150610af382610ab2565b602082019050919050565b60006020820190508181036000830152610b1781610adb565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015610b52578082015181840152602081019050610b37565b60008484015250505050565b6000610b6982610b1e565b610b738185610b29565b9350610b83818560208601610b34565b80840191505092915050565b6000610b9b8284610b5e565b915081905092915050565b600081519050919050565b6000610bbc82610ba6565b610bc6818561097d565b9350610bd6818560208601610b34565b610bdf81610594565b840191505092915050565b60006020820190508181036000830152610c048184610bb1565b90509291505056fea2646970667358221220c82a0d5481c458d308c715ed1925983c8c7f68c67f6f330c6c0e86ab3c5f4a1464736f6c63430008130033",
}
// TokenTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use TokenTransferMetaData.ABI instead.
var TokenTransferABI = TokenTransferMetaData.ABI
// TokenTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use TokenTransferMetaData.Bin instead.
var TokenTransferBin = TokenTransferMetaData.Bin
// DeployTokenTransfer deploys a new Ethereum contract, binding an instance of TokenTransfer to it.
func DeployTokenTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TokenTransfer, error) {
parsed, err := TokenTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TokenTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &TokenTransfer{TokenTransferCaller: TokenTransferCaller{contract: contract}, TokenTransferTransactor: TokenTransferTransactor{contract: contract}, TokenTransferFilterer: TokenTransferFilterer{contract: contract}}, nil
}
// TokenTransfer is an auto generated Go binding around an Ethereum contract.
type TokenTransfer struct {
TokenTransferCaller // Read-only binding to the contract
TokenTransferTransactor // Write-only binding to the contract
TokenTransferFilterer // Log filterer for contract events
}
// TokenTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type TokenTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TokenTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type TokenTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TokenTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type TokenTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TokenTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TokenTransferSession struct {
Contract *TokenTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TokenTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type TokenTransferCallerSession struct {
Contract *TokenTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// TokenTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type TokenTransferTransactorSession struct {
Contract *TokenTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TokenTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type TokenTransferRaw struct {
Contract *TokenTransfer // Generic contract binding to access the raw methods on
}
// TokenTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type TokenTransferCallerRaw struct {
Contract *TokenTransferCaller // Generic read-only contract binding to access the raw methods on
}
// TokenTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type TokenTransferTransactorRaw struct {
Contract *TokenTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewTokenTransfer creates a new instance of TokenTransfer, bound to a specific deployed contract.
func NewTokenTransfer(address common.Address, backend bind.ContractBackend) (*TokenTransfer, error) {
contract, err := bindTokenTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &TokenTransfer{TokenTransferCaller: TokenTransferCaller{contract: contract}, TokenTransferTransactor: TokenTransferTransactor{contract: contract}, TokenTransferFilterer: TokenTransferFilterer{contract: contract}}, nil
}
// NewTokenTransferCaller creates a new read-only instance of TokenTransfer, bound to a specific deployed contract.
func NewTokenTransferCaller(address common.Address, caller bind.ContractCaller) (*TokenTransferCaller, error) {
contract, err := bindTokenTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &TokenTransferCaller{contract: contract}, nil
}
// NewTokenTransferTransactor creates a new write-only instance of TokenTransfer, bound to a specific deployed contract.
func NewTokenTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*TokenTransferTransactor, error) {
contract, err := bindTokenTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &TokenTransferTransactor{contract: contract}, nil
}
// NewTokenTransferFilterer creates a new log filterer instance of TokenTransfer, bound to a specific deployed contract.
func NewTokenTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*TokenTransferFilterer, error) {
contract, err := bindTokenTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &TokenTransferFilterer{contract: contract}, nil
}
// bindTokenTransfer binds a generic wrapper to an already deployed contract.
func bindTokenTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(TokenTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TokenTransfer *TokenTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TokenTransfer.Contract.TokenTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TokenTransfer *TokenTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TokenTransfer.Contract.TokenTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TokenTransfer *TokenTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TokenTransfer.Contract.TokenTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TokenTransfer *TokenTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TokenTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TokenTransfer *TokenTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TokenTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TokenTransfer *TokenTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TokenTransfer.Contract.contract.Transact(opts, method, params...)
}
// TokenTransfer is a paid mutator transaction binding the contract method 0xc8ce6c78.
//
// Solidity: function tokenTransfer(address token, address[] toArr, uint256 value) returns()
func (_TokenTransfer *TokenTransferTransactor) TokenTransfer(opts *bind.TransactOpts, token common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _TokenTransfer.contract.Transact(opts, "tokenTransfer", token, toArr, value)
}
// TokenTransfer is a paid mutator transaction binding the contract method 0xc8ce6c78.
//
// Solidity: function tokenTransfer(address token, address[] toArr, uint256 value) returns()
func (_TokenTransfer *TokenTransferSession) TokenTransfer(token common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _TokenTransfer.Contract.TokenTransfer(&_TokenTransfer.TransactOpts, token, toArr, value)
}
// TokenTransfer is a paid mutator transaction binding the contract method 0xc8ce6c78.
//
// Solidity: function tokenTransfer(address token, address[] toArr, uint256 value) returns()
func (_TokenTransfer *TokenTransferTransactorSession) TokenTransfer(token common.Address, toArr []common.Address, value *big.Int) (*types.Transaction, error) {
return _TokenTransfer.Contract.TokenTransfer(&_TokenTransfer.TransactOpts, token, toArr, value)
}
// TokenTransferFrom is a paid mutator transaction binding the contract method 0xf3913e69.
//
// Solidity: function tokenTransferFrom(address token, address from, address to, uint256 value) returns()
func (_TokenTransfer *TokenTransferTransactor) TokenTransferFrom(opts *bind.TransactOpts, token common.Address, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
return _TokenTransfer.contract.Transact(opts, "tokenTransferFrom", token, from, to, value)
}
// TokenTransferFrom is a paid mutator transaction binding the contract method 0xf3913e69.
//
// Solidity: function tokenTransferFrom(address token, address from, address to, uint256 value) returns()
func (_TokenTransfer *TokenTransferSession) TokenTransferFrom(token common.Address, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
return _TokenTransfer.Contract.TokenTransferFrom(&_TokenTransfer.TransactOpts, token, from, to, value)
}
// TokenTransferFrom is a paid mutator transaction binding the contract method 0xf3913e69.
//
// Solidity: function tokenTransferFrom(address token, address from, address to, uint256 value) returns()
func (_TokenTransfer *TokenTransferTransactorSession) TokenTransferFrom(token common.Address, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
return _TokenTransfer.Contract.TokenTransferFrom(&_TokenTransfer.TransactOpts, token, from, to, value)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken20
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// TwoTokenTransferMetaData contains all meta data concerning the TwoTokenTransfer contract.
var TwoTokenTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oneTokenTransferAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenTransferAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"toArr\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"twoTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oneTokenTransferAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenTransferAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"twoTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b5061063c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806310d5e9721461003b578063814f5a5e14610057575b600080fd5b61005560048036038101906100509190610367565b610073565b005b610071600480360381019061006c91906103fe565b6100eb565b005b8473ffffffffffffffffffffffffffffffffffffffff1663e2283c03858585856040518563ffffffff1660e01b81526004016100b29493929190610567565b600060405180830381600087803b1580156100cc57600080fd5b505af11580156100e0573d6000803e3d6000fd5b505050505050505050565b8573ffffffffffffffffffffffffffffffffffffffff16636c8c52c286868686866040518663ffffffff1660e01b815260040161012c9594939291906105b3565b600060405180830381600087803b15801561014657600080fd5b505af115801561015a573d6000803e3d6000fd5b50505050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101a58261017a565b9050919050565b6101b58161019a565b81146101c057600080fd5b50565b6000813590506101d2816101ac565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610226826101dd565b810181811067ffffffffffffffff82111715610245576102446101ee565b5b80604052505050565b6000610258610166565b9050610264828261021d565b919050565b600067ffffffffffffffff821115610284576102836101ee565b5b602082029050602081019050919050565b600080fd5b60006102ad6102a884610269565b61024e565b905080838252602082019050602084028301858111156102d0576102cf610295565b5b835b818110156102f957806102e588826101c3565b8452602084019350506020810190506102d2565b5050509392505050565b600082601f830112610318576103176101d8565b5b813561032884826020860161029a565b91505092915050565b6000819050919050565b61034481610331565b811461034f57600080fd5b50565b6000813590506103618161033b565b92915050565b600080600080600060a0868803121561038357610382610170565b5b6000610391888289016101c3565b95505060206103a2888289016101c3565b94505060406103b3888289016101c3565b935050606086013567ffffffffffffffff8111156103d4576103d3610175565b5b6103e088828901610303565b92505060806103f188828901610352565b9150509295509295909350565b60008060008060008060c0878903121561041b5761041a610170565b5b600061042989828a016101c3565b965050602061043a89828a016101c3565b955050604061044b89828a016101c3565b945050606061045c89828a016101c3565b935050608061046d89828a016101c3565b92505060a061047e89828a01610352565b9150509295509295509295565b6104948161019a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6104cf8161019a565b82525050565b60006104e183836104c6565b60208301905092915050565b6000602082019050919050565b60006105058261049a565b61050f81856104a5565b935061051a836104b6565b8060005b8381101561054b57815161053288826104d5565b975061053d836104ed565b92505060018101905061051e565b5085935050505092915050565b61056181610331565b82525050565b600060808201905061057c600083018761048b565b610589602083018661048b565b818103604083015261059b81856104fa565b90506105aa6060830184610558565b95945050505050565b600060a0820190506105c8600083018861048b565b6105d5602083018761048b565b6105e2604083018661048b565b6105ef606083018561048b565b6105fc6080830184610558565b969550505050505056fea264697066735822122041efa911e2697c3e77cc8cbdfa9b32896fd410ae611d70a62e88cc0cdd6ffa5964736f6c63430008130033",
}
// TwoTokenTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use TwoTokenTransferMetaData.ABI instead.
var TwoTokenTransferABI = TwoTokenTransferMetaData.ABI
// TwoTokenTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use TwoTokenTransferMetaData.Bin instead.
var TwoTokenTransferBin = TwoTokenTransferMetaData.Bin
// DeployTwoTokenTransfer deploys a new Ethereum contract, binding an instance of TwoTokenTransfer to it.
func DeployTwoTokenTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TwoTokenTransfer, error) {
parsed, err := TwoTokenTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TwoTokenTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &TwoTokenTransfer{TwoTokenTransferCaller: TwoTokenTransferCaller{contract: contract}, TwoTokenTransferTransactor: TwoTokenTransferTransactor{contract: contract}, TwoTokenTransferFilterer: TwoTokenTransferFilterer{contract: contract}}, nil
}
// TwoTokenTransfer is an auto generated Go binding around an Ethereum contract.
type TwoTokenTransfer struct {
TwoTokenTransferCaller // Read-only binding to the contract
TwoTokenTransferTransactor // Write-only binding to the contract
TwoTokenTransferFilterer // Log filterer for contract events
}
// TwoTokenTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type TwoTokenTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoTokenTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type TwoTokenTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoTokenTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type TwoTokenTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoTokenTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TwoTokenTransferSession struct {
Contract *TwoTokenTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TwoTokenTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type TwoTokenTransferCallerSession struct {
Contract *TwoTokenTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// TwoTokenTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type TwoTokenTransferTransactorSession struct {
Contract *TwoTokenTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TwoTokenTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type TwoTokenTransferRaw struct {
Contract *TwoTokenTransfer // Generic contract binding to access the raw methods on
}
// TwoTokenTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type TwoTokenTransferCallerRaw struct {
Contract *TwoTokenTransferCaller // Generic read-only contract binding to access the raw methods on
}
// TwoTokenTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type TwoTokenTransferTransactorRaw struct {
Contract *TwoTokenTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewTwoTokenTransfer creates a new instance of TwoTokenTransfer, bound to a specific deployed contract.
func NewTwoTokenTransfer(address common.Address, backend bind.ContractBackend) (*TwoTokenTransfer, error) {
contract, err := bindTwoTokenTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &TwoTokenTransfer{TwoTokenTransferCaller: TwoTokenTransferCaller{contract: contract}, TwoTokenTransferTransactor: TwoTokenTransferTransactor{contract: contract}, TwoTokenTransferFilterer: TwoTokenTransferFilterer{contract: contract}}, nil
}
// NewTwoTokenTransferCaller creates a new read-only instance of TwoTokenTransfer, bound to a specific deployed contract.
func NewTwoTokenTransferCaller(address common.Address, caller bind.ContractCaller) (*TwoTokenTransferCaller, error) {
contract, err := bindTwoTokenTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &TwoTokenTransferCaller{contract: contract}, nil
}
// NewTwoTokenTransferTransactor creates a new write-only instance of TwoTokenTransfer, bound to a specific deployed contract.
func NewTwoTokenTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*TwoTokenTransferTransactor, error) {
contract, err := bindTwoTokenTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &TwoTokenTransferTransactor{contract: contract}, nil
}
// NewTwoTokenTransferFilterer creates a new log filterer instance of TwoTokenTransfer, bound to a specific deployed contract.
func NewTwoTokenTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*TwoTokenTransferFilterer, error) {
contract, err := bindTwoTokenTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &TwoTokenTransferFilterer{contract: contract}, nil
}
// bindTwoTokenTransfer binds a generic wrapper to an already deployed contract.
func bindTwoTokenTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(TwoTokenTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TwoTokenTransfer *TwoTokenTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TwoTokenTransfer.Contract.TwoTokenTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TwoTokenTransfer *TwoTokenTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.TwoTokenTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TwoTokenTransfer *TwoTokenTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.TwoTokenTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TwoTokenTransfer *TwoTokenTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TwoTokenTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TwoTokenTransfer *TwoTokenTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TwoTokenTransfer *TwoTokenTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.contract.Transact(opts, method, params...)
}
// TwoTransfer is a paid mutator transaction binding the contract method 0x10d5e972.
//
// Solidity: function twoTransfer(address oneTokenTransferAddr, address tokenTransferAddr, address token, address[] toArr, uint256 amount) returns()
func (_TwoTokenTransfer *TwoTokenTransferTransactor) TwoTransfer(opts *bind.TransactOpts, oneTokenTransferAddr common.Address, tokenTransferAddr common.Address, token common.Address, toArr []common.Address, amount *big.Int) (*types.Transaction, error) {
return _TwoTokenTransfer.contract.Transact(opts, "twoTransfer", oneTokenTransferAddr, tokenTransferAddr, token, toArr, amount)
}
// TwoTransfer is a paid mutator transaction binding the contract method 0x10d5e972.
//
// Solidity: function twoTransfer(address oneTokenTransferAddr, address tokenTransferAddr, address token, address[] toArr, uint256 amount) returns()
func (_TwoTokenTransfer *TwoTokenTransferSession) TwoTransfer(oneTokenTransferAddr common.Address, tokenTransferAddr common.Address, token common.Address, toArr []common.Address, amount *big.Int) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.TwoTransfer(&_TwoTokenTransfer.TransactOpts, oneTokenTransferAddr, tokenTransferAddr, token, toArr, amount)
}
// TwoTransfer is a paid mutator transaction binding the contract method 0x10d5e972.
//
// Solidity: function twoTransfer(address oneTokenTransferAddr, address tokenTransferAddr, address token, address[] toArr, uint256 amount) returns()
func (_TwoTokenTransfer *TwoTokenTransferTransactorSession) TwoTransfer(oneTokenTransferAddr common.Address, tokenTransferAddr common.Address, token common.Address, toArr []common.Address, amount *big.Int) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.TwoTransfer(&_TwoTokenTransfer.TransactOpts, oneTokenTransferAddr, tokenTransferAddr, token, toArr, amount)
}
// TwoTransferFrom is a paid mutator transaction binding the contract method 0x814f5a5e.
//
// Solidity: function twoTransferFrom(address oneTokenTransferAddr, address tokenTransferAddr, address token, address from, address to, uint256 amount) returns()
func (_TwoTokenTransfer *TwoTokenTransferTransactor) TwoTransferFrom(opts *bind.TransactOpts, oneTokenTransferAddr common.Address, tokenTransferAddr common.Address, token common.Address, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _TwoTokenTransfer.contract.Transact(opts, "twoTransferFrom", oneTokenTransferAddr, tokenTransferAddr, token, from, to, amount)
}
// TwoTransferFrom is a paid mutator transaction binding the contract method 0x814f5a5e.
//
// Solidity: function twoTransferFrom(address oneTokenTransferAddr, address tokenTransferAddr, address token, address from, address to, uint256 amount) returns()
func (_TwoTokenTransfer *TwoTokenTransferSession) TwoTransferFrom(oneTokenTransferAddr common.Address, tokenTransferAddr common.Address, token common.Address, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.TwoTransferFrom(&_TwoTokenTransfer.TransactOpts, oneTokenTransferAddr, tokenTransferAddr, token, from, to, amount)
}
// TwoTransferFrom is a paid mutator transaction binding the contract method 0x814f5a5e.
//
// Solidity: function twoTransferFrom(address oneTokenTransferAddr, address tokenTransferAddr, address token, address from, address to, uint256 amount) returns()
func (_TwoTokenTransfer *TwoTokenTransferTransactorSession) TwoTransferFrom(oneTokenTransferAddr common.Address, tokenTransferAddr common.Address, token common.Address, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
return _TwoTokenTransfer.Contract.TwoTransferFrom(&_TwoTokenTransfer.TransactOpts, oneTokenTransferAddr, tokenTransferAddr, token, from, to, amount)
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "../../interface/IERC20.sol";
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function mint(address account, uint amount) public {
_mint(account, amount);
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(
address to,
uint256 amount
) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function approveFrom(
address owner,
address spender,
uint256 amount
) public virtual override returns (bool) {
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(
fromBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(
currentAllowance >= amount,
"ERC20: insufficient allowance"
);
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "../../interface/ITokenTransfer.sol";
contract OneTokenTransfer {
function oneTransfer(
address tokenTransferAddr,
address token,
address[] memory toArr,
uint256 amount
) external {
ITokenTransfer(tokenTransferAddr).tokenTransfer(token, toArr, amount);
}
function oneTransferFrom(
address tokenTransferAddr,
address token,
address from,
address to,
uint256 amount
) external {
ITokenTransfer(tokenTransferAddr).tokenTransferFrom(
token,
from,
to,
amount
);
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "../../interface/IERC20.sol";
import "../../library/SafeERC20Token.sol";
contract TokenTransfer {
using SafeERC20Token for IERC20;
function tokenTransfer(
address token,
address[] memory toArr,
uint256 value
) external {
for (uint i = 0; i < toArr.length; i++) {
IERC20(token).safeTransfer(toArr[i], value);
}
}
function tokenTransferFrom(
address token,
address from,
address to,
uint256 value
) external {
IERC20(token).approveFrom(from, to, value);
IERC20(token).safeTransferFrom(from, to, value);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "../../interface/IOneTokenTransfer.sol";
contract TwoTokenTransfer {
function twoTransfer(
address oneTokenTransferAddr,
address tokenTransferAddr,
address token,
address[] memory toArr,
uint256 amount
) external {
IOneTokenTransfer(oneTokenTransferAddr).oneTransfer(
tokenTransferAddr,
token,
toArr,
amount
);
}
function twoTransferFrom(
address oneTokenTransferAddr,
address tokenTransferAddr,
address token,
address from,
address to,
uint256 amount
) external {
IOneTokenTransfer(oneTokenTransferAddr).oneTokenTransferFrom(
tokenTransferAddr,
token,
from,
to,
amount
);
}
}
60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122046cff3afd324baa9d02f4baa1fb29a5314647e4182dd1e829a66ea5e3a0d9cc964736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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"}]
\ No newline at end of file
60806040523480156200001157600080fd5b5060405162002a9038038062002a908339818101604052810190620000379190620001f6565b8160009081620000489190620004c6565b5080600190816200005a9190620004c6565b505050620005ad565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000cc8262000081565b810181811067ffffffffffffffff82111715620000ee57620000ed62000092565b5b80604052505050565b60006200010362000063565b9050620001118282620000c1565b919050565b600067ffffffffffffffff82111562000134576200013362000092565b5b6200013f8262000081565b9050602081019050919050565b60005b838110156200016c5780820151818401526020810190506200014f565b60008484015250505050565b60006200018f620001898462000116565b620000f7565b905082815260208101848484011115620001ae57620001ad6200007c565b5b620001bb8482856200014c565b509392505050565b600082601f830112620001db57620001da62000077565b5b8151620001ed84826020860162000178565b91505092915050565b6000806040838503121562000210576200020f6200006d565b5b600083015167ffffffffffffffff81111562000231576200023062000072565b5b6200023f85828601620001c3565b925050602083015167ffffffffffffffff81111562000263576200026262000072565b5b6200027185828601620001c3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ce57607f821691505b602082108103620002e457620002e362000286565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200034e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200030f565b6200035a86836200030f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003a7620003a16200039b8462000372565b6200037c565b62000372565b9050919050565b6000819050919050565b620003c38362000386565b620003db620003d282620003ae565b8484546200031c565b825550505050565b600090565b620003f2620003e3565b620003ff818484620003b8565b505050565b5b8181101562000427576200041b600082620003e8565b60018101905062000405565b5050565b601f82111562000476576200044081620002ea565b6200044b84620002ff565b810160208510156200045b578190505b620004736200046a85620002ff565b83018262000404565b50505b505050565b600082821c905092915050565b60006200049b600019846008026200047b565b1980831691505092915050565b6000620004b6838362000488565b9150826002028217905092915050565b620004d1826200027b565b67ffffffffffffffff811115620004ed57620004ec62000092565b5b620004f98254620002b5565b620005068282856200042b565b600060209050601f8311600181146200053e576000841562000529578287015190505b620005358582620004a8565b865550620005a5565b601f1984166200054e86620002ea565b60005b82811015620005785784890151825560018201915060208501945060208101905062000551565b8683101562000598578489015162000594601f89168262000488565b8355505b6001600288020188555050505b505050505050565b6124d380620005bd6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b80636352211e146101dd57806370a082311461020d57806395d89b411461023d576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806340c10f19146101a557806342842e0e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906117cf565b6102f3565b6040516101169190611817565b60405180910390f35b6101276103d5565b60405161013491906118c2565b60405180910390f35b6101576004803603810190610152919061191a565b610467565b6040516101649190611988565b60405180910390f35b610187600480360381019061018291906119cf565b6104ad565b005b6101a3600480360381019061019e9190611a0f565b6105c4565b005b6101bf60048036038101906101ba91906119cf565b610624565b005b6101db60048036038101906101d69190611a0f565b610632565b005b6101f760048036038101906101f2919061191a565b610652565b6040516102049190611988565b60405180910390f35b61022760048036038101906102229190611a62565b6106d8565b6040516102349190611a9e565b60405180910390f35b61024561078f565b60405161025291906118c2565b60405180910390f35b61027560048036038101906102709190611ae5565b610821565b005b610291600480360381019061028c9190611c5a565b610837565b005b6102ad60048036038101906102a8919061191a565b610899565b6040516102ba91906118c2565b60405180910390f35b6102dd60048036038101906102d89190611cdd565b610901565b6040516102ea9190611817565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd82610995565b5b9050919050565b6060600080546103e490611d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461041090611d4c565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b6000610472826109ff565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104b882610652565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051f90611def565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610547610a4a565b73ffffffffffffffffffffffffffffffffffffffff161480610576575061057581610570610a4a565b610901565b5b6105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac90611e81565b60405180910390fd5b6105bf8383610a52565b505050565b6105d56105cf610a4a565b82610b0b565b610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b90611f13565b60405180910390fd5b61061f838383610ba0565b505050565b61062e8282610e99565b5050565b61064d83838360405180602001604052806000815250610837565b505050565b60008061065e83610eb7565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690611f7f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90612011565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461079e90611d4c565b80601f01602080910402602001604051908101604052809291908181526020018280546107ca90611d4c565b80156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b5050505050905090565b61083361082c610a4a565b8383610ef4565b5050565b610848610842610a4a565b83610b0b565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90611f13565b60405180910390fd5b61089384848484611060565b50505050565b60606108a4826109ff565b60006108ae6110bc565b905060008151116108ce57604051806020016040528060008152506108f9565b806108d8846110d3565b6040516020016108e992919061206d565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a08816111a1565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90611f7f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610ac583610652565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b1783610652565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b595750610b588185610901565b5b80610b9757508373ffffffffffffffffffffffffffffffffffffffff16610b7f84610467565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bc082610652565b73ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90612103565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90612195565b60405180910390fd5b610c9283838360016111e2565b8273ffffffffffffffffffffffffffffffffffffffff16610cb282610652565b73ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90612103565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e9483838360016111e8565b505050565b610eb38282604051806020016040528060008152506111ee565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990612201565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110539190611817565b60405180910390a3505050565b61106b848484610ba0565b61107784848484611249565b6110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612293565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060600060016110e2846113d0565b01905060008167ffffffffffffffff81111561110157611100611b2f565b5b6040519080825280601f01601f1916602001820160405280156111335781602001600182028036833780820191505090505b509050600082602001820190505b600115611196578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161118a576111896122b3565b5b04945060008503611141575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166111c383610eb7565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b6111f88383611523565b6112056000848484611249565b611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612293565b60405180910390fd5b505050565b600061126a8473ffffffffffffffffffffffffffffffffffffffff16611740565b156113c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611293610a4a565b8786866040518563ffffffff1660e01b81526004016112b59493929190612337565b6020604051808303816000875af19250505080156112f157506040513d601f19601f820116820180604052508101906112ee9190612398565b60015b611373573d8060008114611321576040519150601f19603f3d011682016040523d82523d6000602084013e611326565b606091505b50600081510361136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290612293565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506113c8565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061142e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611424576114236122b3565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061146b576d04ee2d6d415b85acef81000000008381611461576114606122b3565b5b0492506020810190505b662386f26fc10000831061149a57662386f26fc1000083816114905761148f6122b3565b5b0492506010810190505b6305f5e10083106114c3576305f5e10083816114b9576114b86122b3565b5b0492506008810190505b61271083106114e85761271083816114de576114dd6122b3565b5b0492506004810190505b6064831061150b5760648381611501576115006122b3565b5b0492506002810190505b600a831061151a576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990612411565b60405180910390fd5b61159b816111a1565b156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d29061247d565b60405180910390fd5b6115e96000838360016111e2565b6115f2816111a1565b15611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116299061247d565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461173c6000838360016111e8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117ac81611777565b81146117b757600080fd5b50565b6000813590506117c9816117a3565b92915050565b6000602082840312156117e5576117e461176d565b5b60006117f3848285016117ba565b91505092915050565b60008115159050919050565b611811816117fc565b82525050565b600060208201905061182c6000830184611808565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561186c578082015181840152602081019050611851565b60008484015250505050565b6000601f19601f8301169050919050565b600061189482611832565b61189e818561183d565b93506118ae81856020860161184e565b6118b781611878565b840191505092915050565b600060208201905081810360008301526118dc8184611889565b905092915050565b6000819050919050565b6118f7816118e4565b811461190257600080fd5b50565b600081359050611914816118ee565b92915050565b6000602082840312156119305761192f61176d565b5b600061193e84828501611905565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061197282611947565b9050919050565b61198281611967565b82525050565b600060208201905061199d6000830184611979565b92915050565b6119ac81611967565b81146119b757600080fd5b50565b6000813590506119c9816119a3565b92915050565b600080604083850312156119e6576119e561176d565b5b60006119f4858286016119ba565b9250506020611a0585828601611905565b9150509250929050565b600080600060608486031215611a2857611a2761176d565b5b6000611a36868287016119ba565b9350506020611a47868287016119ba565b9250506040611a5886828701611905565b9150509250925092565b600060208284031215611a7857611a7761176d565b5b6000611a86848285016119ba565b91505092915050565b611a98816118e4565b82525050565b6000602082019050611ab36000830184611a8f565b92915050565b611ac2816117fc565b8114611acd57600080fd5b50565b600081359050611adf81611ab9565b92915050565b60008060408385031215611afc57611afb61176d565b5b6000611b0a858286016119ba565b9250506020611b1b85828601611ad0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b6782611878565b810181811067ffffffffffffffff82111715611b8657611b85611b2f565b5b80604052505050565b6000611b99611763565b9050611ba58282611b5e565b919050565b600067ffffffffffffffff821115611bc557611bc4611b2f565b5b611bce82611878565b9050602081019050919050565b82818337600083830152505050565b6000611bfd611bf884611baa565b611b8f565b905082815260208101848484011115611c1957611c18611b2a565b5b611c24848285611bdb565b509392505050565b600082601f830112611c4157611c40611b25565b5b8135611c51848260208601611bea565b91505092915050565b60008060008060808587031215611c7457611c7361176d565b5b6000611c82878288016119ba565b9450506020611c93878288016119ba565b9350506040611ca487828801611905565b925050606085013567ffffffffffffffff811115611cc557611cc4611772565b5b611cd187828801611c2c565b91505092959194509250565b60008060408385031215611cf457611cf361176d565b5b6000611d02858286016119ba565b9250506020611d13858286016119ba565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d6457607f821691505b602082108103611d7757611d76611d1d565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611dd960218361183d565b9150611de482611d7d565b604082019050919050565b60006020820190508181036000830152611e0881611dcc565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611e6b603d8361183d565b9150611e7682611e0f565b604082019050919050565b60006020820190508181036000830152611e9a81611e5e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611efd602d8361183d565b9150611f0882611ea1565b604082019050919050565b60006020820190508181036000830152611f2c81611ef0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000611f6960188361183d565b9150611f7482611f33565b602082019050919050565b60006020820190508181036000830152611f9881611f5c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000611ffb60298361183d565b915061200682611f9f565b604082019050919050565b6000602082019050818103600083015261202a81611fee565b9050919050565b600081905092915050565b600061204782611832565b6120518185612031565b935061206181856020860161184e565b80840191505092915050565b6000612079828561203c565b9150612085828461203c565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006120ed60258361183d565b91506120f882612091565b604082019050919050565b6000602082019050818103600083015261211c816120e0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061217f60248361183d565b915061218a82612123565b604082019050919050565b600060208201905081810360008301526121ae81612172565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006121eb60198361183d565b91506121f6826121b5565b602082019050919050565b6000602082019050818103600083015261221a816121de565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061227d60328361183d565b915061228882612221565b604082019050919050565b600060208201905081810360008301526122ac81612270565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000612309826122e2565b61231381856122ed565b935061232381856020860161184e565b61232c81611878565b840191505092915050565b600060808201905061234c6000830187611979565b6123596020830186611979565b6123666040830185611a8f565b818103606083015261237881846122fe565b905095945050505050565b600081519050612392816117a3565b92915050565b6000602082840312156123ae576123ad61176d565b5b60006123bc84828501612383565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006123fb60208361183d565b9150612406826123c5565b602082019050919050565b6000602082019050818103600083015261242a816123ee565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612467601c8361183d565b915061247282612431565b602082019050919050565b600060208201905081810360008301526124968161245a565b905091905056fea264697066735822122074cdecb99835c7275d46390904cbc908ec30ac7515c4aedef814aea06cee52b264736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
\ 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"}]
\ 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"}]
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
[{"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
[{"inputs":[{"internalType":"address","name":"nftTokenTransfer","type":"address"},{"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":"oneTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a0594c4660957b1f2febd1e2b92bdbb5985ed7f0e091d7fd103994534456f13f64736f6c63430008130033
\ 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"}]
\ No newline at end of file
608060405234801561001057600080fd5b506103fd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063150b7a021461003b57806315dacbea1461006b575b600080fd5b6100556004803603810190610050919061022d565b610087565b60405161006291906102f0565b60405180910390f35b6100856004803603810190610080919061030b565b6100b5565b005b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b81526004016100f293929190610390565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b5050505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061015f82610134565b9050919050565b61016f81610154565b811461017a57600080fd5b50565b60008135905061018c81610166565b92915050565b6000819050919050565b6101a581610192565b81146101b057600080fd5b50565b6000813590506101c28161019c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126101ed576101ec6101c8565b5b8235905067ffffffffffffffff81111561020a576102096101cd565b5b602083019150836001820283011115610226576102256101d2565b5b9250929050565b6000806000806000608086880312156102495761024861012a565b5b60006102578882890161017d565b95505060206102688882890161017d565b9450506040610279888289016101b3565b935050606086013567ffffffffffffffff81111561029a5761029961012f565b5b6102a6888289016101d7565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6102ea816102b5565b82525050565b600060208201905061030560008301846102e1565b92915050565b600080600080608085870312156103255761032461012a565b5b60006103338782880161017d565b94505060206103448782880161017d565b93505060406103558782880161017d565b9250506060610366878288016101b3565b91505092959194509250565b61037b81610154565b82525050565b61038a81610192565b82525050565b60006060820190506103a56000830186610372565b6103b26020830185610372565b6103bf6040830184610381565b94935050505056fea26469706673582212201627a740fc78a73b23519ab2f661d180ab72042122622361af6aa71305560f7364736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"ntTokenTransfer","type":"address"},{"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":"oneTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b50610271806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d39aee2b14610030575b600080fd5b61004a6004803603810190610045919061015d565b61004c565b005b8473ffffffffffffffffffffffffffffffffffffffff166315dacbea858585856040518563ffffffff1660e01b815260040161008b94939291906101f6565b600060405180830381600087803b1580156100a557600080fd5b505af11580156100b9573d6000803e3d6000fd5b505050505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f4826100c9565b9050919050565b610104816100e9565b811461010f57600080fd5b50565b600081359050610121816100fb565b92915050565b6000819050919050565b61013a81610127565b811461014557600080fd5b50565b60008135905061015781610131565b92915050565b600080600080600060a08688031215610179576101786100c4565b5b600061018788828901610112565b955050602061019888828901610112565b94505060406101a988828901610112565b93505060606101ba88828901610112565b92505060806101cb88828901610148565b9150509295509295909350565b6101e1816100e9565b82525050565b6101f081610127565b82525050565b600060808201905061020b60008301876101d8565b61021860208301866101d8565b61022560408301856101d8565b61023260608301846101e7565b9594505050505056fea2646970667358221220b6fbdaba9e91bdfe1827590847ea5725a7fbb505499e7906d931308f2053cbaa64736f6c63430008130033
\ No newline at end of file
60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e8c4100fd89c57beae570adf26e66ceb2950a9d2a4f8cfd7bff141efe5432f7764736f6c63430008130033
\ No newline at end of file
60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e75e608a70b340f62189e812b45bd7830553402712364262f3a78394aa8ba6eb64736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"oneNftTokenTransfer","type":"address"},{"internalType":"address","name":"nftTokenTransfer","type":"address"},{"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":"twoTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b50610294806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063814f5a5e14610030575b600080fd5b61004a60048036038101906100459190610160565b61004c565b005b8573ffffffffffffffffffffffffffffffffffffffff1663d39aee2b86868686866040518663ffffffff1660e01b815260040161008d95949392919061020b565b600060405180830381600087803b1580156100a757600080fd5b505af11580156100bb573d6000803e3d6000fd5b50505050505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f7826100cc565b9050919050565b610107816100ec565b811461011257600080fd5b50565b600081359050610124816100fe565b92915050565b6000819050919050565b61013d8161012a565b811461014857600080fd5b50565b60008135905061015a81610134565b92915050565b60008060008060008060c0878903121561017d5761017c6100c7565b5b600061018b89828a01610115565b965050602061019c89828a01610115565b95505060406101ad89828a01610115565b94505060606101be89828a01610115565b93505060806101cf89828a01610115565b92505060a06101e089828a0161014b565b9150509295509295509295565b6101f6816100ec565b82525050565b6102058161012a565b82525050565b600060a08201905061022060008301886101ed565b61022d60208301876101ed565b61023a60408301866101ed565b61024760608301856101ed565b61025460808301846101fc565b969550505050505056fea2646970667358221220ee43e6a425537de5fc189f56aeb07b480e1fff0e0a78162f88df525ce933f23e64736f6c63430008130033
\ No newline at end of file
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken721
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// ERC721MetaData contains all meta data concerning the ERC721 contract.
var ERC721MetaData = &bind.MetaData{
ABI: "[{\"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\"}]",
Bin: "0x60806040523480156200001157600080fd5b5060405162002a9038038062002a908339818101604052810190620000379190620001f6565b8160009081620000489190620004c6565b5080600190816200005a9190620004c6565b505050620005ad565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000cc8262000081565b810181811067ffffffffffffffff82111715620000ee57620000ed62000092565b5b80604052505050565b60006200010362000063565b9050620001118282620000c1565b919050565b600067ffffffffffffffff82111562000134576200013362000092565b5b6200013f8262000081565b9050602081019050919050565b60005b838110156200016c5780820151818401526020810190506200014f565b60008484015250505050565b60006200018f620001898462000116565b620000f7565b905082815260208101848484011115620001ae57620001ad6200007c565b5b620001bb8482856200014c565b509392505050565b600082601f830112620001db57620001da62000077565b5b8151620001ed84826020860162000178565b91505092915050565b6000806040838503121562000210576200020f6200006d565b5b600083015167ffffffffffffffff81111562000231576200023062000072565b5b6200023f85828601620001c3565b925050602083015167ffffffffffffffff81111562000263576200026262000072565b5b6200027185828601620001c3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ce57607f821691505b602082108103620002e457620002e362000286565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200034e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200030f565b6200035a86836200030f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003a7620003a16200039b8462000372565b6200037c565b62000372565b9050919050565b6000819050919050565b620003c38362000386565b620003db620003d282620003ae565b8484546200031c565b825550505050565b600090565b620003f2620003e3565b620003ff818484620003b8565b505050565b5b8181101562000427576200041b600082620003e8565b60018101905062000405565b5050565b601f82111562000476576200044081620002ea565b6200044b84620002ff565b810160208510156200045b578190505b620004736200046a85620002ff565b83018262000404565b50505b505050565b600082821c905092915050565b60006200049b600019846008026200047b565b1980831691505092915050565b6000620004b6838362000488565b9150826002028217905092915050565b620004d1826200027b565b67ffffffffffffffff811115620004ed57620004ec62000092565b5b620004f98254620002b5565b620005068282856200042b565b600060209050601f8311600181146200053e576000841562000529578287015190505b620005358582620004a8565b865550620005a5565b601f1984166200054e86620002ea565b60005b82811015620005785784890151825560018201915060208501945060208101905062000551565b8683101562000598578489015162000594601f89168262000488565b8355505b6001600288020188555050505b505050505050565b6124d380620005bd6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b80636352211e146101dd57806370a082311461020d57806395d89b411461023d576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806340c10f19146101a557806342842e0e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906117cf565b6102f3565b6040516101169190611817565b60405180910390f35b6101276103d5565b60405161013491906118c2565b60405180910390f35b6101576004803603810190610152919061191a565b610467565b6040516101649190611988565b60405180910390f35b610187600480360381019061018291906119cf565b6104ad565b005b6101a3600480360381019061019e9190611a0f565b6105c4565b005b6101bf60048036038101906101ba91906119cf565b610624565b005b6101db60048036038101906101d69190611a0f565b610632565b005b6101f760048036038101906101f2919061191a565b610652565b6040516102049190611988565b60405180910390f35b61022760048036038101906102229190611a62565b6106d8565b6040516102349190611a9e565b60405180910390f35b61024561078f565b60405161025291906118c2565b60405180910390f35b61027560048036038101906102709190611ae5565b610821565b005b610291600480360381019061028c9190611c5a565b610837565b005b6102ad60048036038101906102a8919061191a565b610899565b6040516102ba91906118c2565b60405180910390f35b6102dd60048036038101906102d89190611cdd565b610901565b6040516102ea9190611817565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd82610995565b5b9050919050565b6060600080546103e490611d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461041090611d4c565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b6000610472826109ff565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104b882610652565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051f90611def565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610547610a4a565b73ffffffffffffffffffffffffffffffffffffffff161480610576575061057581610570610a4a565b610901565b5b6105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac90611e81565b60405180910390fd5b6105bf8383610a52565b505050565b6105d56105cf610a4a565b82610b0b565b610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b90611f13565b60405180910390fd5b61061f838383610ba0565b505050565b61062e8282610e99565b5050565b61064d83838360405180602001604052806000815250610837565b505050565b60008061065e83610eb7565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690611f7f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90612011565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461079e90611d4c565b80601f01602080910402602001604051908101604052809291908181526020018280546107ca90611d4c565b80156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b5050505050905090565b61083361082c610a4a565b8383610ef4565b5050565b610848610842610a4a565b83610b0b565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90611f13565b60405180910390fd5b61089384848484611060565b50505050565b60606108a4826109ff565b60006108ae6110bc565b905060008151116108ce57604051806020016040528060008152506108f9565b806108d8846110d3565b6040516020016108e992919061206d565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a08816111a1565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90611f7f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610ac583610652565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b1783610652565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b595750610b588185610901565b5b80610b9757508373ffffffffffffffffffffffffffffffffffffffff16610b7f84610467565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bc082610652565b73ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90612103565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90612195565b60405180910390fd5b610c9283838360016111e2565b8273ffffffffffffffffffffffffffffffffffffffff16610cb282610652565b73ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90612103565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e9483838360016111e8565b505050565b610eb38282604051806020016040528060008152506111ee565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990612201565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110539190611817565b60405180910390a3505050565b61106b848484610ba0565b61107784848484611249565b6110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612293565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060600060016110e2846113d0565b01905060008167ffffffffffffffff81111561110157611100611b2f565b5b6040519080825280601f01601f1916602001820160405280156111335781602001600182028036833780820191505090505b509050600082602001820190505b600115611196578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161118a576111896122b3565b5b04945060008503611141575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166111c383610eb7565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b6111f88383611523565b6112056000848484611249565b611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612293565b60405180910390fd5b505050565b600061126a8473ffffffffffffffffffffffffffffffffffffffff16611740565b156113c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611293610a4a565b8786866040518563ffffffff1660e01b81526004016112b59493929190612337565b6020604051808303816000875af19250505080156112f157506040513d601f19601f820116820180604052508101906112ee9190612398565b60015b611373573d8060008114611321576040519150601f19603f3d011682016040523d82523d6000602084013e611326565b606091505b50600081510361136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290612293565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506113c8565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061142e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611424576114236122b3565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061146b576d04ee2d6d415b85acef81000000008381611461576114606122b3565b5b0492506020810190505b662386f26fc10000831061149a57662386f26fc1000083816114905761148f6122b3565b5b0492506010810190505b6305f5e10083106114c3576305f5e10083816114b9576114b86122b3565b5b0492506008810190505b61271083106114e85761271083816114de576114dd6122b3565b5b0492506004810190505b6064831061150b5760648381611501576115006122b3565b5b0492506002810190505b600a831061151a576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990612411565b60405180910390fd5b61159b816111a1565b156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d29061247d565b60405180910390fd5b6115e96000838360016111e2565b6115f2816111a1565b15611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116299061247d565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461173c6000838360016111e8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117ac81611777565b81146117b757600080fd5b50565b6000813590506117c9816117a3565b92915050565b6000602082840312156117e5576117e461176d565b5b60006117f3848285016117ba565b91505092915050565b60008115159050919050565b611811816117fc565b82525050565b600060208201905061182c6000830184611808565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561186c578082015181840152602081019050611851565b60008484015250505050565b6000601f19601f8301169050919050565b600061189482611832565b61189e818561183d565b93506118ae81856020860161184e565b6118b781611878565b840191505092915050565b600060208201905081810360008301526118dc8184611889565b905092915050565b6000819050919050565b6118f7816118e4565b811461190257600080fd5b50565b600081359050611914816118ee565b92915050565b6000602082840312156119305761192f61176d565b5b600061193e84828501611905565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061197282611947565b9050919050565b61198281611967565b82525050565b600060208201905061199d6000830184611979565b92915050565b6119ac81611967565b81146119b757600080fd5b50565b6000813590506119c9816119a3565b92915050565b600080604083850312156119e6576119e561176d565b5b60006119f4858286016119ba565b9250506020611a0585828601611905565b9150509250929050565b600080600060608486031215611a2857611a2761176d565b5b6000611a36868287016119ba565b9350506020611a47868287016119ba565b9250506040611a5886828701611905565b9150509250925092565b600060208284031215611a7857611a7761176d565b5b6000611a86848285016119ba565b91505092915050565b611a98816118e4565b82525050565b6000602082019050611ab36000830184611a8f565b92915050565b611ac2816117fc565b8114611acd57600080fd5b50565b600081359050611adf81611ab9565b92915050565b60008060408385031215611afc57611afb61176d565b5b6000611b0a858286016119ba565b9250506020611b1b85828601611ad0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b6782611878565b810181811067ffffffffffffffff82111715611b8657611b85611b2f565b5b80604052505050565b6000611b99611763565b9050611ba58282611b5e565b919050565b600067ffffffffffffffff821115611bc557611bc4611b2f565b5b611bce82611878565b9050602081019050919050565b82818337600083830152505050565b6000611bfd611bf884611baa565b611b8f565b905082815260208101848484011115611c1957611c18611b2a565b5b611c24848285611bdb565b509392505050565b600082601f830112611c4157611c40611b25565b5b8135611c51848260208601611bea565b91505092915050565b60008060008060808587031215611c7457611c7361176d565b5b6000611c82878288016119ba565b9450506020611c93878288016119ba565b9350506040611ca487828801611905565b925050606085013567ffffffffffffffff811115611cc557611cc4611772565b5b611cd187828801611c2c565b91505092959194509250565b60008060408385031215611cf457611cf361176d565b5b6000611d02858286016119ba565b9250506020611d13858286016119ba565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d6457607f821691505b602082108103611d7757611d76611d1d565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611dd960218361183d565b9150611de482611d7d565b604082019050919050565b60006020820190508181036000830152611e0881611dcc565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611e6b603d8361183d565b9150611e7682611e0f565b604082019050919050565b60006020820190508181036000830152611e9a81611e5e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611efd602d8361183d565b9150611f0882611ea1565b604082019050919050565b60006020820190508181036000830152611f2c81611ef0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000611f6960188361183d565b9150611f7482611f33565b602082019050919050565b60006020820190508181036000830152611f9881611f5c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000611ffb60298361183d565b915061200682611f9f565b604082019050919050565b6000602082019050818103600083015261202a81611fee565b9050919050565b600081905092915050565b600061204782611832565b6120518185612031565b935061206181856020860161184e565b80840191505092915050565b6000612079828561203c565b9150612085828461203c565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006120ed60258361183d565b91506120f882612091565b604082019050919050565b6000602082019050818103600083015261211c816120e0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061217f60248361183d565b915061218a82612123565b604082019050919050565b600060208201905081810360008301526121ae81612172565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006121eb60198361183d565b91506121f6826121b5565b602082019050919050565b6000602082019050818103600083015261221a816121de565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061227d60328361183d565b915061228882612221565b604082019050919050565b600060208201905081810360008301526122ac81612270565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000612309826122e2565b61231381856122ed565b935061232381856020860161184e565b61232c81611878565b840191505092915050565b600060808201905061234c6000830187611979565b6123596020830186611979565b6123666040830185611a8f565b818103606083015261237881846122fe565b905095945050505050565b600081519050612392816117a3565b92915050565b6000602082840312156123ae576123ad61176d565b5b60006123bc84828501612383565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006123fb60208361183d565b9150612406826123c5565b602082019050919050565b6000602082019050818103600083015261242a816123ee565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612467601c8361183d565b915061247282612431565b602082019050919050565b600060208201905081810360008301526124968161245a565b905091905056fea264697066735822122074cdecb99835c7275d46390904cbc908ec30ac7515c4aedef814aea06cee52b264736f6c63430008130033",
}
// ERC721ABI is the input ABI used to generate the binding from.
// Deprecated: Use ERC721MetaData.ABI instead.
var ERC721ABI = ERC721MetaData.ABI
// ERC721Bin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use ERC721MetaData.Bin instead.
var ERC721Bin = ERC721MetaData.Bin
// DeployERC721 deploys a new Ethereum contract, binding an instance of ERC721 to it.
func DeployERC721(auth *bind.TransactOpts, backend bind.ContractBackend, name_ string, symbol_ string) (common.Address, *types.Transaction, *ERC721, error) {
parsed, err := ERC721MetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC721Bin), backend, name_, symbol_)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil
}
// ERC721 is an auto generated Go binding around an Ethereum contract.
type ERC721 struct {
ERC721Caller // Read-only binding to the contract
ERC721Transactor // Write-only binding to the contract
ERC721Filterer // Log filterer for contract events
}
// ERC721Caller is an auto generated read-only Go binding around an Ethereum contract.
type ERC721Caller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ERC721Transactor is an auto generated write-only Go binding around an Ethereum contract.
type ERC721Transactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ERC721Filterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ERC721Session is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ERC721Session struct {
Contract *ERC721 // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ERC721CallerSession struct {
Contract *ERC721Caller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// ERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ERC721TransactorSession struct {
Contract *ERC721Transactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ERC721Raw is an auto generated low-level Go binding around an Ethereum contract.
type ERC721Raw struct {
Contract *ERC721 // Generic contract binding to access the raw methods on
}
// ERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ERC721CallerRaw struct {
Contract *ERC721Caller // Generic read-only contract binding to access the raw methods on
}
// ERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ERC721TransactorRaw struct {
Contract *ERC721Transactor // Generic write-only contract binding to access the raw methods on
}
// NewERC721 creates a new instance of ERC721, bound to a specific deployed contract.
func NewERC721(address common.Address, backend bind.ContractBackend) (*ERC721, error) {
contract, err := bindERC721(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil
}
// NewERC721Caller creates a new read-only instance of ERC721, bound to a specific deployed contract.
func NewERC721Caller(address common.Address, caller bind.ContractCaller) (*ERC721Caller, error) {
contract, err := bindERC721(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &ERC721Caller{contract: contract}, nil
}
// NewERC721Transactor creates a new write-only instance of ERC721, bound to a specific deployed contract.
func NewERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC721Transactor, error) {
contract, err := bindERC721(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &ERC721Transactor{contract: contract}, nil
}
// NewERC721Filterer creates a new log filterer instance of ERC721, bound to a specific deployed contract.
func NewERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC721Filterer, error) {
contract, err := bindERC721(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &ERC721Filterer{contract: contract}, nil
}
// bindERC721 binds a generic wrapper to an already deployed contract.
func bindERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(ERC721ABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ERC721 *ERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ERC721.Contract.ERC721Caller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ERC721 *ERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ERC721.Contract.ERC721Transactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ERC721 *ERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ERC721.Contract.ERC721Transactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ERC721 *ERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ERC721.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ERC721 *ERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ERC721.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ERC721 *ERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ERC721.Contract.contract.Transact(opts, method, params...)
}
// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_ERC721 *ERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "balanceOf", owner)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_ERC721 *ERC721Session) BalanceOf(owner common.Address) (*big.Int, error) {
return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner)
}
// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_ERC721 *ERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner)
}
// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_ERC721 *ERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "getApproved", tokenId)
if err != nil {
return *new(common.Address), err
}
out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
return out0, err
}
// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_ERC721 *ERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) {
return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId)
}
// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_ERC721 *ERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId)
}
// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_ERC721 *ERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
if err != nil {
return *new(bool), err
}
out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
return out0, err
}
// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_ERC721 *ERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator)
}
// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_ERC721 *ERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator)
}
// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC721 *ERC721Caller) Name(opts *bind.CallOpts) (string, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "name")
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC721 *ERC721Session) Name() (string, error) {
return _ERC721.Contract.Name(&_ERC721.CallOpts)
}
// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC721 *ERC721CallerSession) Name() (string, error) {
return _ERC721.Contract.Name(&_ERC721.CallOpts)
}
// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_ERC721 *ERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "ownerOf", tokenId)
if err != nil {
return *new(common.Address), err
}
out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
return out0, err
}
// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_ERC721 *ERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) {
return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId)
}
// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_ERC721 *ERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId)
}
// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_ERC721 *ERC721Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "supportsInterface", interfaceId)
if err != nil {
return *new(bool), err
}
out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
return out0, err
}
// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_ERC721 *ERC721Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId)
}
// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_ERC721 *ERC721CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId)
}
// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC721 *ERC721Caller) Symbol(opts *bind.CallOpts) (string, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "symbol")
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC721 *ERC721Session) Symbol() (string, error) {
return _ERC721.Contract.Symbol(&_ERC721.CallOpts)
}
// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC721 *ERC721CallerSession) Symbol() (string, error) {
return _ERC721.Contract.Symbol(&_ERC721.CallOpts)
}
// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_ERC721 *ERC721Caller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
var out []interface{}
err := _ERC721.contract.Call(opts, &out, "tokenURI", tokenId)
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_ERC721 *ERC721Session) TokenURI(tokenId *big.Int) (string, error) {
return _ERC721.Contract.TokenURI(&_ERC721.CallOpts, tokenId)
}
// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_ERC721 *ERC721CallerSession) TokenURI(tokenId *big.Int) (string, error) {
return _ERC721.Contract.TokenURI(&_ERC721.CallOpts, tokenId)
}
// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.contract.Transact(opts, "approve", to, tokenId)
}
// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId)
}
// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_ERC721 *ERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId)
}
// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Transactor) Mint(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.contract.Transact(opts, "mint", to, tokenId)
}
// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Session) Mint(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.Mint(&_ERC721.TransactOpts, to, tokenId)
}
// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address to, uint256 tokenId) returns()
func (_ERC721 *ERC721TransactorSession) Mint(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.Mint(&_ERC721.TransactOpts, to, tokenId)
}
// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
}
// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
}
// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721 *ERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
}
// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
func (_ERC721 *ERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
return _ERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
}
// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
func (_ERC721 *ERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, data)
}
// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
func (_ERC721 *ERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, data)
}
// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_ERC721 *ERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) {
return _ERC721.contract.Transact(opts, "setApprovalForAll", operator, approved)
}
// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_ERC721 *ERC721Session) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, operator, approved)
}
// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_ERC721 *ERC721TransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, operator, approved)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.contract.Transact(opts, "transferFrom", from, to, tokenId)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721 *ERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721 *ERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
}
// ERC721ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721 contract.
type ERC721ApprovalIterator struct {
Event *ERC721Approval // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data
logs chan types.Log // Log channel receiving the found contract events
sub ethereum.Subscription // Subscription for errors, completion and termination
done bool // Whether the subscription completed delivering logs
fail error // Occurred error to stop iteration
}
// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721ApprovalIterator) Next() bool {
// If the iterator failed, stop iterating
if it.fail != nil {
return false
}
// If the iterator completed, deliver directly whatever's available
if it.done {
select {
case log := <-it.logs:
it.Event = new(ERC721Approval)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
default:
return false
}
}
// Iterator still in progress, wait for either a data or an error event
select {
case log := <-it.logs:
it.Event = new(ERC721Approval)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
case err := <-it.sub.Err():
it.done = true
it.fail = err
return it.Next()
}
}
// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721ApprovalIterator) Error() error {
return it.fail
}
// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ERC721ApprovalIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
// ERC721Approval represents a Approval event raised by the ERC721 contract.
type ERC721Approval struct {
Owner common.Address
Approved common.Address
TokenId *big.Int
Raw types.Log // Blockchain specific contextual infos
}
// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_ERC721 *ERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721ApprovalIterator, error) {
var ownerRule []interface{}
for _, ownerItem := range owner {
ownerRule = append(ownerRule, ownerItem)
}
var approvedRule []interface{}
for _, approvedItem := range approved {
approvedRule = append(approvedRule, approvedItem)
}
var tokenIdRule []interface{}
for _, tokenIdItem := range tokenId {
tokenIdRule = append(tokenIdRule, tokenIdItem)
}
logs, sub, err := _ERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
if err != nil {
return nil, err
}
return &ERC721ApprovalIterator{contract: _ERC721.contract, event: "Approval", logs: logs, sub: sub}, nil
}
// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_ERC721 *ERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
var ownerRule []interface{}
for _, ownerItem := range owner {
ownerRule = append(ownerRule, ownerItem)
}
var approvedRule []interface{}
for _, approvedItem := range approved {
approvedRule = append(approvedRule, approvedItem)
}
var tokenIdRule []interface{}
for _, tokenIdItem := range tokenId {
tokenIdRule = append(tokenIdRule, tokenIdItem)
}
logs, sub, err := _ERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
if err != nil {
return nil, err
}
return event.NewSubscription(func(quit <-chan struct{}) error {
defer sub.Unsubscribe()
for {
select {
case log := <-logs:
// New log arrived, parse the event and forward to the user
event := new(ERC721Approval)
if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil {
return err
}
event.Raw = log
select {
case sink <- event:
case err := <-sub.Err():
return err
case <-quit:
return nil
}
case err := <-sub.Err():
return err
case <-quit:
return nil
}
}
}), nil
}
// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_ERC721 *ERC721Filterer) ParseApproval(log types.Log) (*ERC721Approval, error) {
event := new(ERC721Approval)
if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
// ERC721ApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721 contract.
type ERC721ApprovalForAllIterator struct {
Event *ERC721ApprovalForAll // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data
logs chan types.Log // Log channel receiving the found contract events
sub ethereum.Subscription // Subscription for errors, completion and termination
done bool // Whether the subscription completed delivering logs
fail error // Occurred error to stop iteration
}
// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721ApprovalForAllIterator) Next() bool {
// If the iterator failed, stop iterating
if it.fail != nil {
return false
}
// If the iterator completed, deliver directly whatever's available
if it.done {
select {
case log := <-it.logs:
it.Event = new(ERC721ApprovalForAll)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
default:
return false
}
}
// Iterator still in progress, wait for either a data or an error event
select {
case log := <-it.logs:
it.Event = new(ERC721ApprovalForAll)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
case err := <-it.sub.Err():
it.done = true
it.fail = err
return it.Next()
}
}
// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721ApprovalForAllIterator) Error() error {
return it.fail
}
// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ERC721ApprovalForAllIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
// ERC721ApprovalForAll represents a ApprovalForAll event raised by the ERC721 contract.
type ERC721ApprovalForAll struct {
Owner common.Address
Operator common.Address
Approved bool
Raw types.Log // Blockchain specific contextual infos
}
// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_ERC721 *ERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721ApprovalForAllIterator, error) {
var ownerRule []interface{}
for _, ownerItem := range owner {
ownerRule = append(ownerRule, ownerItem)
}
var operatorRule []interface{}
for _, operatorItem := range operator {
operatorRule = append(operatorRule, operatorItem)
}
logs, sub, err := _ERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
if err != nil {
return nil, err
}
return &ERC721ApprovalForAllIterator{contract: _ERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
}
// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_ERC721 *ERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
var ownerRule []interface{}
for _, ownerItem := range owner {
ownerRule = append(ownerRule, ownerItem)
}
var operatorRule []interface{}
for _, operatorItem := range operator {
operatorRule = append(operatorRule, operatorItem)
}
logs, sub, err := _ERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
if err != nil {
return nil, err
}
return event.NewSubscription(func(quit <-chan struct{}) error {
defer sub.Unsubscribe()
for {
select {
case log := <-logs:
// New log arrived, parse the event and forward to the user
event := new(ERC721ApprovalForAll)
if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
return err
}
event.Raw = log
select {
case sink <- event:
case err := <-sub.Err():
return err
case <-quit:
return nil
}
case err := <-sub.Err():
return err
case <-quit:
return nil
}
}
}), nil
}
// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_ERC721 *ERC721Filterer) ParseApprovalForAll(log types.Log) (*ERC721ApprovalForAll, error) {
event := new(ERC721ApprovalForAll)
if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
// ERC721TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721 contract.
type ERC721TransferIterator struct {
Event *ERC721Transfer // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data
logs chan types.Log // Log channel receiving the found contract events
sub ethereum.Subscription // Subscription for errors, completion and termination
done bool // Whether the subscription completed delivering logs
fail error // Occurred error to stop iteration
}
// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721TransferIterator) Next() bool {
// If the iterator failed, stop iterating
if it.fail != nil {
return false
}
// If the iterator completed, deliver directly whatever's available
if it.done {
select {
case log := <-it.logs:
it.Event = new(ERC721Transfer)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
default:
return false
}
}
// Iterator still in progress, wait for either a data or an error event
select {
case log := <-it.logs:
it.Event = new(ERC721Transfer)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
}
it.Event.Raw = log
return true
case err := <-it.sub.Err():
it.done = true
it.fail = err
return it.Next()
}
}
// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721TransferIterator) Error() error {
return it.fail
}
// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ERC721TransferIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
// ERC721Transfer represents a Transfer event raised by the ERC721 contract.
type ERC721Transfer struct {
From common.Address
To common.Address
TokenId *big.Int
Raw types.Log // Blockchain specific contextual infos
}
// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_ERC721 *ERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721TransferIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
fromRule = append(fromRule, fromItem)
}
var toRule []interface{}
for _, toItem := range to {
toRule = append(toRule, toItem)
}
var tokenIdRule []interface{}
for _, tokenIdItem := range tokenId {
tokenIdRule = append(tokenIdRule, tokenIdItem)
}
logs, sub, err := _ERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
if err != nil {
return nil, err
}
return &ERC721TransferIterator{contract: _ERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil
}
// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_ERC721 *ERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
fromRule = append(fromRule, fromItem)
}
var toRule []interface{}
for _, toItem := range to {
toRule = append(toRule, toItem)
}
var tokenIdRule []interface{}
for _, tokenIdItem := range tokenId {
tokenIdRule = append(tokenIdRule, tokenIdItem)
}
logs, sub, err := _ERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
if err != nil {
return nil, err
}
return event.NewSubscription(func(quit <-chan struct{}) error {
defer sub.Unsubscribe()
for {
select {
case log := <-logs:
// New log arrived, parse the event and forward to the user
event := new(ERC721Transfer)
if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
return err
}
event.Raw = log
select {
case sink <- event:
case err := <-sub.Err():
return err
case <-quit:
return nil
}
case err := <-sub.Err():
return err
case <-quit:
return nil
}
}
}), nil
}
// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_ERC721 *ERC721Filterer) ParseTransfer(log types.Log) (*ERC721Transfer, error) {
event := new(ERC721Transfer)
if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken721
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// NftTokenTransferMetaData contains all meta data concerning the NftTokenTransfer contract.
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\"}]",
Bin: "0x608060405234801561001057600080fd5b506103fd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063150b7a021461003b57806315dacbea1461006b575b600080fd5b6100556004803603810190610050919061022d565b610087565b60405161006291906102f0565b60405180910390f35b6100856004803603810190610080919061030b565b6100b5565b005b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b81526004016100f293929190610390565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b5050505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061015f82610134565b9050919050565b61016f81610154565b811461017a57600080fd5b50565b60008135905061018c81610166565b92915050565b6000819050919050565b6101a581610192565b81146101b057600080fd5b50565b6000813590506101c28161019c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126101ed576101ec6101c8565b5b8235905067ffffffffffffffff81111561020a576102096101cd565b5b602083019150836001820283011115610226576102256101d2565b5b9250929050565b6000806000806000608086880312156102495761024861012a565b5b60006102578882890161017d565b95505060206102688882890161017d565b9450506040610279888289016101b3565b935050606086013567ffffffffffffffff81111561029a5761029961012f565b5b6102a6888289016101d7565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6102ea816102b5565b82525050565b600060208201905061030560008301846102e1565b92915050565b600080600080608085870312156103255761032461012a565b5b60006103338782880161017d565b94505060206103448782880161017d565b93505060406103558782880161017d565b9250506060610366878288016101b3565b91505092959194509250565b61037b81610154565b82525050565b61038a81610192565b82525050565b60006060820190506103a56000830186610372565b6103b26020830185610372565b6103bf6040830184610381565b94935050505056fea26469706673582212201627a740fc78a73b23519ab2f661d180ab72042122622361af6aa71305560f7364736f6c63430008130033",
}
// NftTokenTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use NftTokenTransferMetaData.ABI instead.
var NftTokenTransferABI = NftTokenTransferMetaData.ABI
// NftTokenTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use NftTokenTransferMetaData.Bin instead.
var NftTokenTransferBin = NftTokenTransferMetaData.Bin
// DeployNftTokenTransfer deploys a new Ethereum contract, binding an instance of NftTokenTransfer to it.
func DeployNftTokenTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *NftTokenTransfer, error) {
parsed, err := NftTokenTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(NftTokenTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &NftTokenTransfer{NftTokenTransferCaller: NftTokenTransferCaller{contract: contract}, NftTokenTransferTransactor: NftTokenTransferTransactor{contract: contract}, NftTokenTransferFilterer: NftTokenTransferFilterer{contract: contract}}, nil
}
// NftTokenTransfer is an auto generated Go binding around an Ethereum contract.
type NftTokenTransfer struct {
NftTokenTransferCaller // Read-only binding to the contract
NftTokenTransferTransactor // Write-only binding to the contract
NftTokenTransferFilterer // Log filterer for contract events
}
// NftTokenTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type NftTokenTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// NftTokenTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type NftTokenTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// NftTokenTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type NftTokenTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// NftTokenTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type NftTokenTransferSession struct {
Contract *NftTokenTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// NftTokenTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type NftTokenTransferCallerSession struct {
Contract *NftTokenTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// NftTokenTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type NftTokenTransferTransactorSession struct {
Contract *NftTokenTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// NftTokenTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type NftTokenTransferRaw struct {
Contract *NftTokenTransfer // Generic contract binding to access the raw methods on
}
// NftTokenTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type NftTokenTransferCallerRaw struct {
Contract *NftTokenTransferCaller // Generic read-only contract binding to access the raw methods on
}
// NftTokenTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type NftTokenTransferTransactorRaw struct {
Contract *NftTokenTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewNftTokenTransfer creates a new instance of NftTokenTransfer, bound to a specific deployed contract.
func NewNftTokenTransfer(address common.Address, backend bind.ContractBackend) (*NftTokenTransfer, error) {
contract, err := bindNftTokenTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &NftTokenTransfer{NftTokenTransferCaller: NftTokenTransferCaller{contract: contract}, NftTokenTransferTransactor: NftTokenTransferTransactor{contract: contract}, NftTokenTransferFilterer: NftTokenTransferFilterer{contract: contract}}, nil
}
// NewNftTokenTransferCaller creates a new read-only instance of NftTokenTransfer, bound to a specific deployed contract.
func NewNftTokenTransferCaller(address common.Address, caller bind.ContractCaller) (*NftTokenTransferCaller, error) {
contract, err := bindNftTokenTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &NftTokenTransferCaller{contract: contract}, nil
}
// NewNftTokenTransferTransactor creates a new write-only instance of NftTokenTransfer, bound to a specific deployed contract.
func NewNftTokenTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*NftTokenTransferTransactor, error) {
contract, err := bindNftTokenTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &NftTokenTransferTransactor{contract: contract}, nil
}
// NewNftTokenTransferFilterer creates a new log filterer instance of NftTokenTransfer, bound to a specific deployed contract.
func NewNftTokenTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*NftTokenTransferFilterer, error) {
contract, err := bindNftTokenTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &NftTokenTransferFilterer{contract: contract}, nil
}
// bindNftTokenTransfer binds a generic wrapper to an already deployed contract.
func bindNftTokenTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(NftTokenTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_NftTokenTransfer *NftTokenTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _NftTokenTransfer.Contract.NftTokenTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_NftTokenTransfer *NftTokenTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.NftTokenTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_NftTokenTransfer *NftTokenTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.NftTokenTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_NftTokenTransfer *NftTokenTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _NftTokenTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_NftTokenTransfer *NftTokenTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_NftTokenTransfer *NftTokenTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.contract.Transact(opts, method, params...)
}
// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02.
//
// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4)
func (_NftTokenTransfer *NftTokenTransferCaller) OnERC721Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) {
var out []interface{}
err := _NftTokenTransfer.contract.Call(opts, &out, "onERC721Received", arg0, arg1, arg2, arg3)
if err != nil {
return *new([4]byte), err
}
out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte)
return out0, err
}
// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02.
//
// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4)
func (_NftTokenTransfer *NftTokenTransferSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) {
return _NftTokenTransfer.Contract.OnERC721Received(&_NftTokenTransfer.CallOpts, arg0, arg1, arg2, arg3)
}
// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02.
//
// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4)
func (_NftTokenTransfer *NftTokenTransferCallerSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) {
return _NftTokenTransfer.Contract.OnERC721Received(&_NftTokenTransfer.CallOpts, arg0, arg1, arg2, arg3)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x15dacbea.
//
// Solidity: function transferFrom(address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_NftTokenTransfer *NftTokenTransferTransactor) TransferFrom(opts *bind.TransactOpts, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _NftTokenTransfer.contract.Transact(opts, "transferFrom", tokenAddr, from, to, tokenId)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x15dacbea.
//
// Solidity: function transferFrom(address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_NftTokenTransfer *NftTokenTransferSession) TransferFrom(tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.TransferFrom(&_NftTokenTransfer.TransactOpts, tokenAddr, from, to, tokenId)
}
// TransferFrom is a paid mutator transaction binding the contract method 0x15dacbea.
//
// Solidity: function transferFrom(address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_NftTokenTransfer *NftTokenTransferTransactorSession) TransferFrom(tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _NftTokenTransfer.Contract.TransferFrom(&_NftTokenTransfer.TransactOpts, tokenAddr, from, to, tokenId)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken721
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// OneNftTokenTransferMetaData contains all meta data concerning the OneNftTokenTransfer contract.
var OneNftTokenTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ntTokenTransfer\",\"type\":\"address\"},{\"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\":\"oneTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50610271806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d39aee2b14610030575b600080fd5b61004a6004803603810190610045919061015d565b61004c565b005b8473ffffffffffffffffffffffffffffffffffffffff166315dacbea858585856040518563ffffffff1660e01b815260040161008b94939291906101f6565b600060405180830381600087803b1580156100a557600080fd5b505af11580156100b9573d6000803e3d6000fd5b505050505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f4826100c9565b9050919050565b610104816100e9565b811461010f57600080fd5b50565b600081359050610121816100fb565b92915050565b6000819050919050565b61013a81610127565b811461014557600080fd5b50565b60008135905061015781610131565b92915050565b600080600080600060a08688031215610179576101786100c4565b5b600061018788828901610112565b955050602061019888828901610112565b94505060406101a988828901610112565b93505060606101ba88828901610112565b92505060806101cb88828901610148565b9150509295509295909350565b6101e1816100e9565b82525050565b6101f081610127565b82525050565b600060808201905061020b60008301876101d8565b61021860208301866101d8565b61022560408301856101d8565b61023260608301846101e7565b9594505050505056fea2646970667358221220b6fbdaba9e91bdfe1827590847ea5725a7fbb505499e7906d931308f2053cbaa64736f6c63430008130033",
}
// OneNftTokenTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use OneNftTokenTransferMetaData.ABI instead.
var OneNftTokenTransferABI = OneNftTokenTransferMetaData.ABI
// OneNftTokenTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use OneNftTokenTransferMetaData.Bin instead.
var OneNftTokenTransferBin = OneNftTokenTransferMetaData.Bin
// DeployOneNftTokenTransfer deploys a new Ethereum contract, binding an instance of OneNftTokenTransfer to it.
func DeployOneNftTokenTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OneNftTokenTransfer, error) {
parsed, err := OneNftTokenTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OneNftTokenTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &OneNftTokenTransfer{OneNftTokenTransferCaller: OneNftTokenTransferCaller{contract: contract}, OneNftTokenTransferTransactor: OneNftTokenTransferTransactor{contract: contract}, OneNftTokenTransferFilterer: OneNftTokenTransferFilterer{contract: contract}}, nil
}
// OneNftTokenTransfer is an auto generated Go binding around an Ethereum contract.
type OneNftTokenTransfer struct {
OneNftTokenTransferCaller // Read-only binding to the contract
OneNftTokenTransferTransactor // Write-only binding to the contract
OneNftTokenTransferFilterer // Log filterer for contract events
}
// OneNftTokenTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type OneNftTokenTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneNftTokenTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type OneNftTokenTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneNftTokenTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type OneNftTokenTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneNftTokenTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type OneNftTokenTransferSession struct {
Contract *OneNftTokenTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneNftTokenTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type OneNftTokenTransferCallerSession struct {
Contract *OneNftTokenTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// OneNftTokenTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type OneNftTokenTransferTransactorSession struct {
Contract *OneNftTokenTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneNftTokenTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type OneNftTokenTransferRaw struct {
Contract *OneNftTokenTransfer // Generic contract binding to access the raw methods on
}
// OneNftTokenTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type OneNftTokenTransferCallerRaw struct {
Contract *OneNftTokenTransferCaller // Generic read-only contract binding to access the raw methods on
}
// OneNftTokenTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type OneNftTokenTransferTransactorRaw struct {
Contract *OneNftTokenTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewOneNftTokenTransfer creates a new instance of OneNftTokenTransfer, bound to a specific deployed contract.
func NewOneNftTokenTransfer(address common.Address, backend bind.ContractBackend) (*OneNftTokenTransfer, error) {
contract, err := bindOneNftTokenTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &OneNftTokenTransfer{OneNftTokenTransferCaller: OneNftTokenTransferCaller{contract: contract}, OneNftTokenTransferTransactor: OneNftTokenTransferTransactor{contract: contract}, OneNftTokenTransferFilterer: OneNftTokenTransferFilterer{contract: contract}}, nil
}
// NewOneNftTokenTransferCaller creates a new read-only instance of OneNftTokenTransfer, bound to a specific deployed contract.
func NewOneNftTokenTransferCaller(address common.Address, caller bind.ContractCaller) (*OneNftTokenTransferCaller, error) {
contract, err := bindOneNftTokenTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &OneNftTokenTransferCaller{contract: contract}, nil
}
// NewOneNftTokenTransferTransactor creates a new write-only instance of OneNftTokenTransfer, bound to a specific deployed contract.
func NewOneNftTokenTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*OneNftTokenTransferTransactor, error) {
contract, err := bindOneNftTokenTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &OneNftTokenTransferTransactor{contract: contract}, nil
}
// NewOneNftTokenTransferFilterer creates a new log filterer instance of OneNftTokenTransfer, bound to a specific deployed contract.
func NewOneNftTokenTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*OneNftTokenTransferFilterer, error) {
contract, err := bindOneNftTokenTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &OneNftTokenTransferFilterer{contract: contract}, nil
}
// bindOneNftTokenTransfer binds a generic wrapper to an already deployed contract.
func bindOneNftTokenTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(OneNftTokenTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneNftTokenTransfer *OneNftTokenTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneNftTokenTransfer.Contract.OneNftTokenTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneNftTokenTransfer *OneNftTokenTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneNftTokenTransfer.Contract.OneNftTokenTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneNftTokenTransfer *OneNftTokenTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneNftTokenTransfer.Contract.OneNftTokenTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneNftTokenTransfer *OneNftTokenTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneNftTokenTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneNftTokenTransfer *OneNftTokenTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneNftTokenTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneNftTokenTransfer *OneNftTokenTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneNftTokenTransfer.Contract.contract.Transact(opts, method, params...)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xd39aee2b.
//
// Solidity: function oneTransferFrom(address ntTokenTransfer, address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_OneNftTokenTransfer *OneNftTokenTransferTransactor) OneTransferFrom(opts *bind.TransactOpts, ntTokenTransfer common.Address, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _OneNftTokenTransfer.contract.Transact(opts, "oneTransferFrom", ntTokenTransfer, tokenAddr, from, to, tokenId)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xd39aee2b.
//
// Solidity: function oneTransferFrom(address ntTokenTransfer, address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_OneNftTokenTransfer *OneNftTokenTransferSession) OneTransferFrom(ntTokenTransfer common.Address, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _OneNftTokenTransfer.Contract.OneTransferFrom(&_OneNftTokenTransfer.TransactOpts, ntTokenTransfer, tokenAddr, from, to, tokenId)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xd39aee2b.
//
// Solidity: function oneTransferFrom(address ntTokenTransfer, address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_OneNftTokenTransfer *OneNftTokenTransferTransactorSession) OneTransferFrom(ntTokenTransfer common.Address, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _OneNftTokenTransfer.Contract.OneTransferFrom(&_OneNftTokenTransfer.TransactOpts, ntTokenTransfer, tokenAddr, from, to, tokenId)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractToken721
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// TwoNftTokenTransferMetaData contains all meta data concerning the TwoNftTokenTransfer contract.
var TwoNftTokenTransferMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oneNftTokenTransfer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nftTokenTransfer\",\"type\":\"address\"},{\"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\":\"oneTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50610294806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e1b190f314610030575b600080fd5b61004a60048036038101906100459190610160565b61004c565b005b8573ffffffffffffffffffffffffffffffffffffffff1663d39aee2b86868686866040518663ffffffff1660e01b815260040161008d95949392919061020b565b600060405180830381600087803b1580156100a757600080fd5b505af11580156100bb573d6000803e3d6000fd5b50505050505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f7826100cc565b9050919050565b610107816100ec565b811461011257600080fd5b50565b600081359050610124816100fe565b92915050565b6000819050919050565b61013d8161012a565b811461014857600080fd5b50565b60008135905061015a81610134565b92915050565b60008060008060008060c0878903121561017d5761017c6100c7565b5b600061018b89828a01610115565b965050602061019c89828a01610115565b95505060406101ad89828a01610115565b94505060606101be89828a01610115565b93505060806101cf89828a01610115565b92505060a06101e089828a0161014b565b9150509295509295509295565b6101f6816100ec565b82525050565b6102058161012a565b82525050565b600060a08201905061022060008301886101ed565b61022d60208301876101ed565b61023a60408301866101ed565b61024760608301856101ed565b61025460808301846101fc565b969550505050505056fea26469706673582212207e0a949b8c737fb3a9a5d6de492e31bb7b7085ae5df772a3374ade710d36d40964736f6c63430008130033",
}
// TwoNftTokenTransferABI is the input ABI used to generate the binding from.
// Deprecated: Use TwoNftTokenTransferMetaData.ABI instead.
var TwoNftTokenTransferABI = TwoNftTokenTransferMetaData.ABI
// TwoNftTokenTransferBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use TwoNftTokenTransferMetaData.Bin instead.
var TwoNftTokenTransferBin = TwoNftTokenTransferMetaData.Bin
// DeployTwoNftTokenTransfer deploys a new Ethereum contract, binding an instance of TwoNftTokenTransfer to it.
func DeployTwoNftTokenTransfer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TwoNftTokenTransfer, error) {
parsed, err := TwoNftTokenTransferMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TwoNftTokenTransferBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &TwoNftTokenTransfer{TwoNftTokenTransferCaller: TwoNftTokenTransferCaller{contract: contract}, TwoNftTokenTransferTransactor: TwoNftTokenTransferTransactor{contract: contract}, TwoNftTokenTransferFilterer: TwoNftTokenTransferFilterer{contract: contract}}, nil
}
// TwoNftTokenTransfer is an auto generated Go binding around an Ethereum contract.
type TwoNftTokenTransfer struct {
TwoNftTokenTransferCaller // Read-only binding to the contract
TwoNftTokenTransferTransactor // Write-only binding to the contract
TwoNftTokenTransferFilterer // Log filterer for contract events
}
// TwoNftTokenTransferCaller is an auto generated read-only Go binding around an Ethereum contract.
type TwoNftTokenTransferCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoNftTokenTransferTransactor is an auto generated write-only Go binding around an Ethereum contract.
type TwoNftTokenTransferTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoNftTokenTransferFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type TwoNftTokenTransferFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// TwoNftTokenTransferSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TwoNftTokenTransferSession struct {
Contract *TwoNftTokenTransfer // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TwoNftTokenTransferCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type TwoNftTokenTransferCallerSession struct {
Contract *TwoNftTokenTransferCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// TwoNftTokenTransferTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type TwoNftTokenTransferTransactorSession struct {
Contract *TwoNftTokenTransferTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// TwoNftTokenTransferRaw is an auto generated low-level Go binding around an Ethereum contract.
type TwoNftTokenTransferRaw struct {
Contract *TwoNftTokenTransfer // Generic contract binding to access the raw methods on
}
// TwoNftTokenTransferCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type TwoNftTokenTransferCallerRaw struct {
Contract *TwoNftTokenTransferCaller // Generic read-only contract binding to access the raw methods on
}
// TwoNftTokenTransferTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type TwoNftTokenTransferTransactorRaw struct {
Contract *TwoNftTokenTransferTransactor // Generic write-only contract binding to access the raw methods on
}
// NewTwoNftTokenTransfer creates a new instance of TwoNftTokenTransfer, bound to a specific deployed contract.
func NewTwoNftTokenTransfer(address common.Address, backend bind.ContractBackend) (*TwoNftTokenTransfer, error) {
contract, err := bindTwoNftTokenTransfer(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &TwoNftTokenTransfer{TwoNftTokenTransferCaller: TwoNftTokenTransferCaller{contract: contract}, TwoNftTokenTransferTransactor: TwoNftTokenTransferTransactor{contract: contract}, TwoNftTokenTransferFilterer: TwoNftTokenTransferFilterer{contract: contract}}, nil
}
// NewTwoNftTokenTransferCaller creates a new read-only instance of TwoNftTokenTransfer, bound to a specific deployed contract.
func NewTwoNftTokenTransferCaller(address common.Address, caller bind.ContractCaller) (*TwoNftTokenTransferCaller, error) {
contract, err := bindTwoNftTokenTransfer(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &TwoNftTokenTransferCaller{contract: contract}, nil
}
// NewTwoNftTokenTransferTransactor creates a new write-only instance of TwoNftTokenTransfer, bound to a specific deployed contract.
func NewTwoNftTokenTransferTransactor(address common.Address, transactor bind.ContractTransactor) (*TwoNftTokenTransferTransactor, error) {
contract, err := bindTwoNftTokenTransfer(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &TwoNftTokenTransferTransactor{contract: contract}, nil
}
// NewTwoNftTokenTransferFilterer creates a new log filterer instance of TwoNftTokenTransfer, bound to a specific deployed contract.
func NewTwoNftTokenTransferFilterer(address common.Address, filterer bind.ContractFilterer) (*TwoNftTokenTransferFilterer, error) {
contract, err := bindTwoNftTokenTransfer(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &TwoNftTokenTransferFilterer{contract: contract}, nil
}
// bindTwoNftTokenTransfer binds a generic wrapper to an already deployed contract.
func bindTwoNftTokenTransfer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(TwoNftTokenTransferABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TwoNftTokenTransfer *TwoNftTokenTransferRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TwoNftTokenTransfer.Contract.TwoNftTokenTransferCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TwoNftTokenTransfer *TwoNftTokenTransferRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TwoNftTokenTransfer.Contract.TwoNftTokenTransferTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TwoNftTokenTransfer *TwoNftTokenTransferRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TwoNftTokenTransfer.Contract.TwoNftTokenTransferTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_TwoNftTokenTransfer *TwoNftTokenTransferCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _TwoNftTokenTransfer.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_TwoNftTokenTransfer *TwoNftTokenTransferTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _TwoNftTokenTransfer.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_TwoNftTokenTransfer *TwoNftTokenTransferTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _TwoNftTokenTransfer.Contract.contract.Transact(opts, method, params...)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xe1b190f3.
//
// Solidity: function oneTransferFrom(address oneNftTokenTransfer, address nftTokenTransfer, address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_TwoNftTokenTransfer *TwoNftTokenTransferTransactor) OneTransferFrom(opts *bind.TransactOpts, oneNftTokenTransfer common.Address, nftTokenTransfer common.Address, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _TwoNftTokenTransfer.contract.Transact(opts, "oneTransferFrom", oneNftTokenTransfer, nftTokenTransfer, tokenAddr, from, to, tokenId)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xe1b190f3.
//
// Solidity: function oneTransferFrom(address oneNftTokenTransfer, address nftTokenTransfer, address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_TwoNftTokenTransfer *TwoNftTokenTransferSession) OneTransferFrom(oneNftTokenTransfer common.Address, nftTokenTransfer common.Address, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _TwoNftTokenTransfer.Contract.OneTransferFrom(&_TwoNftTokenTransfer.TransactOpts, oneNftTokenTransfer, nftTokenTransfer, tokenAddr, from, to, tokenId)
}
// OneTransferFrom is a paid mutator transaction binding the contract method 0xe1b190f3.
//
// Solidity: function oneTransferFrom(address oneNftTokenTransfer, address nftTokenTransfer, address tokenAddr, address from, address to, uint256 tokenId) returns()
func (_TwoNftTokenTransfer *TwoNftTokenTransferTransactorSession) OneTransferFrom(oneNftTokenTransfer common.Address, nftTokenTransfer common.Address, tokenAddr common.Address, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
return _TwoNftTokenTransfer.Contract.OneTransferFrom(&_TwoNftTokenTransfer.TransactOpts, oneNftTokenTransfer, nftTokenTransfer, tokenAddr, from, to, tokenId)
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
import "../../interface/IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(
bytes4 interfaceId
) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.2) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.9;
import "./ERC165.sol";
import "../../interface/IERC721.sol";
import "../../library/Address.sol";
import "../../library/Strings.sol";
import "../../interface/IERC721Receiver.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(
bytes4 interfaceId
) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(
address owner
) public view virtual override returns (uint256) {
require(
owner != address(0),
"ERC721: address zero is not a valid owner"
);
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(
uint256 tokenId
) public view virtual override returns (address) {
address owner = _ownerOf(tokenId);
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(
uint256 tokenId
) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return
bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, tokenId.toString()))
: "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner or approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(
uint256 tokenId
) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(
address operator,
bool approved
) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(
address owner,
address operator
) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: caller is not token owner or approved"
);
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: caller is not token owner or approved"
);
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
*/
function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
return _owners[tokenId];
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _ownerOf(tokenId) != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(
address spender,
uint256 tokenId
) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner ||
isApprovedForAll(owner, spender) ||
getApproved(tokenId) == spender);
}
function mint(address to, uint256 tokenId) public {
_safeMint(to, tokenId);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId, 1);
// Check that tokenId was not minted by `_beforeTokenTransfer` hook
require(!_exists(tokenId), "ERC721: token already minted");
unchecked {
// Will not overflow unless all 2**256 token ids are minted to the same owner.
// Given that tokens are minted one by one, it is impossible in practice that
// this ever happens. Might change if we allow batch minting.
// The ERC fails to describe this case.
_balances[to] += 1;
}
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId, 1);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
* This is an internal function that does not check if the sender is authorized to operate on the token.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId, 1);
// Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook
owner = ERC721.ownerOf(tokenId);
// Clear approvals
delete _tokenApprovals[tokenId];
unchecked {
// Cannot overflow, as that would require more tokens to be burned/transferred
// out than the owner initially received through minting and transferring in.
_balances[owner] -= 1;
}
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId, 1);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(
ERC721.ownerOf(tokenId) == from,
"ERC721: transfer from incorrect owner"
);
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId, 1);
// Check that tokenId was not transferred by `_beforeTokenTransfer` hook
require(
ERC721.ownerOf(tokenId) == from,
"ERC721: transfer from incorrect owner"
);
// Clear approvals from the previous owner
delete _tokenApprovals[tokenId];
unchecked {
// `_balances[from]` cannot overflow for the same reason as described in `_burn`:
// `from`'s balance is the number of token held, which is at least one before the current
// transfer.
// `_balances[to]` could overflow in the conditions described in `_mint`. That would require
// all 2**256 token ids to be minted, which in practice is impossible.
_balances[from] -= 1;
_balances[to] += 1;
}
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId, 1);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try
IERC721Receiver(to).onERC721Received(
_msgSender(),
from,
tokenId,
data
)
returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert(
"ERC721: transfer to non ERC721Receiver implementer"
);
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is
* used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.
* - When `from` is zero, the tokens will be minted for `to`.
* - When `to` is zero, ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
* - `batchSize` is non-zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 firstTokenId,
uint256 batchSize
) internal virtual {}
/**
* @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is
* used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.
* - When `from` is zero, the tokens were minted for `to`.
* - When `to` is zero, ``from``'s tokens were burned.
* - `from` and `to` are never both zero.
* - `batchSize` is non-zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 firstTokenId,
uint256 batchSize
) internal virtual {}
/**
* @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override.
*
* WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant
* being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such
* that `ownerOf(tokenId)` is `a`.
*/
// solhint-disable-next-line func-name-mixedcase
function __unsafe_increaseBalance(
address account,
uint256 amount
) internal {
_balances[account] += amount;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "../../interface/IERC721.sol";
import "../../interface/IERC721Receiver.sol";
contract NftTokenTransfer is IERC721Receiver{
function transferFrom(
address tokenAddr,
address from,
address to,
uint256 tokenId
) external {
IERC721(tokenAddr).safeTransferFrom(from, to, tokenId);
}
function onERC721Received(
address, address, uint256, bytes calldata
) public pure returns (bytes4) {
return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "../../interface/INftTokenTransfer.sol";
contract OneNftTokenTransfer {
function oneTransferFrom(
address ntTokenTransfer,
address tokenAddr,
address from,
address to,
uint256 tokenId
) external {
INftTokenTransfer(ntTokenTransfer).transferFrom(
tokenAddr,
from,
to,
tokenId
);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "../../interface/IOneNftTokenTransfer.sol";
contract TwoNftTokenTransfer {
function twoTransferFrom(
address oneNftTokenTransfer,
address nftTokenTransfer,
address tokenAddr,
address from,
address to,
uint256 tokenId
) external {
IOneNftTokenTransfer(oneNftTokenTransfer).oneTransferFrom(
nftTokenTransfer,
tokenAddr,
from,
to,
tokenId
);
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
interface IChainCoinTransfer {
function transfer(address[] memory to, uint256 value) external;
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.9;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.9;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
function approveFrom(
address owner,
address spender,
uint256 amount
) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(
address indexed from,
address indexed to,
uint256 indexed tokenId
);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(
address indexed owner,
address indexed approved,
uint256 indexed tokenId
);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(
address indexed owner,
address indexed operator,
bool approved
);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(
uint256 tokenId
) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(
address owner,
address operator
) external view returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.9;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
interface INftTokenTransfer {
function transferFrom(
address tokenAddr,
address from,
address to,
uint256 tokenId
) external;
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
interface IOneChainCoinTransfer {
function oneTransfer(
address chainCoinAddr,
address[] memory to,
uint256 value
) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
interface IOneNftTokenTransfer {
function oneTransferFrom(
address nftTokenTransfer,
address tokenAddr,
address from,
address to,
uint256 tokenId
) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
interface IOneTokenTransfer {
function oneTransfer(
address tokenTransferAddr,
address token,
address[] memory to,
uint256 amount
) external;
function oneTokenTransferFrom(
address tokenTransferAddr,
address token,
address from,
address to,
uint256 amount
) external;
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
interface IReadWriteVar {
function setVarMap(uint256 key, uint256 value) external;
function getVarMap(uint256 key) external view returns (uint256);
function pushVarMapArray(uint256 key, uint256 value) external;
function getVarMapArray(
uint256 key
) external view returns (uint256[] memory);
function setVarMapArray(uint256 key, uint256[] memory valueArr) external;
function pushVarUintArray(uint256 value) external;
function setVarUintArray(uint256[] memory value) external;
function getVarUintArray() external view returns (uint256[] memory);
function pushVarStringArray(string memory value) external;
function setVarStringArray(string[] memory value) external;
function getVarStringArray() external view returns (string[] memory);
function setVarUint256(uint256 value) external;
function getVarUint256() external view returns (uint256);
function setVarString(string memory value) external;
function getVarString() external view returns (string memory);
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
interface ITokenTransfer {
function tokenTransfer(
address token,
address[] memory to,
uint256 value
) external;
function tokenTransferFrom(
address token,
address from,
address to,
uint256 value
) external;
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "../interface/IERC20.sol";
import "./Address.sol";
library SafeERC20Token {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transfer.selector, to, value)
);
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
);
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(
token,
abi.encodeWithSelector(token.approve.selector, spender, value)
);
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(
token,
abi.encodeWithSelector(
token.approve.selector,
spender,
newAllowance
)
);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(
oldAllowance >= value,
"SafeERC20: decreased allowance below zero"
);
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(
token,
abi.encodeWithSelector(
token.approve.selector,
spender,
newAllowance
)
);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(
data,
"SafeERC20: low-level call failed"
);
if (returndata.length > 0) {
// Return data is optional
require(
abi.decode(returndata, (bool)),
"SafeERC20: ERC20 operation did not succeed"
);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)
pragma solidity ^0.8.9;
import "./math/Math.sol";
import "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `int256` to its ASCII `string` decimal representation.
*/
function toString(int256 value) internal pure returns (string memory) {
return
string(
abi.encodePacked(
value < 0 ? "-" : "",
toString(SignedMath.abs(value))
)
);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(
uint256 value,
uint256 length
) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
/**
* @dev Returns true if the two strings are equal.
*/
function equal(
string memory a,
string memory b
) internal pure returns (bool) {
return keccak256(bytes(a)) == keccak256(bytes(b));
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)
pragma solidity ^0.8.9;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator
) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1, "Math: mulDiv overflow");
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator,
Rounding rounding
) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(
uint256 a,
Rounding rounding
) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return
result +
(rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(
uint256 value,
Rounding rounding
) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return
result +
(rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(
uint256 value,
Rounding rounding
) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return
result +
(rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(
uint256 value,
Rounding rounding
) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return
result +
(rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.9;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
}
}
[{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"}],"name":"getVarMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"}],"name":"getVarMapArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"pushVarMapArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"pushVarStringArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"pushVarUintArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setVarMap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256[]","name":"valueArr","type":"uint256[]"}],"name":"setVarMapArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setVarString","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"value","type":"string[]"}],"name":"setVarStringArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setVarUint256","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"}],"name":"setVarUintArray","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
[{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"key","type":"uint256"}],"name":"oneGetVarMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"key","type":"uint256"}],"name":"oneGetVarMapArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"}],"name":"oneGetVarString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"}],"name":"oneGetVarStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"}],"name":"oneGetVarUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"}],"name":"oneGetVarUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"onePushVarMapArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"string","name":"value","type":"string"}],"name":"onePushVarStringArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"onePushVarUintArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneSetVarMap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256[]","name":"valueArr","type":"uint256[]"}],"name":"oneSetVarMapArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"string","name":"value","type":"string"}],"name":"oneSetVarString","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"string[]","name":"value","type":"string[]"}],"name":"oneSetVarStringArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"oneSetVarUint256","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"readWriteAddr","type":"address"},{"internalType":"uint256[]","name":"value","type":"uint256[]"}],"name":"oneSetVarUintArray","outputs":[],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b5061161c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806391a08da811610097578063e3a0f8b211610066578063e3a0f8b214610292578063ec2df307146102c2578063f8a9c655146102de578063fe32cb02146102fa576100f5565b806391a08da8146101fa578063d2ab52d514610216578063d991a62914610246578063e0f0160914610262576100f5565b80635fcbac6b116100d35780635fcbac6b1461017657806362b529ce14610192578063650793f8146101ae57806372da1fb5146101de576100f5565b8063130050a6146100fa57806319c8da241461012a5780635c947f9c1461015a575b600080fd5b610114600480360381019061010f9190610aa9565b610316565b6040516101219190610af8565b60405180910390f35b610144600480360381019061013f9190610b13565b61039a565b6040516101519190610bfe565b60405180910390f35b610174600480360381019061016f9190610d79565b610417565b005b610190600480360381019061018b9190610aa9565b610489565b005b6101ac60048036038101906101a79190610f7e565b6104f8565b005b6101c860048036038101906101c39190610b13565b610566565b6040516101d59190610af8565b60405180910390f35b6101f860048036038101906101f39190610fda565b6105de565b005b610214600480360381019061020f9190611036565b61064d565b005b610230600480360381019061022b9190610aa9565b6106bf565b60405161023d9190610bfe565b60405180910390f35b610260600480360381019061025b9190610fda565b610748565b005b61027c60048036038101906102779190610b13565b6107b7565b6040516102899190611108565b60405180910390f35b6102ac60048036038101906102a79190610b13565b610834565b6040516102b99190611236565b60405180910390f35b6102dc60048036038101906102d79190610aa9565b6108b1565b005b6102f860048036038101906102f39190611036565b610920565b005b610314600480360381019061030f9190611258565b610992565b005b60008273ffffffffffffffffffffffffffffffffffffffff166368c7187b836040518263ffffffff1660e01b81526004016103519190610af8565b602060405180830381865afa15801561036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039291906112c9565b905092915050565b60608173ffffffffffffffffffffffffffffffffffffffff1663a0f63be16040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103e7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610410919061138d565b9050919050565b8273ffffffffffffffffffffffffffffffffffffffff1663db277ccc83836040518363ffffffff1660e01b81526004016104529291906113d6565b600060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff16637e76b995826040518263ffffffff1660e01b81526004016104c29190610af8565b600060405180830381600087803b1580156104dc57600080fd5b505af11580156104f0573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166263caa8826040518263ffffffff1660e01b81526004016105309190611236565b600060405180830381600087803b15801561054a57600080fd5b505af115801561055e573d6000803e3d6000fd5b505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16636b83cbf16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d791906112c9565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff166391aa423a826040518263ffffffff1660e01b81526004016106179190611108565b600060405180830381600087803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b505050505050565b8273ffffffffffffffffffffffffffffffffffffffff1663463a8c6083836040518363ffffffff1660e01b8152600401610688929190611406565b600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b50505050505050565b60608273ffffffffffffffffffffffffffffffffffffffff1663d4242881836040518263ffffffff1660e01b81526004016106fa9190610af8565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610740919061138d565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff1663a3f32fb8826040518263ffffffff1660e01b81526004016107819190611108565b600060405180830381600087803b15801561079b57600080fd5b505af11580156107af573d6000803e3d6000fd5b505050505050565b60608173ffffffffffffffffffffffffffffffffffffffff1663a4ac27f36040518163ffffffff1660e01b8152600401600060405180830381865afa158015610804573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061082d919061149f565b9050919050565b60608173ffffffffffffffffffffffffffffffffffffffff1663be59f2da6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610881573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108aa919061159d565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff1663ba525ac0826040518263ffffffff1660e01b81526004016108ea9190610af8565b600060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050505050565b8273ffffffffffffffffffffffffffffffffffffffff166301f045e083836040518363ffffffff1660e01b815260040161095b929190611406565b600060405180830381600087803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff1663919a1707826040518263ffffffff1660e01b81526004016109cb9190610bfe565b600060405180830381600087803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a4082610a15565b9050919050565b610a5081610a35565b8114610a5b57600080fd5b50565b600081359050610a6d81610a47565b92915050565b6000819050919050565b610a8681610a73565b8114610a9157600080fd5b50565b600081359050610aa381610a7d565b92915050565b60008060408385031215610ac057610abf610a0b565b5b6000610ace85828601610a5e565b9250506020610adf85828601610a94565b9150509250929050565b610af281610a73565b82525050565b6000602082019050610b0d6000830184610ae9565b92915050565b600060208284031215610b2957610b28610a0b565b5b6000610b3784828501610a5e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610b7581610a73565b82525050565b6000610b878383610b6c565b60208301905092915050565b6000602082019050919050565b6000610bab82610b40565b610bb58185610b4b565b9350610bc083610b5c565b8060005b83811015610bf1578151610bd88882610b7b565b9750610be383610b93565b925050600181019050610bc4565b5085935050505092915050565b60006020820190508181036000830152610c188184610ba0565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610c6e82610c25565b810181811067ffffffffffffffff82111715610c8d57610c8c610c36565b5b80604052505050565b6000610ca0610a01565b9050610cac8282610c65565b919050565b600067ffffffffffffffff821115610ccc57610ccb610c36565b5b602082029050602081019050919050565b600080fd5b6000610cf5610cf084610cb1565b610c96565b90508083825260208201905060208402830185811115610d1857610d17610cdd565b5b835b81811015610d415780610d2d8882610a94565b845260208401935050602081019050610d1a565b5050509392505050565b600082601f830112610d6057610d5f610c20565b5b8135610d70848260208601610ce2565b91505092915050565b600080600060608486031215610d9257610d91610a0b565b5b6000610da086828701610a5e565b9350506020610db186828701610a94565b925050604084013567ffffffffffffffff811115610dd257610dd1610a10565b5b610dde86828701610d4b565b9150509250925092565b600067ffffffffffffffff821115610e0357610e02610c36565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff821115610e3457610e33610c36565b5b610e3d82610c25565b9050602081019050919050565b82818337600083830152505050565b6000610e6c610e6784610e19565b610c96565b905082815260208101848484011115610e8857610e87610e14565b5b610e93848285610e4a565b509392505050565b600082601f830112610eb057610eaf610c20565b5b8135610ec0848260208601610e59565b91505092915050565b6000610edc610ed784610de8565b610c96565b90508083825260208201905060208402830185811115610eff57610efe610cdd565b5b835b81811015610f4657803567ffffffffffffffff811115610f2457610f23610c20565b5b808601610f318982610e9b565b85526020850194505050602081019050610f01565b5050509392505050565b600082601f830112610f6557610f64610c20565b5b8135610f75848260208601610ec9565b91505092915050565b60008060408385031215610f9557610f94610a0b565b5b6000610fa385828601610a5e565b925050602083013567ffffffffffffffff811115610fc457610fc3610a10565b5b610fd085828601610f50565b9150509250929050565b60008060408385031215610ff157610ff0610a0b565b5b6000610fff85828601610a5e565b925050602083013567ffffffffffffffff8111156110205761101f610a10565b5b61102c85828601610e9b565b9150509250929050565b60008060006060848603121561104f5761104e610a0b565b5b600061105d86828701610a5e565b935050602061106e86828701610a94565b925050604061107f86828701610a94565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156110c35780820151818401526020810190506110a8565b60008484015250505050565b60006110da82611089565b6110e48185611094565b93506110f48185602086016110a5565b6110fd81610c25565b840191505092915050565b6000602082019050818103600083015261112281846110cf565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061117282611089565b61117c8185611156565b935061118c8185602086016110a5565b61119581610c25565b840191505092915050565b60006111ac8383611167565b905092915050565b6000602082019050919050565b60006111cc8261112a565b6111d68185611135565b9350836020820285016111e885611146565b8060005b85811015611224578484038952815161120585826111a0565b9450611210836111b4565b925060208a019950506001810190506111ec565b50829750879550505050505092915050565b6000602082019050818103600083015261125081846111c1565b905092915050565b6000806040838503121561126f5761126e610a0b565b5b600061127d85828601610a5e565b925050602083013567ffffffffffffffff81111561129e5761129d610a10565b5b6112aa85828601610d4b565b9150509250929050565b6000815190506112c381610a7d565b92915050565b6000602082840312156112df576112de610a0b565b5b60006112ed848285016112b4565b91505092915050565b600061130961130484610cb1565b610c96565b9050808382526020820190506020840283018581111561132c5761132b610cdd565b5b835b81811015611355578061134188826112b4565b84526020840193505060208101905061132e565b5050509392505050565b600082601f83011261137457611373610c20565b5b81516113848482602086016112f6565b91505092915050565b6000602082840312156113a3576113a2610a0b565b5b600082015167ffffffffffffffff8111156113c1576113c0610a10565b5b6113cd8482850161135f565b91505092915050565b60006040820190506113eb6000830185610ae9565b81810360208301526113fd8184610ba0565b90509392505050565b600060408201905061141b6000830185610ae9565b6114286020830184610ae9565b9392505050565b600061144261143d84610e19565b610c96565b90508281526020810184848401111561145e5761145d610e14565b5b6114698482856110a5565b509392505050565b600082601f83011261148657611485610c20565b5b815161149684826020860161142f565b91505092915050565b6000602082840312156114b5576114b4610a0b565b5b600082015167ffffffffffffffff8111156114d3576114d2610a10565b5b6114df84828501611471565b91505092915050565b60006114fb6114f684610de8565b610c96565b9050808382526020820190506020840283018581111561151e5761151d610cdd565b5b835b8181101561156557805167ffffffffffffffff81111561154357611542610c20565b5b8086016115508982611471565b85526020850194505050602081019050611520565b5050509392505050565b600082601f83011261158457611583610c20565b5b81516115948482602086016114e8565b91505092915050565b6000602082840312156115b3576115b2610a0b565b5b600082015167ffffffffffffffff8111156115d1576115d0610a10565b5b6115dd8482850161156f565b9150509291505056fea2646970667358221220aeb40602aeebeffe538fa50be38d89c8f75827572be49ae6b0ca3a2e4161683764736f6c63430008130033
\ No newline at end of file
[{"inputs":[],"name":"getBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b50610195806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063796b89b91461003b5780639663f88f14610059575b600080fd5b610043610077565b60405161005091906100ad565b60405180910390f35b61006161007f565b60405161006e91906100e1565b60405180910390f35b600042905090565b600060014361008e919061012b565b40905090565b6000819050919050565b6100a781610094565b82525050565b60006020820190506100c2600083018461009e565b92915050565b6000819050919050565b6100db816100c8565b82525050565b60006020820190506100f660008301846100d2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061013682610094565b915061014183610094565b9250828203905081811115610159576101586100fc565b5b9291505056fea2646970667358221220a0951f4041bca69095b3463492510bc63c1b3f06250358788f792cf88939f81864736f6c63430008130033
\ No newline at end of file
[{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"}],"name":"getVarMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"}],"name":"getVarMapArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVarUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"pushVarMapArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"pushVarStringArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"pushVarUintArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setVarMap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256[]","name":"valueArr","type":"uint256[]"}],"name":"setVarMapArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setVarString","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"value","type":"string[]"}],"name":"setVarStringArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setVarUint256","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"}],"name":"setVarUintArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"varMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"varMapArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"varString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"varStringArray","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"varUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"varUintArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
\ No newline at end of file
608060405234801561001057600080fd5b50611537806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80639c0dde45116100b8578063ba22b3ca1161007c578063ba22b3ca14610337578063ba525ac014610355578063be59f2da14610371578063d42428811461038f578063db277ccc146103bf578063ec660a78146103db57610136565b80639c0dde4514610291578063a0f63be1146102af578063a3f32fb8146102cd578063a4ac27f3146102e9578063a55cf49d1461030757610136565b806368c7187b116100ff57806368c7187b146101ef5780636b83cbf11461021f5780637e76b9951461023d578063919a17071461025957806391aa423a1461027557610136565b806263caa81461013b57806301f045e0146101575780631c11bb68146101735780632aa47566146101a3578063463a8c60146101d3575b600080fd5b61015560048036038101906101509190610cad565b61040b565b005b610171600480360381019061016c9190610d2c565b610425565b005b61018d60048036038101906101889190610d6c565b610463565b60405161019a9190610da8565b60405180910390f35b6101bd60048036038101906101b89190610d2c565b61047b565b6040516101ca9190610da8565b60405180910390f35b6101ed60048036038101906101e89190610d2c565b6104ac565b005b61020960048036038101906102049190610d6c565b6104c7565b6040516102169190610da8565b60405180910390f35b6102276104e3565b6040516102349190610da8565b60405180910390f35b61025760048036038101906102529190610d6c565b6104ed565b005b610273600480360381019061026e9190610e86565b610519565b005b61028f600480360381019061028a9190610ecf565b610533565b005b610299610546565b6040516102a69190610da8565b60405180910390f35b6102b761054c565b6040516102c49190610fd6565b60405180910390f35b6102e760048036038101906102e29190610ecf565b6105a4565b005b6102f16105dc565b6040516102fe9190611077565b60405180910390f35b610321600480360381019061031c9190610d6c565b61066e565b60405161032e9190610da8565b60405180910390f35b61033f610692565b60405161034c9190611077565b60405180910390f35b61036f600480360381019061036a9190610d6c565b610720565b005b61037961072a565b60405161038691906111a5565b60405180910390f35b6103a960048036038101906103a49190610d6c565b610803565b6040516103b69190610fd6565b60405180910390f35b6103d960048036038101906103d491906111c7565b61086e565b005b6103f560048036038101906103f09190610d6c565b61089a565b6040516104029190611077565b60405180910390f35b8060039080519060200190610421929190610946565b5050565b600160008381526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150555050565b60006020528060005260406000206000915090505481565b6001602052816000526040600020818154811061049757600080fd5b90600052602060002001600091509150505481565b80600080848152602001908152602001600020819055505050565b6000806000838152602001908152602001600020549050919050565b6000600454905090565b600281908060018154018082558091505060019003906000526020600020016000909190919091505550565b806002908051906020019061052f92919061099f565b5050565b8060059081610542919061142f565b5050565b60045481565b6060600280548060200260200160405190810160405280929190818152602001828054801561059a57602002820191906000526020600020905b815481526020019060010190808311610586575b5050505050905090565b6003819080600181540180825580915050600190039060005260206000200160009091909190915090816105d8919061142f565b5050565b6060600580546105eb90611252565b80601f016020809104026020016040519081016040528092919081815260200182805461061790611252565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b6002818154811061067e57600080fd5b906000526020600020016000915090505481565b6005805461069f90611252565b80601f01602080910402602001604051908101604052809291908181526020018280546106cb90611252565b80156107185780601f106106ed57610100808354040283529160200191610718565b820191906000526020600020905b8154815290600101906020018083116106fb57829003601f168201915b505050505081565b8060048190555050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156107fa57838290600052602060002001805461076d90611252565b80601f016020809104026020016040519081016040528092919081815260200182805461079990611252565b80156107e65780601f106107bb576101008083540402835291602001916107e6565b820191906000526020600020905b8154815290600101906020018083116107c957829003601f168201915b50505050508152602001906001019061074e565b50505050905090565b60606001600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561086257602002820191906000526020600020905b81548152602001906001019080831161084e575b50505050509050919050565b8060016000848152602001908152602001600020908051906020019061089592919061099f565b505050565b600381815481106108aa57600080fd5b9060005260206000200160009150905080546108c590611252565b80601f01602080910402602001604051908101604052809291908181526020018280546108f190611252565b801561093e5780601f106109135761010080835404028352916020019161093e565b820191906000526020600020905b81548152906001019060200180831161092157829003601f168201915b505050505081565b82805482825590600052602060002090810192821561098e579160200282015b8281111561098d57825182908161097d919061142f565b5091602001919060010190610966565b5b50905061099b91906109ec565b5090565b8280548282559060005260206000209081019282156109db579160200282015b828111156109da5782518255916020019190600101906109bf565b5b5090506109e89190610a10565b5090565b5b80821115610a0c5760008181610a039190610a2d565b506001016109ed565b5090565b5b80821115610a29576000816000905550600101610a11565b5090565b508054610a3990611252565b6000825580601f10610a4b5750610a6a565b601f016020900490600052602060002090810190610a699190610a10565b5b50565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610acf82610a86565b810181811067ffffffffffffffff82111715610aee57610aed610a97565b5b80604052505050565b6000610b01610a6d565b9050610b0d8282610ac6565b919050565b600067ffffffffffffffff821115610b2d57610b2c610a97565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff821115610b6357610b62610a97565b5b610b6c82610a86565b9050602081019050919050565b82818337600083830152505050565b6000610b9b610b9684610b48565b610af7565b905082815260208101848484011115610bb757610bb6610b43565b5b610bc2848285610b79565b509392505050565b600082601f830112610bdf57610bde610a81565b5b8135610bef848260208601610b88565b91505092915050565b6000610c0b610c0684610b12565b610af7565b90508083825260208201905060208402830185811115610c2e57610c2d610b3e565b5b835b81811015610c7557803567ffffffffffffffff811115610c5357610c52610a81565b5b808601610c608982610bca565b85526020850194505050602081019050610c30565b5050509392505050565b600082601f830112610c9457610c93610a81565b5b8135610ca4848260208601610bf8565b91505092915050565b600060208284031215610cc357610cc2610a77565b5b600082013567ffffffffffffffff811115610ce157610ce0610a7c565b5b610ced84828501610c7f565b91505092915050565b6000819050919050565b610d0981610cf6565b8114610d1457600080fd5b50565b600081359050610d2681610d00565b92915050565b60008060408385031215610d4357610d42610a77565b5b6000610d5185828601610d17565b9250506020610d6285828601610d17565b9150509250929050565b600060208284031215610d8257610d81610a77565b5b6000610d9084828501610d17565b91505092915050565b610da281610cf6565b82525050565b6000602082019050610dbd6000830184610d99565b92915050565b600067ffffffffffffffff821115610dde57610ddd610a97565b5b602082029050602081019050919050565b6000610e02610dfd84610dc3565b610af7565b90508083825260208201905060208402830185811115610e2557610e24610b3e565b5b835b81811015610e4e5780610e3a8882610d17565b845260208401935050602081019050610e27565b5050509392505050565b600082601f830112610e6d57610e6c610a81565b5b8135610e7d848260208601610def565b91505092915050565b600060208284031215610e9c57610e9b610a77565b5b600082013567ffffffffffffffff811115610eba57610eb9610a7c565b5b610ec684828501610e58565b91505092915050565b600060208284031215610ee557610ee4610a77565b5b600082013567ffffffffffffffff811115610f0357610f02610a7c565b5b610f0f84828501610bca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f4d81610cf6565b82525050565b6000610f5f8383610f44565b60208301905092915050565b6000602082019050919050565b6000610f8382610f18565b610f8d8185610f23565b9350610f9883610f34565b8060005b83811015610fc9578151610fb08882610f53565b9750610fbb83610f6b565b925050600181019050610f9c565b5085935050505092915050565b60006020820190508181036000830152610ff08184610f78565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611032578082015181840152602081019050611017565b60008484015250505050565b600061104982610ff8565b6110538185611003565b9350611063818560208601611014565b61106c81610a86565b840191505092915050565b60006020820190508181036000830152611091818461103e565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006110e182610ff8565b6110eb81856110c5565b93506110fb818560208601611014565b61110481610a86565b840191505092915050565b600061111b83836110d6565b905092915050565b6000602082019050919050565b600061113b82611099565b61114581856110a4565b935083602082028501611157856110b5565b8060005b858110156111935784840389528151611174858261110f565b945061117f83611123565b925060208a0199505060018101905061115b565b50829750879550505050505092915050565b600060208201905081810360008301526111bf8184611130565b905092915050565b600080604083850312156111de576111dd610a77565b5b60006111ec85828601610d17565b925050602083013567ffffffffffffffff81111561120d5761120c610a7c565b5b61121985828601610e58565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061126a57607f821691505b60208210810361127d5761127c611223565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026112e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826112a8565b6112ef86836112a8565b95508019841693508086168417925050509392505050565b6000819050919050565b600061132c61132761132284610cf6565b611307565b610cf6565b9050919050565b6000819050919050565b61134683611311565b61135a61135282611333565b8484546112b5565b825550505050565b600090565b61136f611362565b61137a81848461133d565b505050565b5b8181101561139e57611393600082611367565b600181019050611380565b5050565b601f8211156113e3576113b481611283565b6113bd84611298565b810160208510156113cc578190505b6113e06113d885611298565b83018261137f565b50505b505050565b600082821c905092915050565b6000611406600019846008026113e8565b1980831691505092915050565b600061141f83836113f5565b9150826002028217905092915050565b61143882610ff8565b67ffffffffffffffff81111561145157611450610a97565b5b61145b8254611252565b6114668282856113a2565b600060209050601f8311600181146114995760008415611487578287015190505b6114918582611413565b8655506114f9565b601f1984166114a786611283565b60005b828110156114cf578489015182556001820191506020850194506020810190506114aa565b868310156114ec57848901516114e8601f8916826113f5565b8355505b6001600288020188555050505b50505050505056fea264697066735822122093081f8193c9cd64efb1a25cddee5a6daa0939f7953c02951280fbcab198ab8964736f6c63430008130033
\ No newline at end of file
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractReadWrite
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// OneReadWriteVarMetaData contains all meta data concerning the OneReadWriteVar contract.
var OneReadWriteVarMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"}],\"name\":\"oneGetVarMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"}],\"name\":\"oneGetVarMapArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"}],\"name\":\"oneGetVarString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"}],\"name\":\"oneGetVarStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"}],\"name\":\"oneGetVarUint256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"}],\"name\":\"oneGetVarUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"onePushVarMapArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"onePushVarStringArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"onePushVarUintArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"oneSetVarMap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"valueArr\",\"type\":\"uint256[]\"}],\"name\":\"oneSetVarMapArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"oneSetVarString\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"name\":\"oneSetVarStringArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"oneSetVarUint256\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"readWriteAddr\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"name\":\"oneSetVarUintArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b5061161c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806391a08da811610097578063e3a0f8b211610066578063e3a0f8b214610292578063ec2df307146102c2578063f8a9c655146102de578063fe32cb02146102fa576100f5565b806391a08da8146101fa578063d2ab52d514610216578063d991a62914610246578063e0f0160914610262576100f5565b80635fcbac6b116100d35780635fcbac6b1461017657806362b529ce14610192578063650793f8146101ae57806372da1fb5146101de576100f5565b8063130050a6146100fa57806319c8da241461012a5780635c947f9c1461015a575b600080fd5b610114600480360381019061010f9190610aa9565b610316565b6040516101219190610af8565b60405180910390f35b610144600480360381019061013f9190610b13565b61039a565b6040516101519190610bfe565b60405180910390f35b610174600480360381019061016f9190610d79565b610417565b005b610190600480360381019061018b9190610aa9565b610489565b005b6101ac60048036038101906101a79190610f7e565b6104f8565b005b6101c860048036038101906101c39190610b13565b610566565b6040516101d59190610af8565b60405180910390f35b6101f860048036038101906101f39190610fda565b6105de565b005b610214600480360381019061020f9190611036565b61064d565b005b610230600480360381019061022b9190610aa9565b6106bf565b60405161023d9190610bfe565b60405180910390f35b610260600480360381019061025b9190610fda565b610748565b005b61027c60048036038101906102779190610b13565b6107b7565b6040516102899190611108565b60405180910390f35b6102ac60048036038101906102a79190610b13565b610834565b6040516102b99190611236565b60405180910390f35b6102dc60048036038101906102d79190610aa9565b6108b1565b005b6102f860048036038101906102f39190611036565b610920565b005b610314600480360381019061030f9190611258565b610992565b005b60008273ffffffffffffffffffffffffffffffffffffffff166368c7187b836040518263ffffffff1660e01b81526004016103519190610af8565b602060405180830381865afa15801561036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039291906112c9565b905092915050565b60608173ffffffffffffffffffffffffffffffffffffffff1663a0f63be16040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103e7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610410919061138d565b9050919050565b8273ffffffffffffffffffffffffffffffffffffffff1663db277ccc83836040518363ffffffff1660e01b81526004016104529291906113d6565b600060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff16637e76b995826040518263ffffffff1660e01b81526004016104c29190610af8565b600060405180830381600087803b1580156104dc57600080fd5b505af11580156104f0573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166263caa8826040518263ffffffff1660e01b81526004016105309190611236565b600060405180830381600087803b15801561054a57600080fd5b505af115801561055e573d6000803e3d6000fd5b505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16636b83cbf16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d791906112c9565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff166391aa423a826040518263ffffffff1660e01b81526004016106179190611108565b600060405180830381600087803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b505050505050565b8273ffffffffffffffffffffffffffffffffffffffff1663463a8c6083836040518363ffffffff1660e01b8152600401610688929190611406565b600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b50505050505050565b60608273ffffffffffffffffffffffffffffffffffffffff1663d4242881836040518263ffffffff1660e01b81526004016106fa9190610af8565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610740919061138d565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff1663a3f32fb8826040518263ffffffff1660e01b81526004016107819190611108565b600060405180830381600087803b15801561079b57600080fd5b505af11580156107af573d6000803e3d6000fd5b505050505050565b60608173ffffffffffffffffffffffffffffffffffffffff1663a4ac27f36040518163ffffffff1660e01b8152600401600060405180830381865afa158015610804573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061082d919061149f565b9050919050565b60608173ffffffffffffffffffffffffffffffffffffffff1663be59f2da6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610881573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108aa919061159d565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff1663ba525ac0826040518263ffffffff1660e01b81526004016108ea9190610af8565b600060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050505050565b8273ffffffffffffffffffffffffffffffffffffffff166301f045e083836040518363ffffffff1660e01b815260040161095b929190611406565b600060405180830381600087803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff1663919a1707826040518263ffffffff1660e01b81526004016109cb9190610bfe565b600060405180830381600087803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a4082610a15565b9050919050565b610a5081610a35565b8114610a5b57600080fd5b50565b600081359050610a6d81610a47565b92915050565b6000819050919050565b610a8681610a73565b8114610a9157600080fd5b50565b600081359050610aa381610a7d565b92915050565b60008060408385031215610ac057610abf610a0b565b5b6000610ace85828601610a5e565b9250506020610adf85828601610a94565b9150509250929050565b610af281610a73565b82525050565b6000602082019050610b0d6000830184610ae9565b92915050565b600060208284031215610b2957610b28610a0b565b5b6000610b3784828501610a5e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610b7581610a73565b82525050565b6000610b878383610b6c565b60208301905092915050565b6000602082019050919050565b6000610bab82610b40565b610bb58185610b4b565b9350610bc083610b5c565b8060005b83811015610bf1578151610bd88882610b7b565b9750610be383610b93565b925050600181019050610bc4565b5085935050505092915050565b60006020820190508181036000830152610c188184610ba0565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610c6e82610c25565b810181811067ffffffffffffffff82111715610c8d57610c8c610c36565b5b80604052505050565b6000610ca0610a01565b9050610cac8282610c65565b919050565b600067ffffffffffffffff821115610ccc57610ccb610c36565b5b602082029050602081019050919050565b600080fd5b6000610cf5610cf084610cb1565b610c96565b90508083825260208201905060208402830185811115610d1857610d17610cdd565b5b835b81811015610d415780610d2d8882610a94565b845260208401935050602081019050610d1a565b5050509392505050565b600082601f830112610d6057610d5f610c20565b5b8135610d70848260208601610ce2565b91505092915050565b600080600060608486031215610d9257610d91610a0b565b5b6000610da086828701610a5e565b9350506020610db186828701610a94565b925050604084013567ffffffffffffffff811115610dd257610dd1610a10565b5b610dde86828701610d4b565b9150509250925092565b600067ffffffffffffffff821115610e0357610e02610c36565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff821115610e3457610e33610c36565b5b610e3d82610c25565b9050602081019050919050565b82818337600083830152505050565b6000610e6c610e6784610e19565b610c96565b905082815260208101848484011115610e8857610e87610e14565b5b610e93848285610e4a565b509392505050565b600082601f830112610eb057610eaf610c20565b5b8135610ec0848260208601610e59565b91505092915050565b6000610edc610ed784610de8565b610c96565b90508083825260208201905060208402830185811115610eff57610efe610cdd565b5b835b81811015610f4657803567ffffffffffffffff811115610f2457610f23610c20565b5b808601610f318982610e9b565b85526020850194505050602081019050610f01565b5050509392505050565b600082601f830112610f6557610f64610c20565b5b8135610f75848260208601610ec9565b91505092915050565b60008060408385031215610f9557610f94610a0b565b5b6000610fa385828601610a5e565b925050602083013567ffffffffffffffff811115610fc457610fc3610a10565b5b610fd085828601610f50565b9150509250929050565b60008060408385031215610ff157610ff0610a0b565b5b6000610fff85828601610a5e565b925050602083013567ffffffffffffffff8111156110205761101f610a10565b5b61102c85828601610e9b565b9150509250929050565b60008060006060848603121561104f5761104e610a0b565b5b600061105d86828701610a5e565b935050602061106e86828701610a94565b925050604061107f86828701610a94565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156110c35780820151818401526020810190506110a8565b60008484015250505050565b60006110da82611089565b6110e48185611094565b93506110f48185602086016110a5565b6110fd81610c25565b840191505092915050565b6000602082019050818103600083015261112281846110cf565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061117282611089565b61117c8185611156565b935061118c8185602086016110a5565b61119581610c25565b840191505092915050565b60006111ac8383611167565b905092915050565b6000602082019050919050565b60006111cc8261112a565b6111d68185611135565b9350836020820285016111e885611146565b8060005b85811015611224578484038952815161120585826111a0565b9450611210836111b4565b925060208a019950506001810190506111ec565b50829750879550505050505092915050565b6000602082019050818103600083015261125081846111c1565b905092915050565b6000806040838503121561126f5761126e610a0b565b5b600061127d85828601610a5e565b925050602083013567ffffffffffffffff81111561129e5761129d610a10565b5b6112aa85828601610d4b565b9150509250929050565b6000815190506112c381610a7d565b92915050565b6000602082840312156112df576112de610a0b565b5b60006112ed848285016112b4565b91505092915050565b600061130961130484610cb1565b610c96565b9050808382526020820190506020840283018581111561132c5761132b610cdd565b5b835b81811015611355578061134188826112b4565b84526020840193505060208101905061132e565b5050509392505050565b600082601f83011261137457611373610c20565b5b81516113848482602086016112f6565b91505092915050565b6000602082840312156113a3576113a2610a0b565b5b600082015167ffffffffffffffff8111156113c1576113c0610a10565b5b6113cd8482850161135f565b91505092915050565b60006040820190506113eb6000830185610ae9565b81810360208301526113fd8184610ba0565b90509392505050565b600060408201905061141b6000830185610ae9565b6114286020830184610ae9565b9392505050565b600061144261143d84610e19565b610c96565b90508281526020810184848401111561145e5761145d610e14565b5b6114698482856110a5565b509392505050565b600082601f83011261148657611485610c20565b5b815161149684826020860161142f565b91505092915050565b6000602082840312156114b5576114b4610a0b565b5b600082015167ffffffffffffffff8111156114d3576114d2610a10565b5b6114df84828501611471565b91505092915050565b60006114fb6114f684610de8565b610c96565b9050808382526020820190506020840283018581111561151e5761151d610cdd565b5b835b8181101561156557805167ffffffffffffffff81111561154357611542610c20565b5b8086016115508982611471565b85526020850194505050602081019050611520565b5050509392505050565b600082601f83011261158457611583610c20565b5b81516115948482602086016114e8565b91505092915050565b6000602082840312156115b3576115b2610a0b565b5b600082015167ffffffffffffffff8111156115d1576115d0610a10565b5b6115dd8482850161156f565b9150509291505056fea2646970667358221220aeb40602aeebeffe538fa50be38d89c8f75827572be49ae6b0ca3a2e4161683764736f6c63430008130033",
}
// OneReadWriteVarABI is the input ABI used to generate the binding from.
// Deprecated: Use OneReadWriteVarMetaData.ABI instead.
var OneReadWriteVarABI = OneReadWriteVarMetaData.ABI
// OneReadWriteVarBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use OneReadWriteVarMetaData.Bin instead.
var OneReadWriteVarBin = OneReadWriteVarMetaData.Bin
// DeployOneReadWriteVar deploys a new Ethereum contract, binding an instance of OneReadWriteVar to it.
func DeployOneReadWriteVar(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OneReadWriteVar, error) {
parsed, err := OneReadWriteVarMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OneReadWriteVarBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &OneReadWriteVar{OneReadWriteVarCaller: OneReadWriteVarCaller{contract: contract}, OneReadWriteVarTransactor: OneReadWriteVarTransactor{contract: contract}, OneReadWriteVarFilterer: OneReadWriteVarFilterer{contract: contract}}, nil
}
// OneReadWriteVar is an auto generated Go binding around an Ethereum contract.
type OneReadWriteVar struct {
OneReadWriteVarCaller // Read-only binding to the contract
OneReadWriteVarTransactor // Write-only binding to the contract
OneReadWriteVarFilterer // Log filterer for contract events
}
// OneReadWriteVarCaller is an auto generated read-only Go binding around an Ethereum contract.
type OneReadWriteVarCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneReadWriteVarTransactor is an auto generated write-only Go binding around an Ethereum contract.
type OneReadWriteVarTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneReadWriteVarFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type OneReadWriteVarFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// OneReadWriteVarSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type OneReadWriteVarSession struct {
Contract *OneReadWriteVar // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneReadWriteVarCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type OneReadWriteVarCallerSession struct {
Contract *OneReadWriteVarCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// OneReadWriteVarTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type OneReadWriteVarTransactorSession struct {
Contract *OneReadWriteVarTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// OneReadWriteVarRaw is an auto generated low-level Go binding around an Ethereum contract.
type OneReadWriteVarRaw struct {
Contract *OneReadWriteVar // Generic contract binding to access the raw methods on
}
// OneReadWriteVarCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type OneReadWriteVarCallerRaw struct {
Contract *OneReadWriteVarCaller // Generic read-only contract binding to access the raw methods on
}
// OneReadWriteVarTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type OneReadWriteVarTransactorRaw struct {
Contract *OneReadWriteVarTransactor // Generic write-only contract binding to access the raw methods on
}
// NewOneReadWriteVar creates a new instance of OneReadWriteVar, bound to a specific deployed contract.
func NewOneReadWriteVar(address common.Address, backend bind.ContractBackend) (*OneReadWriteVar, error) {
contract, err := bindOneReadWriteVar(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &OneReadWriteVar{OneReadWriteVarCaller: OneReadWriteVarCaller{contract: contract}, OneReadWriteVarTransactor: OneReadWriteVarTransactor{contract: contract}, OneReadWriteVarFilterer: OneReadWriteVarFilterer{contract: contract}}, nil
}
// NewOneReadWriteVarCaller creates a new read-only instance of OneReadWriteVar, bound to a specific deployed contract.
func NewOneReadWriteVarCaller(address common.Address, caller bind.ContractCaller) (*OneReadWriteVarCaller, error) {
contract, err := bindOneReadWriteVar(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &OneReadWriteVarCaller{contract: contract}, nil
}
// NewOneReadWriteVarTransactor creates a new write-only instance of OneReadWriteVar, bound to a specific deployed contract.
func NewOneReadWriteVarTransactor(address common.Address, transactor bind.ContractTransactor) (*OneReadWriteVarTransactor, error) {
contract, err := bindOneReadWriteVar(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &OneReadWriteVarTransactor{contract: contract}, nil
}
// NewOneReadWriteVarFilterer creates a new log filterer instance of OneReadWriteVar, bound to a specific deployed contract.
func NewOneReadWriteVarFilterer(address common.Address, filterer bind.ContractFilterer) (*OneReadWriteVarFilterer, error) {
contract, err := bindOneReadWriteVar(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &OneReadWriteVarFilterer{contract: contract}, nil
}
// bindOneReadWriteVar binds a generic wrapper to an already deployed contract.
func bindOneReadWriteVar(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(OneReadWriteVarABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneReadWriteVar *OneReadWriteVarRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneReadWriteVar.Contract.OneReadWriteVarCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneReadWriteVar *OneReadWriteVarRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneReadWriteVarTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneReadWriteVar *OneReadWriteVarRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneReadWriteVarTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_OneReadWriteVar *OneReadWriteVarCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _OneReadWriteVar.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_OneReadWriteVar *OneReadWriteVarTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_OneReadWriteVar *OneReadWriteVarTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.contract.Transact(opts, method, params...)
}
// OneGetVarMap is a free data retrieval call binding the contract method 0x130050a6.
//
// Solidity: function oneGetVarMap(address readWriteAddr, uint256 key) view returns(uint256)
func (_OneReadWriteVar *OneReadWriteVarCaller) OneGetVarMap(opts *bind.CallOpts, readWriteAddr common.Address, key *big.Int) (*big.Int, error) {
var out []interface{}
err := _OneReadWriteVar.contract.Call(opts, &out, "oneGetVarMap", readWriteAddr, key)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// OneGetVarMap is a free data retrieval call binding the contract method 0x130050a6.
//
// Solidity: function oneGetVarMap(address readWriteAddr, uint256 key) view returns(uint256)
func (_OneReadWriteVar *OneReadWriteVarSession) OneGetVarMap(readWriteAddr common.Address, key *big.Int) (*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarMap(&_OneReadWriteVar.CallOpts, readWriteAddr, key)
}
// OneGetVarMap is a free data retrieval call binding the contract method 0x130050a6.
//
// Solidity: function oneGetVarMap(address readWriteAddr, uint256 key) view returns(uint256)
func (_OneReadWriteVar *OneReadWriteVarCallerSession) OneGetVarMap(readWriteAddr common.Address, key *big.Int) (*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarMap(&_OneReadWriteVar.CallOpts, readWriteAddr, key)
}
// OneGetVarMapArray is a free data retrieval call binding the contract method 0xd2ab52d5.
//
// Solidity: function oneGetVarMapArray(address readWriteAddr, uint256 key) view returns(uint256[])
func (_OneReadWriteVar *OneReadWriteVarCaller) OneGetVarMapArray(opts *bind.CallOpts, readWriteAddr common.Address, key *big.Int) ([]*big.Int, error) {
var out []interface{}
err := _OneReadWriteVar.contract.Call(opts, &out, "oneGetVarMapArray", readWriteAddr, key)
if err != nil {
return *new([]*big.Int), err
}
out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
return out0, err
}
// OneGetVarMapArray is a free data retrieval call binding the contract method 0xd2ab52d5.
//
// Solidity: function oneGetVarMapArray(address readWriteAddr, uint256 key) view returns(uint256[])
func (_OneReadWriteVar *OneReadWriteVarSession) OneGetVarMapArray(readWriteAddr common.Address, key *big.Int) ([]*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarMapArray(&_OneReadWriteVar.CallOpts, readWriteAddr, key)
}
// OneGetVarMapArray is a free data retrieval call binding the contract method 0xd2ab52d5.
//
// Solidity: function oneGetVarMapArray(address readWriteAddr, uint256 key) view returns(uint256[])
func (_OneReadWriteVar *OneReadWriteVarCallerSession) OneGetVarMapArray(readWriteAddr common.Address, key *big.Int) ([]*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarMapArray(&_OneReadWriteVar.CallOpts, readWriteAddr, key)
}
// OneGetVarString is a free data retrieval call binding the contract method 0xe0f01609.
//
// Solidity: function oneGetVarString(address readWriteAddr) view returns(string)
func (_OneReadWriteVar *OneReadWriteVarCaller) OneGetVarString(opts *bind.CallOpts, readWriteAddr common.Address) (string, error) {
var out []interface{}
err := _OneReadWriteVar.contract.Call(opts, &out, "oneGetVarString", readWriteAddr)
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// OneGetVarString is a free data retrieval call binding the contract method 0xe0f01609.
//
// Solidity: function oneGetVarString(address readWriteAddr) view returns(string)
func (_OneReadWriteVar *OneReadWriteVarSession) OneGetVarString(readWriteAddr common.Address) (string, error) {
return _OneReadWriteVar.Contract.OneGetVarString(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarString is a free data retrieval call binding the contract method 0xe0f01609.
//
// Solidity: function oneGetVarString(address readWriteAddr) view returns(string)
func (_OneReadWriteVar *OneReadWriteVarCallerSession) OneGetVarString(readWriteAddr common.Address) (string, error) {
return _OneReadWriteVar.Contract.OneGetVarString(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarStringArray is a free data retrieval call binding the contract method 0xe3a0f8b2.
//
// Solidity: function oneGetVarStringArray(address readWriteAddr) view returns(string[])
func (_OneReadWriteVar *OneReadWriteVarCaller) OneGetVarStringArray(opts *bind.CallOpts, readWriteAddr common.Address) ([]string, error) {
var out []interface{}
err := _OneReadWriteVar.contract.Call(opts, &out, "oneGetVarStringArray", readWriteAddr)
if err != nil {
return *new([]string), err
}
out0 := *abi.ConvertType(out[0], new([]string)).(*[]string)
return out0, err
}
// OneGetVarStringArray is a free data retrieval call binding the contract method 0xe3a0f8b2.
//
// Solidity: function oneGetVarStringArray(address readWriteAddr) view returns(string[])
func (_OneReadWriteVar *OneReadWriteVarSession) OneGetVarStringArray(readWriteAddr common.Address) ([]string, error) {
return _OneReadWriteVar.Contract.OneGetVarStringArray(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarStringArray is a free data retrieval call binding the contract method 0xe3a0f8b2.
//
// Solidity: function oneGetVarStringArray(address readWriteAddr) view returns(string[])
func (_OneReadWriteVar *OneReadWriteVarCallerSession) OneGetVarStringArray(readWriteAddr common.Address) ([]string, error) {
return _OneReadWriteVar.Contract.OneGetVarStringArray(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarUint256 is a free data retrieval call binding the contract method 0x650793f8.
//
// Solidity: function oneGetVarUint256(address readWriteAddr) view returns(uint256)
func (_OneReadWriteVar *OneReadWriteVarCaller) OneGetVarUint256(opts *bind.CallOpts, readWriteAddr common.Address) (*big.Int, error) {
var out []interface{}
err := _OneReadWriteVar.contract.Call(opts, &out, "oneGetVarUint256", readWriteAddr)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// OneGetVarUint256 is a free data retrieval call binding the contract method 0x650793f8.
//
// Solidity: function oneGetVarUint256(address readWriteAddr) view returns(uint256)
func (_OneReadWriteVar *OneReadWriteVarSession) OneGetVarUint256(readWriteAddr common.Address) (*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarUint256(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarUint256 is a free data retrieval call binding the contract method 0x650793f8.
//
// Solidity: function oneGetVarUint256(address readWriteAddr) view returns(uint256)
func (_OneReadWriteVar *OneReadWriteVarCallerSession) OneGetVarUint256(readWriteAddr common.Address) (*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarUint256(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarUintArray is a free data retrieval call binding the contract method 0x19c8da24.
//
// Solidity: function oneGetVarUintArray(address readWriteAddr) view returns(uint256[])
func (_OneReadWriteVar *OneReadWriteVarCaller) OneGetVarUintArray(opts *bind.CallOpts, readWriteAddr common.Address) ([]*big.Int, error) {
var out []interface{}
err := _OneReadWriteVar.contract.Call(opts, &out, "oneGetVarUintArray", readWriteAddr)
if err != nil {
return *new([]*big.Int), err
}
out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
return out0, err
}
// OneGetVarUintArray is a free data retrieval call binding the contract method 0x19c8da24.
//
// Solidity: function oneGetVarUintArray(address readWriteAddr) view returns(uint256[])
func (_OneReadWriteVar *OneReadWriteVarSession) OneGetVarUintArray(readWriteAddr common.Address) ([]*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarUintArray(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OneGetVarUintArray is a free data retrieval call binding the contract method 0x19c8da24.
//
// Solidity: function oneGetVarUintArray(address readWriteAddr) view returns(uint256[])
func (_OneReadWriteVar *OneReadWriteVarCallerSession) OneGetVarUintArray(readWriteAddr common.Address) ([]*big.Int, error) {
return _OneReadWriteVar.Contract.OneGetVarUintArray(&_OneReadWriteVar.CallOpts, readWriteAddr)
}
// OnePushVarMapArray is a paid mutator transaction binding the contract method 0xf8a9c655.
//
// Solidity: function onePushVarMapArray(address readWriteAddr, uint256 key, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OnePushVarMapArray(opts *bind.TransactOpts, readWriteAddr common.Address, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "onePushVarMapArray", readWriteAddr, key, value)
}
// OnePushVarMapArray is a paid mutator transaction binding the contract method 0xf8a9c655.
//
// Solidity: function onePushVarMapArray(address readWriteAddr, uint256 key, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OnePushVarMapArray(readWriteAddr common.Address, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OnePushVarMapArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, key, value)
}
// OnePushVarMapArray is a paid mutator transaction binding the contract method 0xf8a9c655.
//
// Solidity: function onePushVarMapArray(address readWriteAddr, uint256 key, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OnePushVarMapArray(readWriteAddr common.Address, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OnePushVarMapArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, key, value)
}
// OnePushVarStringArray is a paid mutator transaction binding the contract method 0xd991a629.
//
// Solidity: function onePushVarStringArray(address readWriteAddr, string value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OnePushVarStringArray(opts *bind.TransactOpts, readWriteAddr common.Address, value string) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "onePushVarStringArray", readWriteAddr, value)
}
// OnePushVarStringArray is a paid mutator transaction binding the contract method 0xd991a629.
//
// Solidity: function onePushVarStringArray(address readWriteAddr, string value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OnePushVarStringArray(readWriteAddr common.Address, value string) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OnePushVarStringArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OnePushVarStringArray is a paid mutator transaction binding the contract method 0xd991a629.
//
// Solidity: function onePushVarStringArray(address readWriteAddr, string value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OnePushVarStringArray(readWriteAddr common.Address, value string) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OnePushVarStringArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OnePushVarUintArray is a paid mutator transaction binding the contract method 0x5fcbac6b.
//
// Solidity: function onePushVarUintArray(address readWriteAddr, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OnePushVarUintArray(opts *bind.TransactOpts, readWriteAddr common.Address, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "onePushVarUintArray", readWriteAddr, value)
}
// OnePushVarUintArray is a paid mutator transaction binding the contract method 0x5fcbac6b.
//
// Solidity: function onePushVarUintArray(address readWriteAddr, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OnePushVarUintArray(readWriteAddr common.Address, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OnePushVarUintArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OnePushVarUintArray is a paid mutator transaction binding the contract method 0x5fcbac6b.
//
// Solidity: function onePushVarUintArray(address readWriteAddr, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OnePushVarUintArray(readWriteAddr common.Address, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OnePushVarUintArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarMap is a paid mutator transaction binding the contract method 0x91a08da8.
//
// Solidity: function oneSetVarMap(address readWriteAddr, uint256 key, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OneSetVarMap(opts *bind.TransactOpts, readWriteAddr common.Address, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "oneSetVarMap", readWriteAddr, key, value)
}
// OneSetVarMap is a paid mutator transaction binding the contract method 0x91a08da8.
//
// Solidity: function oneSetVarMap(address readWriteAddr, uint256 key, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OneSetVarMap(readWriteAddr common.Address, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarMap(&_OneReadWriteVar.TransactOpts, readWriteAddr, key, value)
}
// OneSetVarMap is a paid mutator transaction binding the contract method 0x91a08da8.
//
// Solidity: function oneSetVarMap(address readWriteAddr, uint256 key, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OneSetVarMap(readWriteAddr common.Address, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarMap(&_OneReadWriteVar.TransactOpts, readWriteAddr, key, value)
}
// OneSetVarMapArray is a paid mutator transaction binding the contract method 0x5c947f9c.
//
// Solidity: function oneSetVarMapArray(address readWriteAddr, uint256 key, uint256[] valueArr) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OneSetVarMapArray(opts *bind.TransactOpts, readWriteAddr common.Address, key *big.Int, valueArr []*big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "oneSetVarMapArray", readWriteAddr, key, valueArr)
}
// OneSetVarMapArray is a paid mutator transaction binding the contract method 0x5c947f9c.
//
// Solidity: function oneSetVarMapArray(address readWriteAddr, uint256 key, uint256[] valueArr) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OneSetVarMapArray(readWriteAddr common.Address, key *big.Int, valueArr []*big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarMapArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, key, valueArr)
}
// OneSetVarMapArray is a paid mutator transaction binding the contract method 0x5c947f9c.
//
// Solidity: function oneSetVarMapArray(address readWriteAddr, uint256 key, uint256[] valueArr) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OneSetVarMapArray(readWriteAddr common.Address, key *big.Int, valueArr []*big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarMapArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, key, valueArr)
}
// OneSetVarString is a paid mutator transaction binding the contract method 0x72da1fb5.
//
// Solidity: function oneSetVarString(address readWriteAddr, string value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OneSetVarString(opts *bind.TransactOpts, readWriteAddr common.Address, value string) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "oneSetVarString", readWriteAddr, value)
}
// OneSetVarString is a paid mutator transaction binding the contract method 0x72da1fb5.
//
// Solidity: function oneSetVarString(address readWriteAddr, string value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OneSetVarString(readWriteAddr common.Address, value string) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarString(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarString is a paid mutator transaction binding the contract method 0x72da1fb5.
//
// Solidity: function oneSetVarString(address readWriteAddr, string value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OneSetVarString(readWriteAddr common.Address, value string) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarString(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarStringArray is a paid mutator transaction binding the contract method 0x62b529ce.
//
// Solidity: function oneSetVarStringArray(address readWriteAddr, string[] value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OneSetVarStringArray(opts *bind.TransactOpts, readWriteAddr common.Address, value []string) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "oneSetVarStringArray", readWriteAddr, value)
}
// OneSetVarStringArray is a paid mutator transaction binding the contract method 0x62b529ce.
//
// Solidity: function oneSetVarStringArray(address readWriteAddr, string[] value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OneSetVarStringArray(readWriteAddr common.Address, value []string) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarStringArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarStringArray is a paid mutator transaction binding the contract method 0x62b529ce.
//
// Solidity: function oneSetVarStringArray(address readWriteAddr, string[] value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OneSetVarStringArray(readWriteAddr common.Address, value []string) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarStringArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarUint256 is a paid mutator transaction binding the contract method 0xec2df307.
//
// Solidity: function oneSetVarUint256(address readWriteAddr, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OneSetVarUint256(opts *bind.TransactOpts, readWriteAddr common.Address, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "oneSetVarUint256", readWriteAddr, value)
}
// OneSetVarUint256 is a paid mutator transaction binding the contract method 0xec2df307.
//
// Solidity: function oneSetVarUint256(address readWriteAddr, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OneSetVarUint256(readWriteAddr common.Address, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarUint256(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarUint256 is a paid mutator transaction binding the contract method 0xec2df307.
//
// Solidity: function oneSetVarUint256(address readWriteAddr, uint256 value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OneSetVarUint256(readWriteAddr common.Address, value *big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarUint256(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarUintArray is a paid mutator transaction binding the contract method 0xfe32cb02.
//
// Solidity: function oneSetVarUintArray(address readWriteAddr, uint256[] value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactor) OneSetVarUintArray(opts *bind.TransactOpts, readWriteAddr common.Address, value []*big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.contract.Transact(opts, "oneSetVarUintArray", readWriteAddr, value)
}
// OneSetVarUintArray is a paid mutator transaction binding the contract method 0xfe32cb02.
//
// Solidity: function oneSetVarUintArray(address readWriteAddr, uint256[] value) returns()
func (_OneReadWriteVar *OneReadWriteVarSession) OneSetVarUintArray(readWriteAddr common.Address, value []*big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarUintArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// OneSetVarUintArray is a paid mutator transaction binding the contract method 0xfe32cb02.
//
// Solidity: function oneSetVarUintArray(address readWriteAddr, uint256[] value) returns()
func (_OneReadWriteVar *OneReadWriteVarTransactorSession) OneSetVarUintArray(readWriteAddr common.Address, value []*big.Int) (*types.Transaction, error) {
return _OneReadWriteVar.Contract.OneSetVarUintArray(&_OneReadWriteVar.TransactOpts, readWriteAddr, value)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractReadWrite
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// ReadWriteBlockMetaData contains all meta data concerning the ReadWriteBlock contract.
var ReadWriteBlockMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50610195806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063796b89b91461003b5780639663f88f14610059575b600080fd5b610043610077565b60405161005091906100ad565b60405180910390f35b61006161007f565b60405161006e91906100e1565b60405180910390f35b600042905090565b600060014361008e919061012b565b40905090565b6000819050919050565b6100a781610094565b82525050565b60006020820190506100c2600083018461009e565b92915050565b6000819050919050565b6100db816100c8565b82525050565b60006020820190506100f660008301846100d2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061013682610094565b915061014183610094565b9250828203905081811115610159576101586100fc565b5b9291505056fea2646970667358221220a0951f4041bca69095b3463492510bc63c1b3f06250358788f792cf88939f81864736f6c63430008130033",
}
// ReadWriteBlockABI is the input ABI used to generate the binding from.
// Deprecated: Use ReadWriteBlockMetaData.ABI instead.
var ReadWriteBlockABI = ReadWriteBlockMetaData.ABI
// ReadWriteBlockBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use ReadWriteBlockMetaData.Bin instead.
var ReadWriteBlockBin = ReadWriteBlockMetaData.Bin
// DeployReadWriteBlock deploys a new Ethereum contract, binding an instance of ReadWriteBlock to it.
func DeployReadWriteBlock(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ReadWriteBlock, error) {
parsed, err := ReadWriteBlockMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReadWriteBlockBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &ReadWriteBlock{ReadWriteBlockCaller: ReadWriteBlockCaller{contract: contract}, ReadWriteBlockTransactor: ReadWriteBlockTransactor{contract: contract}, ReadWriteBlockFilterer: ReadWriteBlockFilterer{contract: contract}}, nil
}
// ReadWriteBlock is an auto generated Go binding around an Ethereum contract.
type ReadWriteBlock struct {
ReadWriteBlockCaller // Read-only binding to the contract
ReadWriteBlockTransactor // Write-only binding to the contract
ReadWriteBlockFilterer // Log filterer for contract events
}
// ReadWriteBlockCaller is an auto generated read-only Go binding around an Ethereum contract.
type ReadWriteBlockCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ReadWriteBlockTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ReadWriteBlockTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ReadWriteBlockFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ReadWriteBlockFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ReadWriteBlockSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ReadWriteBlockSession struct {
Contract *ReadWriteBlock // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ReadWriteBlockCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ReadWriteBlockCallerSession struct {
Contract *ReadWriteBlockCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// ReadWriteBlockTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ReadWriteBlockTransactorSession struct {
Contract *ReadWriteBlockTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ReadWriteBlockRaw is an auto generated low-level Go binding around an Ethereum contract.
type ReadWriteBlockRaw struct {
Contract *ReadWriteBlock // Generic contract binding to access the raw methods on
}
// ReadWriteBlockCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ReadWriteBlockCallerRaw struct {
Contract *ReadWriteBlockCaller // Generic read-only contract binding to access the raw methods on
}
// ReadWriteBlockTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ReadWriteBlockTransactorRaw struct {
Contract *ReadWriteBlockTransactor // Generic write-only contract binding to access the raw methods on
}
// NewReadWriteBlock creates a new instance of ReadWriteBlock, bound to a specific deployed contract.
func NewReadWriteBlock(address common.Address, backend bind.ContractBackend) (*ReadWriteBlock, error) {
contract, err := bindReadWriteBlock(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &ReadWriteBlock{ReadWriteBlockCaller: ReadWriteBlockCaller{contract: contract}, ReadWriteBlockTransactor: ReadWriteBlockTransactor{contract: contract}, ReadWriteBlockFilterer: ReadWriteBlockFilterer{contract: contract}}, nil
}
// NewReadWriteBlockCaller creates a new read-only instance of ReadWriteBlock, bound to a specific deployed contract.
func NewReadWriteBlockCaller(address common.Address, caller bind.ContractCaller) (*ReadWriteBlockCaller, error) {
contract, err := bindReadWriteBlock(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &ReadWriteBlockCaller{contract: contract}, nil
}
// NewReadWriteBlockTransactor creates a new write-only instance of ReadWriteBlock, bound to a specific deployed contract.
func NewReadWriteBlockTransactor(address common.Address, transactor bind.ContractTransactor) (*ReadWriteBlockTransactor, error) {
contract, err := bindReadWriteBlock(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &ReadWriteBlockTransactor{contract: contract}, nil
}
// NewReadWriteBlockFilterer creates a new log filterer instance of ReadWriteBlock, bound to a specific deployed contract.
func NewReadWriteBlockFilterer(address common.Address, filterer bind.ContractFilterer) (*ReadWriteBlockFilterer, error) {
contract, err := bindReadWriteBlock(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &ReadWriteBlockFilterer{contract: contract}, nil
}
// bindReadWriteBlock binds a generic wrapper to an already deployed contract.
func bindReadWriteBlock(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(ReadWriteBlockABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ReadWriteBlock *ReadWriteBlockRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ReadWriteBlock.Contract.ReadWriteBlockCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ReadWriteBlock *ReadWriteBlockRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ReadWriteBlock.Contract.ReadWriteBlockTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ReadWriteBlock *ReadWriteBlockRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ReadWriteBlock.Contract.ReadWriteBlockTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ReadWriteBlock *ReadWriteBlockCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ReadWriteBlock.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ReadWriteBlock *ReadWriteBlockTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ReadWriteBlock.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ReadWriteBlock *ReadWriteBlockTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ReadWriteBlock.Contract.contract.Transact(opts, method, params...)
}
// GetBlockHash is a free data retrieval call binding the contract method 0x9663f88f.
//
// Solidity: function getBlockHash() view returns(bytes32)
func (_ReadWriteBlock *ReadWriteBlockCaller) GetBlockHash(opts *bind.CallOpts) ([32]byte, error) {
var out []interface{}
err := _ReadWriteBlock.contract.Call(opts, &out, "getBlockHash")
if err != nil {
return *new([32]byte), err
}
out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
return out0, err
}
// GetBlockHash is a free data retrieval call binding the contract method 0x9663f88f.
//
// Solidity: function getBlockHash() view returns(bytes32)
func (_ReadWriteBlock *ReadWriteBlockSession) GetBlockHash() ([32]byte, error) {
return _ReadWriteBlock.Contract.GetBlockHash(&_ReadWriteBlock.CallOpts)
}
// GetBlockHash is a free data retrieval call binding the contract method 0x9663f88f.
//
// Solidity: function getBlockHash() view returns(bytes32)
func (_ReadWriteBlock *ReadWriteBlockCallerSession) GetBlockHash() ([32]byte, error) {
return _ReadWriteBlock.Contract.GetBlockHash(&_ReadWriteBlock.CallOpts)
}
// GetBlockTimestamp is a free data retrieval call binding the contract method 0x796b89b9.
//
// Solidity: function getBlockTimestamp() view returns(uint256)
func (_ReadWriteBlock *ReadWriteBlockCaller) GetBlockTimestamp(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _ReadWriteBlock.contract.Call(opts, &out, "getBlockTimestamp")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// GetBlockTimestamp is a free data retrieval call binding the contract method 0x796b89b9.
//
// Solidity: function getBlockTimestamp() view returns(uint256)
func (_ReadWriteBlock *ReadWriteBlockSession) GetBlockTimestamp() (*big.Int, error) {
return _ReadWriteBlock.Contract.GetBlockTimestamp(&_ReadWriteBlock.CallOpts)
}
// GetBlockTimestamp is a free data retrieval call binding the contract method 0x796b89b9.
//
// Solidity: function getBlockTimestamp() view returns(uint256)
func (_ReadWriteBlock *ReadWriteBlockCallerSession) GetBlockTimestamp() (*big.Int, error) {
return _ReadWriteBlock.Contract.GetBlockTimestamp(&_ReadWriteBlock.CallOpts)
}
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
package contractReadWrite
import (
"errors"
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"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/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = errors.New
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
// ReadWriteVarMetaData contains all meta data concerning the ReadWriteVar contract.
var ReadWriteVarMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"}],\"name\":\"getVarMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"}],\"name\":\"getVarMapArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVarString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVarStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVarUint256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVarUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pushVarMapArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"pushVarStringArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pushVarUintArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"setVarMap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"valueArr\",\"type\":\"uint256[]\"}],\"name\":\"setVarMapArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setVarString\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"name\":\"setVarStringArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"setVarUint256\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"name\":\"setVarUintArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"varMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"varMapArray\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"varString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"varStringArray\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"varUint256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"varUintArray\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50611537806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80639c0dde45116100b8578063ba22b3ca1161007c578063ba22b3ca14610337578063ba525ac014610355578063be59f2da14610371578063d42428811461038f578063db277ccc146103bf578063ec660a78146103db57610136565b80639c0dde4514610291578063a0f63be1146102af578063a3f32fb8146102cd578063a4ac27f3146102e9578063a55cf49d1461030757610136565b806368c7187b116100ff57806368c7187b146101ef5780636b83cbf11461021f5780637e76b9951461023d578063919a17071461025957806391aa423a1461027557610136565b806263caa81461013b57806301f045e0146101575780631c11bb68146101735780632aa47566146101a3578063463a8c60146101d3575b600080fd5b61015560048036038101906101509190610cad565b61040b565b005b610171600480360381019061016c9190610d2c565b610425565b005b61018d60048036038101906101889190610d6c565b610463565b60405161019a9190610da8565b60405180910390f35b6101bd60048036038101906101b89190610d2c565b61047b565b6040516101ca9190610da8565b60405180910390f35b6101ed60048036038101906101e89190610d2c565b6104ac565b005b61020960048036038101906102049190610d6c565b6104c7565b6040516102169190610da8565b60405180910390f35b6102276104e3565b6040516102349190610da8565b60405180910390f35b61025760048036038101906102529190610d6c565b6104ed565b005b610273600480360381019061026e9190610e86565b610519565b005b61028f600480360381019061028a9190610ecf565b610533565b005b610299610546565b6040516102a69190610da8565b60405180910390f35b6102b761054c565b6040516102c49190610fd6565b60405180910390f35b6102e760048036038101906102e29190610ecf565b6105a4565b005b6102f16105dc565b6040516102fe9190611077565b60405180910390f35b610321600480360381019061031c9190610d6c565b61066e565b60405161032e9190610da8565b60405180910390f35b61033f610692565b60405161034c9190611077565b60405180910390f35b61036f600480360381019061036a9190610d6c565b610720565b005b61037961072a565b60405161038691906111a5565b60405180910390f35b6103a960048036038101906103a49190610d6c565b610803565b6040516103b69190610fd6565b60405180910390f35b6103d960048036038101906103d491906111c7565b61086e565b005b6103f560048036038101906103f09190610d6c565b61089a565b6040516104029190611077565b60405180910390f35b8060039080519060200190610421929190610946565b5050565b600160008381526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150555050565b60006020528060005260406000206000915090505481565b6001602052816000526040600020818154811061049757600080fd5b90600052602060002001600091509150505481565b80600080848152602001908152602001600020819055505050565b6000806000838152602001908152602001600020549050919050565b6000600454905090565b600281908060018154018082558091505060019003906000526020600020016000909190919091505550565b806002908051906020019061052f92919061099f565b5050565b8060059081610542919061142f565b5050565b60045481565b6060600280548060200260200160405190810160405280929190818152602001828054801561059a57602002820191906000526020600020905b815481526020019060010190808311610586575b5050505050905090565b6003819080600181540180825580915050600190039060005260206000200160009091909190915090816105d8919061142f565b5050565b6060600580546105eb90611252565b80601f016020809104026020016040519081016040528092919081815260200182805461061790611252565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b6002818154811061067e57600080fd5b906000526020600020016000915090505481565b6005805461069f90611252565b80601f01602080910402602001604051908101604052809291908181526020018280546106cb90611252565b80156107185780601f106106ed57610100808354040283529160200191610718565b820191906000526020600020905b8154815290600101906020018083116106fb57829003601f168201915b505050505081565b8060048190555050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156107fa57838290600052602060002001805461076d90611252565b80601f016020809104026020016040519081016040528092919081815260200182805461079990611252565b80156107e65780601f106107bb576101008083540402835291602001916107e6565b820191906000526020600020905b8154815290600101906020018083116107c957829003601f168201915b50505050508152602001906001019061074e565b50505050905090565b60606001600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561086257602002820191906000526020600020905b81548152602001906001019080831161084e575b50505050509050919050565b8060016000848152602001908152602001600020908051906020019061089592919061099f565b505050565b600381815481106108aa57600080fd5b9060005260206000200160009150905080546108c590611252565b80601f01602080910402602001604051908101604052809291908181526020018280546108f190611252565b801561093e5780601f106109135761010080835404028352916020019161093e565b820191906000526020600020905b81548152906001019060200180831161092157829003601f168201915b505050505081565b82805482825590600052602060002090810192821561098e579160200282015b8281111561098d57825182908161097d919061142f565b5091602001919060010190610966565b5b50905061099b91906109ec565b5090565b8280548282559060005260206000209081019282156109db579160200282015b828111156109da5782518255916020019190600101906109bf565b5b5090506109e89190610a10565b5090565b5b80821115610a0c5760008181610a039190610a2d565b506001016109ed565b5090565b5b80821115610a29576000816000905550600101610a11565b5090565b508054610a3990611252565b6000825580601f10610a4b5750610a6a565b601f016020900490600052602060002090810190610a699190610a10565b5b50565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610acf82610a86565b810181811067ffffffffffffffff82111715610aee57610aed610a97565b5b80604052505050565b6000610b01610a6d565b9050610b0d8282610ac6565b919050565b600067ffffffffffffffff821115610b2d57610b2c610a97565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff821115610b6357610b62610a97565b5b610b6c82610a86565b9050602081019050919050565b82818337600083830152505050565b6000610b9b610b9684610b48565b610af7565b905082815260208101848484011115610bb757610bb6610b43565b5b610bc2848285610b79565b509392505050565b600082601f830112610bdf57610bde610a81565b5b8135610bef848260208601610b88565b91505092915050565b6000610c0b610c0684610b12565b610af7565b90508083825260208201905060208402830185811115610c2e57610c2d610b3e565b5b835b81811015610c7557803567ffffffffffffffff811115610c5357610c52610a81565b5b808601610c608982610bca565b85526020850194505050602081019050610c30565b5050509392505050565b600082601f830112610c9457610c93610a81565b5b8135610ca4848260208601610bf8565b91505092915050565b600060208284031215610cc357610cc2610a77565b5b600082013567ffffffffffffffff811115610ce157610ce0610a7c565b5b610ced84828501610c7f565b91505092915050565b6000819050919050565b610d0981610cf6565b8114610d1457600080fd5b50565b600081359050610d2681610d00565b92915050565b60008060408385031215610d4357610d42610a77565b5b6000610d5185828601610d17565b9250506020610d6285828601610d17565b9150509250929050565b600060208284031215610d8257610d81610a77565b5b6000610d9084828501610d17565b91505092915050565b610da281610cf6565b82525050565b6000602082019050610dbd6000830184610d99565b92915050565b600067ffffffffffffffff821115610dde57610ddd610a97565b5b602082029050602081019050919050565b6000610e02610dfd84610dc3565b610af7565b90508083825260208201905060208402830185811115610e2557610e24610b3e565b5b835b81811015610e4e5780610e3a8882610d17565b845260208401935050602081019050610e27565b5050509392505050565b600082601f830112610e6d57610e6c610a81565b5b8135610e7d848260208601610def565b91505092915050565b600060208284031215610e9c57610e9b610a77565b5b600082013567ffffffffffffffff811115610eba57610eb9610a7c565b5b610ec684828501610e58565b91505092915050565b600060208284031215610ee557610ee4610a77565b5b600082013567ffffffffffffffff811115610f0357610f02610a7c565b5b610f0f84828501610bca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f4d81610cf6565b82525050565b6000610f5f8383610f44565b60208301905092915050565b6000602082019050919050565b6000610f8382610f18565b610f8d8185610f23565b9350610f9883610f34565b8060005b83811015610fc9578151610fb08882610f53565b9750610fbb83610f6b565b925050600181019050610f9c565b5085935050505092915050565b60006020820190508181036000830152610ff08184610f78565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611032578082015181840152602081019050611017565b60008484015250505050565b600061104982610ff8565b6110538185611003565b9350611063818560208601611014565b61106c81610a86565b840191505092915050565b60006020820190508181036000830152611091818461103e565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006110e182610ff8565b6110eb81856110c5565b93506110fb818560208601611014565b61110481610a86565b840191505092915050565b600061111b83836110d6565b905092915050565b6000602082019050919050565b600061113b82611099565b61114581856110a4565b935083602082028501611157856110b5565b8060005b858110156111935784840389528151611174858261110f565b945061117f83611123565b925060208a0199505060018101905061115b565b50829750879550505050505092915050565b600060208201905081810360008301526111bf8184611130565b905092915050565b600080604083850312156111de576111dd610a77565b5b60006111ec85828601610d17565b925050602083013567ffffffffffffffff81111561120d5761120c610a7c565b5b61121985828601610e58565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061126a57607f821691505b60208210810361127d5761127c611223565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026112e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826112a8565b6112ef86836112a8565b95508019841693508086168417925050509392505050565b6000819050919050565b600061132c61132761132284610cf6565b611307565b610cf6565b9050919050565b6000819050919050565b61134683611311565b61135a61135282611333565b8484546112b5565b825550505050565b600090565b61136f611362565b61137a81848461133d565b505050565b5b8181101561139e57611393600082611367565b600181019050611380565b5050565b601f8211156113e3576113b481611283565b6113bd84611298565b810160208510156113cc578190505b6113e06113d885611298565b83018261137f565b50505b505050565b600082821c905092915050565b6000611406600019846008026113e8565b1980831691505092915050565b600061141f83836113f5565b9150826002028217905092915050565b61143882610ff8565b67ffffffffffffffff81111561145157611450610a97565b5b61145b8254611252565b6114668282856113a2565b600060209050601f8311600181146114995760008415611487578287015190505b6114918582611413565b8655506114f9565b601f1984166114a786611283565b60005b828110156114cf578489015182556001820191506020850194506020810190506114aa565b868310156114ec57848901516114e8601f8916826113f5565b8355505b6001600288020188555050505b50505050505056fea264697066735822122093081f8193c9cd64efb1a25cddee5a6daa0939f7953c02951280fbcab198ab8964736f6c63430008130033",
}
// ReadWriteVarABI is the input ABI used to generate the binding from.
// Deprecated: Use ReadWriteVarMetaData.ABI instead.
var ReadWriteVarABI = ReadWriteVarMetaData.ABI
// ReadWriteVarBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use ReadWriteVarMetaData.Bin instead.
var ReadWriteVarBin = ReadWriteVarMetaData.Bin
// DeployReadWriteVar deploys a new Ethereum contract, binding an instance of ReadWriteVar to it.
func DeployReadWriteVar(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ReadWriteVar, error) {
parsed, err := ReadWriteVarMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
if parsed == nil {
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReadWriteVarBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
return address, tx, &ReadWriteVar{ReadWriteVarCaller: ReadWriteVarCaller{contract: contract}, ReadWriteVarTransactor: ReadWriteVarTransactor{contract: contract}, ReadWriteVarFilterer: ReadWriteVarFilterer{contract: contract}}, nil
}
// ReadWriteVar is an auto generated Go binding around an Ethereum contract.
type ReadWriteVar struct {
ReadWriteVarCaller // Read-only binding to the contract
ReadWriteVarTransactor // Write-only binding to the contract
ReadWriteVarFilterer // Log filterer for contract events
}
// ReadWriteVarCaller is an auto generated read-only Go binding around an Ethereum contract.
type ReadWriteVarCaller struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ReadWriteVarTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ReadWriteVarTransactor struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ReadWriteVarFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ReadWriteVarFilterer struct {
contract *bind.BoundContract // Generic contract wrapper for the low level calls
}
// ReadWriteVarSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ReadWriteVarSession struct {
Contract *ReadWriteVar // Generic contract binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ReadWriteVarCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ReadWriteVarCallerSession struct {
Contract *ReadWriteVarCaller // Generic contract caller binding to set the session for
CallOpts bind.CallOpts // Call options to use throughout this session
}
// ReadWriteVarTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ReadWriteVarTransactorSession struct {
Contract *ReadWriteVarTransactor // Generic contract transactor binding to set the session for
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}
// ReadWriteVarRaw is an auto generated low-level Go binding around an Ethereum contract.
type ReadWriteVarRaw struct {
Contract *ReadWriteVar // Generic contract binding to access the raw methods on
}
// ReadWriteVarCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ReadWriteVarCallerRaw struct {
Contract *ReadWriteVarCaller // Generic read-only contract binding to access the raw methods on
}
// ReadWriteVarTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ReadWriteVarTransactorRaw struct {
Contract *ReadWriteVarTransactor // Generic write-only contract binding to access the raw methods on
}
// NewReadWriteVar creates a new instance of ReadWriteVar, bound to a specific deployed contract.
func NewReadWriteVar(address common.Address, backend bind.ContractBackend) (*ReadWriteVar, error) {
contract, err := bindReadWriteVar(address, backend, backend, backend)
if err != nil {
return nil, err
}
return &ReadWriteVar{ReadWriteVarCaller: ReadWriteVarCaller{contract: contract}, ReadWriteVarTransactor: ReadWriteVarTransactor{contract: contract}, ReadWriteVarFilterer: ReadWriteVarFilterer{contract: contract}}, nil
}
// NewReadWriteVarCaller creates a new read-only instance of ReadWriteVar, bound to a specific deployed contract.
func NewReadWriteVarCaller(address common.Address, caller bind.ContractCaller) (*ReadWriteVarCaller, error) {
contract, err := bindReadWriteVar(address, caller, nil, nil)
if err != nil {
return nil, err
}
return &ReadWriteVarCaller{contract: contract}, nil
}
// NewReadWriteVarTransactor creates a new write-only instance of ReadWriteVar, bound to a specific deployed contract.
func NewReadWriteVarTransactor(address common.Address, transactor bind.ContractTransactor) (*ReadWriteVarTransactor, error) {
contract, err := bindReadWriteVar(address, nil, transactor, nil)
if err != nil {
return nil, err
}
return &ReadWriteVarTransactor{contract: contract}, nil
}
// NewReadWriteVarFilterer creates a new log filterer instance of ReadWriteVar, bound to a specific deployed contract.
func NewReadWriteVarFilterer(address common.Address, filterer bind.ContractFilterer) (*ReadWriteVarFilterer, error) {
contract, err := bindReadWriteVar(address, nil, nil, filterer)
if err != nil {
return nil, err
}
return &ReadWriteVarFilterer{contract: contract}, nil
}
// bindReadWriteVar binds a generic wrapper to an already deployed contract.
func bindReadWriteVar(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
parsed, err := abi.JSON(strings.NewReader(ReadWriteVarABI))
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ReadWriteVar *ReadWriteVarRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ReadWriteVar.Contract.ReadWriteVarCaller.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ReadWriteVar *ReadWriteVarRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ReadWriteVar.Contract.ReadWriteVarTransactor.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ReadWriteVar *ReadWriteVarRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ReadWriteVar.Contract.ReadWriteVarTransactor.contract.Transact(opts, method, params...)
}
// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_ReadWriteVar *ReadWriteVarCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
return _ReadWriteVar.Contract.contract.Call(opts, result, method, params...)
}
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_ReadWriteVar *ReadWriteVarTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
return _ReadWriteVar.Contract.contract.Transfer(opts)
}
// Transact invokes the (paid) contract method with params as input values.
func (_ReadWriteVar *ReadWriteVarTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
return _ReadWriteVar.Contract.contract.Transact(opts, method, params...)
}
// GetVarMap is a free data retrieval call binding the contract method 0x68c7187b.
//
// Solidity: function getVarMap(uint256 key) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCaller) GetVarMap(opts *bind.CallOpts, key *big.Int) (*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "getVarMap", key)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// GetVarMap is a free data retrieval call binding the contract method 0x68c7187b.
//
// Solidity: function getVarMap(uint256 key) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarSession) GetVarMap(key *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.GetVarMap(&_ReadWriteVar.CallOpts, key)
}
// GetVarMap is a free data retrieval call binding the contract method 0x68c7187b.
//
// Solidity: function getVarMap(uint256 key) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCallerSession) GetVarMap(key *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.GetVarMap(&_ReadWriteVar.CallOpts, key)
}
// GetVarMapArray is a free data retrieval call binding the contract method 0xd4242881.
//
// Solidity: function getVarMapArray(uint256 key) view returns(uint256[])
func (_ReadWriteVar *ReadWriteVarCaller) GetVarMapArray(opts *bind.CallOpts, key *big.Int) ([]*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "getVarMapArray", key)
if err != nil {
return *new([]*big.Int), err
}
out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
return out0, err
}
// GetVarMapArray is a free data retrieval call binding the contract method 0xd4242881.
//
// Solidity: function getVarMapArray(uint256 key) view returns(uint256[])
func (_ReadWriteVar *ReadWriteVarSession) GetVarMapArray(key *big.Int) ([]*big.Int, error) {
return _ReadWriteVar.Contract.GetVarMapArray(&_ReadWriteVar.CallOpts, key)
}
// GetVarMapArray is a free data retrieval call binding the contract method 0xd4242881.
//
// Solidity: function getVarMapArray(uint256 key) view returns(uint256[])
func (_ReadWriteVar *ReadWriteVarCallerSession) GetVarMapArray(key *big.Int) ([]*big.Int, error) {
return _ReadWriteVar.Contract.GetVarMapArray(&_ReadWriteVar.CallOpts, key)
}
// GetVarString is a free data retrieval call binding the contract method 0xa4ac27f3.
//
// Solidity: function getVarString() view returns(string)
func (_ReadWriteVar *ReadWriteVarCaller) GetVarString(opts *bind.CallOpts) (string, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "getVarString")
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// GetVarString is a free data retrieval call binding the contract method 0xa4ac27f3.
//
// Solidity: function getVarString() view returns(string)
func (_ReadWriteVar *ReadWriteVarSession) GetVarString() (string, error) {
return _ReadWriteVar.Contract.GetVarString(&_ReadWriteVar.CallOpts)
}
// GetVarString is a free data retrieval call binding the contract method 0xa4ac27f3.
//
// Solidity: function getVarString() view returns(string)
func (_ReadWriteVar *ReadWriteVarCallerSession) GetVarString() (string, error) {
return _ReadWriteVar.Contract.GetVarString(&_ReadWriteVar.CallOpts)
}
// GetVarStringArray is a free data retrieval call binding the contract method 0xbe59f2da.
//
// Solidity: function getVarStringArray() view returns(string[])
func (_ReadWriteVar *ReadWriteVarCaller) GetVarStringArray(opts *bind.CallOpts) ([]string, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "getVarStringArray")
if err != nil {
return *new([]string), err
}
out0 := *abi.ConvertType(out[0], new([]string)).(*[]string)
return out0, err
}
// GetVarStringArray is a free data retrieval call binding the contract method 0xbe59f2da.
//
// Solidity: function getVarStringArray() view returns(string[])
func (_ReadWriteVar *ReadWriteVarSession) GetVarStringArray() ([]string, error) {
return _ReadWriteVar.Contract.GetVarStringArray(&_ReadWriteVar.CallOpts)
}
// GetVarStringArray is a free data retrieval call binding the contract method 0xbe59f2da.
//
// Solidity: function getVarStringArray() view returns(string[])
func (_ReadWriteVar *ReadWriteVarCallerSession) GetVarStringArray() ([]string, error) {
return _ReadWriteVar.Contract.GetVarStringArray(&_ReadWriteVar.CallOpts)
}
// GetVarUint256 is a free data retrieval call binding the contract method 0x6b83cbf1.
//
// Solidity: function getVarUint256() view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCaller) GetVarUint256(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "getVarUint256")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// GetVarUint256 is a free data retrieval call binding the contract method 0x6b83cbf1.
//
// Solidity: function getVarUint256() view returns(uint256)
func (_ReadWriteVar *ReadWriteVarSession) GetVarUint256() (*big.Int, error) {
return _ReadWriteVar.Contract.GetVarUint256(&_ReadWriteVar.CallOpts)
}
// GetVarUint256 is a free data retrieval call binding the contract method 0x6b83cbf1.
//
// Solidity: function getVarUint256() view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCallerSession) GetVarUint256() (*big.Int, error) {
return _ReadWriteVar.Contract.GetVarUint256(&_ReadWriteVar.CallOpts)
}
// GetVarUintArray is a free data retrieval call binding the contract method 0xa0f63be1.
//
// Solidity: function getVarUintArray() view returns(uint256[])
func (_ReadWriteVar *ReadWriteVarCaller) GetVarUintArray(opts *bind.CallOpts) ([]*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "getVarUintArray")
if err != nil {
return *new([]*big.Int), err
}
out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
return out0, err
}
// GetVarUintArray is a free data retrieval call binding the contract method 0xa0f63be1.
//
// Solidity: function getVarUintArray() view returns(uint256[])
func (_ReadWriteVar *ReadWriteVarSession) GetVarUintArray() ([]*big.Int, error) {
return _ReadWriteVar.Contract.GetVarUintArray(&_ReadWriteVar.CallOpts)
}
// GetVarUintArray is a free data retrieval call binding the contract method 0xa0f63be1.
//
// Solidity: function getVarUintArray() view returns(uint256[])
func (_ReadWriteVar *ReadWriteVarCallerSession) GetVarUintArray() ([]*big.Int, error) {
return _ReadWriteVar.Contract.GetVarUintArray(&_ReadWriteVar.CallOpts)
}
// VarMap is a free data retrieval call binding the contract method 0x1c11bb68.
//
// Solidity: function varMap(uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCaller) VarMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "varMap", arg0)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// VarMap is a free data retrieval call binding the contract method 0x1c11bb68.
//
// Solidity: function varMap(uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarSession) VarMap(arg0 *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.VarMap(&_ReadWriteVar.CallOpts, arg0)
}
// VarMap is a free data retrieval call binding the contract method 0x1c11bb68.
//
// Solidity: function varMap(uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCallerSession) VarMap(arg0 *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.VarMap(&_ReadWriteVar.CallOpts, arg0)
}
// VarMapArray is a free data retrieval call binding the contract method 0x2aa47566.
//
// Solidity: function varMapArray(uint256 , uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCaller) VarMapArray(opts *bind.CallOpts, arg0 *big.Int, arg1 *big.Int) (*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "varMapArray", arg0, arg1)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// VarMapArray is a free data retrieval call binding the contract method 0x2aa47566.
//
// Solidity: function varMapArray(uint256 , uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarSession) VarMapArray(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.VarMapArray(&_ReadWriteVar.CallOpts, arg0, arg1)
}
// VarMapArray is a free data retrieval call binding the contract method 0x2aa47566.
//
// Solidity: function varMapArray(uint256 , uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCallerSession) VarMapArray(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.VarMapArray(&_ReadWriteVar.CallOpts, arg0, arg1)
}
// VarString is a free data retrieval call binding the contract method 0xba22b3ca.
//
// Solidity: function varString() view returns(string)
func (_ReadWriteVar *ReadWriteVarCaller) VarString(opts *bind.CallOpts) (string, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "varString")
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// VarString is a free data retrieval call binding the contract method 0xba22b3ca.
//
// Solidity: function varString() view returns(string)
func (_ReadWriteVar *ReadWriteVarSession) VarString() (string, error) {
return _ReadWriteVar.Contract.VarString(&_ReadWriteVar.CallOpts)
}
// VarString is a free data retrieval call binding the contract method 0xba22b3ca.
//
// Solidity: function varString() view returns(string)
func (_ReadWriteVar *ReadWriteVarCallerSession) VarString() (string, error) {
return _ReadWriteVar.Contract.VarString(&_ReadWriteVar.CallOpts)
}
// VarStringArray is a free data retrieval call binding the contract method 0xec660a78.
//
// Solidity: function varStringArray(uint256 ) view returns(string)
func (_ReadWriteVar *ReadWriteVarCaller) VarStringArray(opts *bind.CallOpts, arg0 *big.Int) (string, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "varStringArray", arg0)
if err != nil {
return *new(string), err
}
out0 := *abi.ConvertType(out[0], new(string)).(*string)
return out0, err
}
// VarStringArray is a free data retrieval call binding the contract method 0xec660a78.
//
// Solidity: function varStringArray(uint256 ) view returns(string)
func (_ReadWriteVar *ReadWriteVarSession) VarStringArray(arg0 *big.Int) (string, error) {
return _ReadWriteVar.Contract.VarStringArray(&_ReadWriteVar.CallOpts, arg0)
}
// VarStringArray is a free data retrieval call binding the contract method 0xec660a78.
//
// Solidity: function varStringArray(uint256 ) view returns(string)
func (_ReadWriteVar *ReadWriteVarCallerSession) VarStringArray(arg0 *big.Int) (string, error) {
return _ReadWriteVar.Contract.VarStringArray(&_ReadWriteVar.CallOpts, arg0)
}
// VarUint256 is a free data retrieval call binding the contract method 0x9c0dde45.
//
// Solidity: function varUint256() view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCaller) VarUint256(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "varUint256")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// VarUint256 is a free data retrieval call binding the contract method 0x9c0dde45.
//
// Solidity: function varUint256() view returns(uint256)
func (_ReadWriteVar *ReadWriteVarSession) VarUint256() (*big.Int, error) {
return _ReadWriteVar.Contract.VarUint256(&_ReadWriteVar.CallOpts)
}
// VarUint256 is a free data retrieval call binding the contract method 0x9c0dde45.
//
// Solidity: function varUint256() view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCallerSession) VarUint256() (*big.Int, error) {
return _ReadWriteVar.Contract.VarUint256(&_ReadWriteVar.CallOpts)
}
// VarUintArray is a free data retrieval call binding the contract method 0xa55cf49d.
//
// Solidity: function varUintArray(uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCaller) VarUintArray(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
var out []interface{}
err := _ReadWriteVar.contract.Call(opts, &out, "varUintArray", arg0)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// VarUintArray is a free data retrieval call binding the contract method 0xa55cf49d.
//
// Solidity: function varUintArray(uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarSession) VarUintArray(arg0 *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.VarUintArray(&_ReadWriteVar.CallOpts, arg0)
}
// VarUintArray is a free data retrieval call binding the contract method 0xa55cf49d.
//
// Solidity: function varUintArray(uint256 ) view returns(uint256)
func (_ReadWriteVar *ReadWriteVarCallerSession) VarUintArray(arg0 *big.Int) (*big.Int, error) {
return _ReadWriteVar.Contract.VarUintArray(&_ReadWriteVar.CallOpts, arg0)
}
// PushVarMapArray is a paid mutator transaction binding the contract method 0x01f045e0.
//
// Solidity: function pushVarMapArray(uint256 key, uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) PushVarMapArray(opts *bind.TransactOpts, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "pushVarMapArray", key, value)
}
// PushVarMapArray is a paid mutator transaction binding the contract method 0x01f045e0.
//
// Solidity: function pushVarMapArray(uint256 key, uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarSession) PushVarMapArray(key *big.Int, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.PushVarMapArray(&_ReadWriteVar.TransactOpts, key, value)
}
// PushVarMapArray is a paid mutator transaction binding the contract method 0x01f045e0.
//
// Solidity: function pushVarMapArray(uint256 key, uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) PushVarMapArray(key *big.Int, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.PushVarMapArray(&_ReadWriteVar.TransactOpts, key, value)
}
// PushVarStringArray is a paid mutator transaction binding the contract method 0xa3f32fb8.
//
// Solidity: function pushVarStringArray(string value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) PushVarStringArray(opts *bind.TransactOpts, value string) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "pushVarStringArray", value)
}
// PushVarStringArray is a paid mutator transaction binding the contract method 0xa3f32fb8.
//
// Solidity: function pushVarStringArray(string value) returns()
func (_ReadWriteVar *ReadWriteVarSession) PushVarStringArray(value string) (*types.Transaction, error) {
return _ReadWriteVar.Contract.PushVarStringArray(&_ReadWriteVar.TransactOpts, value)
}
// PushVarStringArray is a paid mutator transaction binding the contract method 0xa3f32fb8.
//
// Solidity: function pushVarStringArray(string value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) PushVarStringArray(value string) (*types.Transaction, error) {
return _ReadWriteVar.Contract.PushVarStringArray(&_ReadWriteVar.TransactOpts, value)
}
// PushVarUintArray is a paid mutator transaction binding the contract method 0x7e76b995.
//
// Solidity: function pushVarUintArray(uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) PushVarUintArray(opts *bind.TransactOpts, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "pushVarUintArray", value)
}
// PushVarUintArray is a paid mutator transaction binding the contract method 0x7e76b995.
//
// Solidity: function pushVarUintArray(uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarSession) PushVarUintArray(value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.PushVarUintArray(&_ReadWriteVar.TransactOpts, value)
}
// PushVarUintArray is a paid mutator transaction binding the contract method 0x7e76b995.
//
// Solidity: function pushVarUintArray(uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) PushVarUintArray(value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.PushVarUintArray(&_ReadWriteVar.TransactOpts, value)
}
// SetVarMap is a paid mutator transaction binding the contract method 0x463a8c60.
//
// Solidity: function setVarMap(uint256 key, uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) SetVarMap(opts *bind.TransactOpts, key *big.Int, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "setVarMap", key, value)
}
// SetVarMap is a paid mutator transaction binding the contract method 0x463a8c60.
//
// Solidity: function setVarMap(uint256 key, uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarSession) SetVarMap(key *big.Int, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarMap(&_ReadWriteVar.TransactOpts, key, value)
}
// SetVarMap is a paid mutator transaction binding the contract method 0x463a8c60.
//
// Solidity: function setVarMap(uint256 key, uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) SetVarMap(key *big.Int, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarMap(&_ReadWriteVar.TransactOpts, key, value)
}
// SetVarMapArray is a paid mutator transaction binding the contract method 0xdb277ccc.
//
// Solidity: function setVarMapArray(uint256 key, uint256[] valueArr) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) SetVarMapArray(opts *bind.TransactOpts, key *big.Int, valueArr []*big.Int) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "setVarMapArray", key, valueArr)
}
// SetVarMapArray is a paid mutator transaction binding the contract method 0xdb277ccc.
//
// Solidity: function setVarMapArray(uint256 key, uint256[] valueArr) returns()
func (_ReadWriteVar *ReadWriteVarSession) SetVarMapArray(key *big.Int, valueArr []*big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarMapArray(&_ReadWriteVar.TransactOpts, key, valueArr)
}
// SetVarMapArray is a paid mutator transaction binding the contract method 0xdb277ccc.
//
// Solidity: function setVarMapArray(uint256 key, uint256[] valueArr) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) SetVarMapArray(key *big.Int, valueArr []*big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarMapArray(&_ReadWriteVar.TransactOpts, key, valueArr)
}
// SetVarString is a paid mutator transaction binding the contract method 0x91aa423a.
//
// Solidity: function setVarString(string value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) SetVarString(opts *bind.TransactOpts, value string) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "setVarString", value)
}
// SetVarString is a paid mutator transaction binding the contract method 0x91aa423a.
//
// Solidity: function setVarString(string value) returns()
func (_ReadWriteVar *ReadWriteVarSession) SetVarString(value string) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarString(&_ReadWriteVar.TransactOpts, value)
}
// SetVarString is a paid mutator transaction binding the contract method 0x91aa423a.
//
// Solidity: function setVarString(string value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) SetVarString(value string) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarString(&_ReadWriteVar.TransactOpts, value)
}
// SetVarStringArray is a paid mutator transaction binding the contract method 0x0063caa8.
//
// Solidity: function setVarStringArray(string[] value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) SetVarStringArray(opts *bind.TransactOpts, value []string) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "setVarStringArray", value)
}
// SetVarStringArray is a paid mutator transaction binding the contract method 0x0063caa8.
//
// Solidity: function setVarStringArray(string[] value) returns()
func (_ReadWriteVar *ReadWriteVarSession) SetVarStringArray(value []string) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarStringArray(&_ReadWriteVar.TransactOpts, value)
}
// SetVarStringArray is a paid mutator transaction binding the contract method 0x0063caa8.
//
// Solidity: function setVarStringArray(string[] value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) SetVarStringArray(value []string) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarStringArray(&_ReadWriteVar.TransactOpts, value)
}
// SetVarUint256 is a paid mutator transaction binding the contract method 0xba525ac0.
//
// Solidity: function setVarUint256(uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) SetVarUint256(opts *bind.TransactOpts, value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "setVarUint256", value)
}
// SetVarUint256 is a paid mutator transaction binding the contract method 0xba525ac0.
//
// Solidity: function setVarUint256(uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarSession) SetVarUint256(value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarUint256(&_ReadWriteVar.TransactOpts, value)
}
// SetVarUint256 is a paid mutator transaction binding the contract method 0xba525ac0.
//
// Solidity: function setVarUint256(uint256 value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) SetVarUint256(value *big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarUint256(&_ReadWriteVar.TransactOpts, value)
}
// SetVarUintArray is a paid mutator transaction binding the contract method 0x919a1707.
//
// Solidity: function setVarUintArray(uint256[] value) returns()
func (_ReadWriteVar *ReadWriteVarTransactor) SetVarUintArray(opts *bind.TransactOpts, value []*big.Int) (*types.Transaction, error) {
return _ReadWriteVar.contract.Transact(opts, "setVarUintArray", value)
}
// SetVarUintArray is a paid mutator transaction binding the contract method 0x919a1707.
//
// Solidity: function setVarUintArray(uint256[] value) returns()
func (_ReadWriteVar *ReadWriteVarSession) SetVarUintArray(value []*big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarUintArray(&_ReadWriteVar.TransactOpts, value)
}
// SetVarUintArray is a paid mutator transaction binding the contract method 0x919a1707.
//
// Solidity: function setVarUintArray(uint256[] value) returns()
func (_ReadWriteVar *ReadWriteVarTransactorSession) SetVarUintArray(value []*big.Int) (*types.Transaction, error) {
return _ReadWriteVar.Contract.SetVarUintArray(&_ReadWriteVar.TransactOpts, value)
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "../../interface/IReadWriteVar.sol";
contract OneReadWriteVar {
function oneSetVarMap(
address readWriteAddr,
uint256 key,
uint256 value
) external {
IReadWriteVar(readWriteAddr).setVarMap(key, value);
}
function oneGetVarMap(
address readWriteAddr,
uint256 key
) external view returns (uint256) {
return IReadWriteVar(readWriteAddr).getVarMap(key);
}
function onePushVarMapArray(
address readWriteAddr,
uint256 key,
uint256 value
) external {
IReadWriteVar(readWriteAddr).pushVarMapArray(key, value);
}
function oneGetVarMapArray(
address readWriteAddr,
uint256 key
) external view returns (uint256[] memory) {
return IReadWriteVar(readWriteAddr).getVarMapArray(key);
}
function oneSetVarMapArray(
address readWriteAddr,
uint256 key,
uint256[] memory valueArr
) external {
IReadWriteVar(readWriteAddr).setVarMapArray(key, valueArr);
}
function onePushVarUintArray(
address readWriteAddr,
uint256 value
) external {
IReadWriteVar(readWriteAddr).pushVarUintArray(value);
}
function oneSetVarUintArray(
address readWriteAddr,
uint256[] memory value
) external {
IReadWriteVar(readWriteAddr).setVarUintArray(value);
}
function oneGetVarUintArray(
address readWriteAddr
) external view returns (uint256[] memory) {
return IReadWriteVar(readWriteAddr).getVarUintArray();
}
function onePushVarStringArray(
address readWriteAddr,
string memory value
) external {
IReadWriteVar(readWriteAddr).pushVarStringArray(value);
}
function oneSetVarStringArray(
address readWriteAddr,
string[] memory value
) external {
IReadWriteVar(readWriteAddr).setVarStringArray(value);
}
function oneGetVarStringArray(
address readWriteAddr
) external view returns (string[] memory) {
return IReadWriteVar(readWriteAddr).getVarStringArray();
}
function oneSetVarUint256(address readWriteAddr, uint256 value) external {
IReadWriteVar(readWriteAddr).setVarUint256(value);
}
function oneGetVarUint256(
address readWriteAddr
) external view returns (uint256) {
return IReadWriteVar(readWriteAddr).getVarUint256();
}
function oneSetVarString(
address readWriteAddr,
string memory value
) external {
IReadWriteVar(readWriteAddr).setVarString(value);
}
function oneGetVarString(
address readWriteAddr
) external view returns (string memory) {
return IReadWriteVar(readWriteAddr).getVarString();
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
contract ReadWriteBlock {
function getBlockTimestamp() external view returns (uint256) {
return block.timestamp;
}
function getBlockHash() external view returns (bytes32) {
return blockhash(block.number - 1);
}
}
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
contract ReadWriteVar {
mapping(uint256 => uint256) public varMap;
mapping(uint256 => uint256[]) public varMapArray;
uint256[] public varUintArray;
string[] public varStringArray;
uint256 public varUint256;
string public varString;
function setVarMap(uint256 key, uint256 value) external {
varMap[key] = value;
}
function getVarMap(uint256 key) external view returns (uint256) {
return varMap[key];
}
function pushVarMapArray(uint256 key, uint256 value) external {
varMapArray[key].push(value);
}
function getVarMapArray(
uint256 key
) external view returns (uint256[] memory) {
return varMapArray[key];
}
function setVarMapArray(uint256 key, uint256[] memory valueArr) external {
varMapArray[key] = valueArr;
}
function pushVarUintArray(uint256 value) external {
varUintArray.push(value);
}
function setVarUintArray(uint256[] memory value) external {
varUintArray = value;
}
function getVarUintArray() external view returns (uint256[] memory) {
return varUintArray;
}
function pushVarStringArray(string memory value) external {
varStringArray.push(value);
}
function setVarStringArray(string[] memory value) external {
varStringArray = value;
}
function getVarStringArray() external view returns (string[] memory) {
return varStringArray;
}
function setVarUint256(uint256 value) external {
varUint256 = value;
}
function getVarUint256() external view returns (uint256) {
return varUint256;
}
function setVarString(string memory value) external {
varString = value;
}
function getVarString() external view returns (string memory) {
return varString;
}
}
module contract-case
go 1.19
require (
github.com/ethereum/go-ethereum v1.11.2
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.9.0
)
require (
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/deckarep/golang-set/v2 v2.1.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-ole/go-ole v1.2.1 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
github.com/tklauser/go-sysconf v0.3.5 // indirect
github.com/tklauser/numcpus v0.2.2 // indirect
golang.org/x/crypto v0.1.0 // indirect
golang.org/x/sys v0.5.0 // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
)
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI=
github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/ethereum/go-ethereum v1.11.2 h1:z/luyejbevDCAMUUiu0rc80dxJxOnpoG58k5o0tSawc=
github.com/ethereum/go-ethereum v1.11.2/go.mod h1:DuefStAgaxoaYGLR0FueVcVbehmn5n9QUcVrMCuOvuc=
github.com/ethereum/go-ethereum v1.11.4 h1:KG81SnUHXWk8LJB3mBcHg/E2yLvXoiPmRMCIRxgx3cE=
github.com/ethereum/go-ethereum v1.11.4/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI=
github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA=
github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
package log
import (
"context"
"github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
"os"
"path"
"time"
)
var (
mlog = logrus.New()
)
type LogConfig struct {
Save uint `json:"save"`
Path string `json:"path"`
Level string `json:"level"`
}
func InitLog(logConfig LogConfig) {
mlog.Out = os.Stdout
var loglevel logrus.Level
err := loglevel.UnmarshalText([]byte(logConfig.Level))
if err != nil {
mlog.Panicf("set log level failed: %v", err)
}
mlog.SetLevel(loglevel)
mlog.Formatter = &logrus.TextFormatter{FullTimestamp: true, TimestampFormat: "2006-01-2 15:04:05.000"}
localFilesystemLogger(mlog, logConfig.Path, logConfig.Save)
}
func logWriter(logPath string, level string, save uint) *rotatelogs.RotateLogs {
logFullPath := path.Join(logPath, level)
logWriter, err := rotatelogs.New(
logFullPath+".%Y%m%d",
rotatelogs.WithLinkName(logFullPath),
rotatelogs.WithRotationCount(save),
rotatelogs.WithRotationTime(24*time.Hour),
)
if err != nil {
panic(err)
}
return logWriter
}
func localFilesystemLogger(log *logrus.Logger, logPath string, save uint) {
lfHook := lfshook.NewHook(lfshook.WriterMap{
logrus.DebugLevel: logWriter(logPath, "debug", save), // 为不同级别设置不同的输出目的
logrus.InfoLevel: logWriter(logPath, "info", save),
logrus.WarnLevel: logWriter(logPath, "warn", save),
logrus.ErrorLevel: logWriter(logPath, "error", save),
logrus.FatalLevel: logWriter(logPath, "fatal", save),
logrus.PanicLevel: logWriter(logPath, "panic", save),
}, &logrus.TextFormatter{FullTimestamp: true, TimestampFormat: "2006-01-2 15:04:05.000"})
log.AddHook(lfHook)
}
// WithField allocates a new entry and adds a field to it.
// Debug, Print, Info, Warn, Error, Fatal or Panic must be then applied to
// this new returned entry.
// If you want multiple fields, use `WithFields`.
func WithField(key string, value interface{}) *logrus.Entry {
return mlog.WithField(key, value)
}
// Adds a struct of fields to the log entry. All it does is call `WithField` for
// each `Field`.
func WithFields(fields logrus.Fields) *logrus.Entry {
return mlog.WithFields(fields)
}
// Add an error as single field to the log entry. All it does is call
// `WithError` for the given `error`.
func WithError(err error) *logrus.Entry {
return mlog.WithError(err)
}
// Add a context to the log entry.
func WithContext(ctx context.Context) *logrus.Entry {
return mlog.WithContext(ctx)
}
// Overrides the time of the log entry.
func WithTime(t time.Time) *logrus.Entry {
return mlog.WithTime(t)
}
func Logf(level logrus.Level, format string, args ...interface{}) {
mlog.Logf(level, format, args...)
}
func Tracef(format string, args ...interface{}) {
mlog.Tracef(format, args...)
}
func Debugf(format string, args ...interface{}) {
mlog.Debugf(format, args...)
}
func Infof(format string, args ...interface{}) {
mlog.Infof(format, args...)
}
func Printf(format string, args ...interface{}) {
mlog.Printf(format, args...)
}
func Warnf(format string, args ...interface{}) {
mlog.Warnf(format, args...)
}
func Warningf(format string, args ...interface{}) {
mlog.Warningf(format, args...)
}
func Errorf(format string, args ...interface{}) {
mlog.Errorf(format, args)
}
func Fatalf(format string, args ...interface{}) {
mlog.Fatalf(format, args...)
}
func Panicf(format string, args ...interface{}) {
mlog.Panicf(format, args...)
}
func Log(level logrus.Level, args ...interface{}) {
mlog.Log(level, args...)
}
func LogFn(level logrus.Level, fn logrus.LogFunction) {
mlog.LogFn(level, fn)
}
func Trace(args ...interface{}) {
mlog.Trace(args...)
}
func Debug(args ...interface{}) {
mlog.Debug(args...)
}
func Info(args ...interface{}) {
mlog.Info(args...)
}
func Print(args ...interface{}) {
mlog.Print(args...)
}
func Warn(args ...interface{}) {
mlog.Warn(args...)
}
func Warning(args ...interface{}) {
mlog.Warning(args...)
}
func Error(args ...interface{}) {
mlog.Error(args...)
}
func Fatal(args ...interface{}) {
mlog.Fatal(args...)
}
func Panic(args ...interface{}) {
mlog.Panic(args...)
}
func TraceFn(fn logrus.LogFunction) {
mlog.TraceFn(fn)
}
func DebugFn(fn logrus.LogFunction) {
mlog.DebugFn(fn)
}
func InfoFn(fn logrus.LogFunction) {
mlog.InfoFn(fn)
}
func PrintFn(fn logrus.LogFunction) {
mlog.PrintFn(fn)
}
func WarnFn(fn logrus.LogFunction) {
mlog.WarnFn(fn)
}
func WarningFn(fn logrus.LogFunction) {
mlog.WarningFn(fn)
}
func ErrorFn(fn logrus.LogFunction) {
mlog.ErrorFn(fn)
}
func FatalFn(fn logrus.LogFunction) {
mlog.FatalFn(fn)
}
func PanicFn(fn logrus.LogFunction) {
mlog.PanicFn(fn)
}
func Logln(level logrus.Level, args ...interface{}) {
mlog.Logln(level, args...)
}
func Traceln(args ...interface{}) {
mlog.Traceln(args...)
}
func Debugln(args ...interface{}) {
mlog.Debugln(args...)
}
func Infoln(args ...interface{}) {
mlog.Infoln(args...)
}
func Println(args ...interface{}) {
mlog.Println(args...)
}
func Warnln(args ...interface{}) {
mlog.Warnln(args...)
}
func Warningln(args ...interface{}) {
mlog.Warningln(args...)
}
func Errorln(args ...interface{}) {
mlog.Errorln(args...)
}
func Fatalln(args ...interface{}) {
mlog.Fatalln(args...)
}
func Panicln(args ...interface{}) {
mlog.Panicln(args...)
}
package main
import (
"contract-case/log"
"contract-case/operator"
"contract-case/tool"
"contract-case/util"
"github.com/ethereum/go-ethereum/core/types"
"time"
)
func main() {
log.InitLog(log.LogConfig{Path: "logs", Level: "debug", Save: 3})
txArr := make([]*types.Transaction, 0)
// 部署合约
if tool.Cfg.IsDeployContract {
txArr = operator.DeployContract(tool.Cfg.RpcNode, txArr)
}
// 初始化From账户以及合约账户
if tool.Cfg.IsInitAccountBalance {
operator.InitCaseAccount(tool.Cfg.RpcNode, txArr)
}
// 不相关交易case
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 {
operator.SendTransaction(txArr)
time.Sleep(time.Second * 20)
util.GetTxReceipt(tool.Cfg.RpcNode, txArr)
}
//balance := util.GetAccountBalance(tool.Cfg.RpcNode)
//log.Info("balance:", balance)
}
package operator
import (
"context"
"contract-case/constant"
"contract-case/contract/coin"
"contract-case/contract/deploy"
contractErc20 "contract-case/contract/erc20"
readWrite "contract-case/contract/variable_state"
contractCoin "contract-case/contract_abi/coin_transfer/compile"
erc20 "contract-case/contract_abi/erc20_transfer/compile"
erc721 "contract-case/contract_abi/erc721_transfer/compile"
contractReadWrite "contract-case/contract_abi/read_write/compile"
"contract-case/log"
"contract-case/tool"
"crypto/ecdsa"
"encoding/json"
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
"math/big"
"os"
"sync"
"time"
)
var tranChanel = make(chan *types.Transaction, 1000)
func DeployContract(client *ethclient.Client, txRes []*types.Transaction) []*types.Transaction {
auth, err := bind.NewKeyedTransactorWithChainID(tool.Cfg.DeployPrv, tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
auth.NoSend = true
auth.Value = big.NewInt(0)
auth.GasLimit = uint64(10000000000000)
auth.GasPrice = big.NewInt(1000000000000)
nonce, err := client.NonceAt(context.Background(), tool.Cfg.DeployAddr, nil)
if err != nil {
log.Error("DeployTokenTransfer func get acc nonce err:", err)
}
auth.Nonce = big.NewInt(int64(nonce))
contractMap := make(map[string]common.Address, 0)
for _, deployFunc := range deploy.DeployFunc {
contractAddr, transaction, contractType := deployFunc(auth, client)
txRes = append(txRes, transaction)
contractMap[contractType] = contractAddr
auth.Nonce = auth.Nonce.Add(auth.Nonce, big.NewInt(1))
}
generateContractMap(contractMap)
return txRes
}
func generateContractMap(contractMap map[string]common.Address) {
jsonData, err := json.MarshalIndent(contractMap, "", " ")
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 InitCaseAccount(client *ethclient.Client, txArr []*types.Transaction) {
nonce, err := client.NonceAt(context.Background(), tool.Cfg.DeployAddr, nil)
if err != nil {
log.Error("Init account - get acc nonce err:", err)
return
}
accArr := tool.ParseAccountConfig("./config/account.json")
contractMap := tool.ParseContractConfig("./config/contractConfig.json")
// 初始化From账户
amount := big.NewInt(0)
amount.SetString("10000000000000000000", 10)
trade := &coin.Trade{
FromPrv: tool.Cfg.DeployPrv,
FromNonce: big.NewInt(int64(nonce)),
Amount: amount,
Gas: big.NewInt(21000),
GasPrice: big.NewInt(1000000000),
ChainId: tool.Cfg.ChainId,
}
for i := 0; i < len(accArr.FromAddr); i++ {
toAddress := accArr.FromAddr[i]
trade.ToAddr = &toAddress
tx, err := trade.CoinTransferSignTx()
if err != nil {
log.Error("Init account - sign tran err:", err.Error())
return
}
err = client.SendTransaction(context.Background(), tx)
if err != nil {
log.Error("Init account - send tran err:", err.Error())
return
}
txArr = append(txArr, tx)
nonce += 1
trade.FromNonce = big.NewInt(int64(nonce))
log.Info("Init acc successful,addr:", toAddress)
}
// 初始化转账合约账户余额
trade.FromNonce = big.NewInt(int64(nonce))
coinTransferContract := common.HexToAddress(contractMap[constant.COIN_TRANSFER])
trade.ToAddr = &coinTransferContract
tx, err := trade.CoinTransferSignTx()
if err != nil {
log.Error("Init account - sign tran err:", err.Error())
return
}
err = client.SendTransaction(context.Background(), tx)
if err != nil {
log.Error("Init account - send tran err:", err.Error())
return
}
txArr = append(txArr, tx)
nonce += 1
// 初始化erc20 并且mint
auth, err := bind.NewKeyedTransactorWithChainID(tool.Cfg.DeployPrv, tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
return
}
newERC20, err := erc20.NewERC20(common.HexToAddress(contractMap[constant.ERC20]), client)
if err != nil {
log.Error("Init account - new erc20 err:", err.Error())
return
}
auth.Nonce = big.NewInt(int64(nonce))
auth.GasPrice = big.NewInt(100000000000)
auth.GasLimit = big.NewInt(100000000000).Uint64()
// mint
of, err := newERC20.BalanceOf(&bind.CallOpts{}, tool.Cfg.DeployAddr)
if err != nil {
return
}
if of.Int64() == 0 {
tx, err := newERC20.Mint(auth, tool.Cfg.DeployAddr, big.NewInt(1000000000000000000))
if err != nil {
log.Error("Init account - erc20 mint err:", err.Error())
return
}
txArr = append(txArr, tx)
log.Info("Init account - mint 20 successful,tx:", tx.Hash().Hex())
nonce += 1
auth.Nonce = big.NewInt(int64(nonce))
}
// erc20 转账
tx, err = newERC20.Transfer(auth, common.HexToAddress(contractMap[constant.TOKEN20_TRANSFER]), big.NewInt(1000000000000000000))
if err != nil {
log.Error("Init account - erc20 transfer err:", err.Error())
return
}
txArr = append(txArr, tx)
nonce += 1
// 初始化erc721 并且mint
newERC721, err := erc721.NewERC721(common.HexToAddress(contractMap[constant.ERC721]), client)
if err != nil {
log.Error("Init account - new erc721 err:", err.Error())
return
}
startTokenId := 0
endTokenId := 1
for i := startTokenId; i < endTokenId; i++ {
auth.Nonce = big.NewInt(int64(nonce))
tx, err := newERC721.Mint(auth, common.HexToAddress(contractMap[constant.TOKEN721_TRANSFER]), big.NewInt(int64(i)))
if err != nil {
log.Error("Init account - erc721 mint err:", err.Error())
return
}
txArr = append(txArr, tx)
log.Info("Init account - mint 721 successful,tx:", tx.Hash().Hex())
nonce += 1
}
}
func GenerateAcc(count int) *tool.AccArr {
fromAddr := make([]string, 0)
fromPrv := make([]string, 0)
toAddr := make([]string, 0)
toPrv := make([]string, 0)
for i := 0; i < count; i++ {
toPrivateKey, err := crypto.GenerateKey()
if err != nil {
log.Error("Gen wallet Err:%r", err)
break
}
prv := hexutil.Encode(crypto.FromECDSA(toPrivateKey))
addr := crypto.PubkeyToAddress(toPrivateKey.PublicKey).Hex()
if i < count/2 {
fromAddr = append(fromAddr, addr)
fromPrv = append(fromPrv, prv)
} else {
toAddr = append(toAddr, addr)
toPrv = append(toPrv, prv)
}
}
accArr := &tool.AccArr{
FromAddr: fromAddr,
FromPrv: fromPrv,
ToAddr: toAddr,
ToPrv: toPrv,
}
jsonData, err := json.MarshalIndent(accArr, "", " ")
if err != nil {
log.Error("JSON encoding account failed: ", err)
}
err = os.WriteFile("./config/account.json", jsonData, 0644)
if err != nil {
fmt.Println("File writing account failed: ", err)
}
return accArr
}
func NotAssociatedContractTx(accountNonceMap *sync.Map, contractMap map[string]string, client *ethclient.Client, resTxArr []*types.Transaction) []*types.Transaction {
testAccArr := tool.ParseAccountConfig("./config/account.json")
txCount := 10
accIndex := 0
// 普通转账交易
coinTrade := &coin.Trade{}
for i := 0; i < txCount; i++ {
toAddr := testAccArr.ToAddr[i]
coinTrade.FromPrv = testAccArr.FromPrv[i]
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
coinTrade.FromNonce = big.NewInt(value.(int64))
coinTrade.ToAddr = &toAddr
coinTrade.Gas = big.NewInt(21000)
coinTrade.GasPrice = big.NewInt(10000000000)
coinTrade.ChainId = tool.Cfg.ChainId
coinTrade.Amount = big.NewInt(100000000000000000)
tx, err := coinTrade.CoinTransferSignTx()
if err != nil {
log.Error("constructor coin transfer tx err:", err.Error())
return nil
}
resTxArr = append(resTxArr, tx)
}
accIndex += txCount
// 调用合约转账交易
// 单层调用
contractCoinTrade := &coin.ContractCoinTrade{
ToAddr: testAccArr.ToAddr,
Amount: big.NewInt(100000000000000000),
}
transfer, err := contractCoin.NewChainCoinTransfer(common.HexToAddress(contractMap[constant.COIN_TRANSFER]), client)
if err != nil {
return nil
}
for i := accIndex; i < txCount+accIndex; i++ {
auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
auth.Nonce = big.NewInt(value.(int64))
auth.NoSend = true
auth.GasLimit = 1000000000000
auth.GasPrice = big.NewInt(1000000000000)
tx, err := contractCoinTrade.TransferSignTx(auth, transfer)
if err != nil {
return nil
}
resTxArr = append(resTxArr, tx)
}
accIndex += txCount
// 多层调用
contractCoinOneTrade := &coin.ContractCoinOneTrade{
ChainContractAdr: common.HexToAddress(contractMap[constant.COIN_TRANSFER]),
ToAddr: testAccArr.ToAddr,
Amount: big.NewInt(100000000000000000),
}
oneChainCoinTransfer, err := contractCoin.NewOneChainCoinTransfer(common.HexToAddress(contractMap[constant.COIN_TRANSFER]), client)
if err != nil {
return nil
}
for i := accIndex; i < txCount+accIndex; i++ {
auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
auth.Nonce = big.NewInt(value.(int64))
auth.NoSend = true
auth.GasLimit = 1000000000000
auth.GasPrice = big.NewInt(1000000000000)
tx, err := contractCoinOneTrade.OneTransferSignTx(auth, oneChainCoinTransfer)
if err != nil {
return nil
}
resTxArr = append(resTxArr, tx)
}
accIndex += txCount
// 读写变量合约
readWriteTrade := &readWrite.ReadWriteTrade{
KeyParam: big.NewInt(1),
ValueParam: big.NewInt(1),
StringParam: "test",
UintParam: big.NewInt(1),
ValueArrParam: []*big.Int{big.NewInt(1), big.NewInt(2)},
StringArrParam: []string{"1", "2"},
}
readWriteVar, err := contractReadWrite.NewReadWriteVar(common.HexToAddress(contractMap[constant.READ_WRITE]), client)
if err != nil {
return nil
}
funcStr := []string{
"PushVarMapArray",
"PushVarStringArray",
"PushVarUintArray",
"SetVarString",
"SetVarMap",
"SetVarMapArray",
"SetVarUint256",
"SetVarStringArray",
"SetVarUintArray",
}
for i := accIndex; i < len(funcStr)+accIndex; i++ {
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
tx := readWriteCase(testAccArr.FromPrv[i], funcStr[i-accIndex], big.NewInt(value.(int64)), readWriteTrade, readWriteVar)
resTxArr = append(resTxArr, tx)
}
accIndex += len(funcStr)
// erc20 转账
// 单层
erc20Trade := &contractErc20.Erc20Trade{
Erc20Addr: common.HexToAddress(contractMap[constant.ERC20]),
Amount: big.NewInt(10000000000000000),
}
for i := accIndex; i < txCount+accIndex; i++ {
auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
auth.GasPrice = big.NewInt(1000000000000)
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
auth.Nonce = big.NewInt(value.(int64))
auth.NoSend = true
tokenTransfer, err := erc20.NewTokenTransfer(common.HexToAddress(contractMap[constant.TOKEN20_TRANSFER]), client)
if err != nil {
return nil
}
erc20Trade.ToAddr = testAccArr.ToAddr
tx, err := erc20Trade.Erc20TransferSignTx(auth, tokenTransfer)
if err != nil {
return nil
}
resTxArr = append(resTxArr, tx)
//erc20Trade.FromAddr = testAccArr.FromAddr[i]
//auth.Nonce = nonce.Add(nonce, big.NewInt(1))
//tx, err = erc20Trade.Erc20TransferFromSignTx(auth, tokenTransfer)
//resTxArr = append(resTxArr, tx)
//if err != nil {
// return nil
//}
}
accIndex += txCount
// 多层
oneErc20Trade := &contractErc20.OneErc20Trade{
TokenTransferAddr: common.HexToAddress(contractMap[constant.TOKEN20_TRANSFER]),
Erc20Addr: common.HexToAddress(contractMap[constant.ERC20]),
Amount: big.NewInt(1000000000000),
}
for i := accIndex; i < txCount+accIndex; i++ {
auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
tokenTransfer, err := erc20.NewOneTokenTransfer(common.HexToAddress(contractMap[constant.ONE_TOKEN20_TRANSFER]), client)
if err != nil {
return nil
}
oneErc20Trade.ToAddr = testAccArr.ToAddr
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
auth.Nonce = big.NewInt(value.(int64))
auth.NoSend = true
auth.GasLimit = 1000000000000
auth.GasPrice = big.NewInt(1000000000000)
tx, err := oneErc20Trade.Erc20OneTransferTx(auth, tokenTransfer)
if err != nil {
return nil
}
log.Info("Erc20OneTransferTx tx:", tx.Hash().Hex())
resTxArr = append(resTxArr, tx)
//erc20Trade.FromAddr = testAccArr.FromAddr[i]
//auth.Nonce = nonce.Add(nonce, big.NewInt(1))
//tx, err = oneErc20Trade.Erc20OneTransferFromTx(auth, tokenTransfer)
//if err != nil {
// return nil
//}
//resTxArr = append(resTxArr, tx)
}
// erc721 转账
//accIndex += txCount
// 单层
//erc721Trade := &contractErc721.Erc721Trade{
// Erc721Addr: common.HexToAddress(contractMap[constant.ERC721]),
//}
//for i := accIndex; i < txCount+accIndex; i++ {
// auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
// if err != nil {
// log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
// }
// tokenTransfer, err := erc721.NewNftTokenTransfer(common.HexToAddress(contractMap[constant.TOKEN721_TRANSFER]), client)
// if err != nil {
// return nil
// }
// erc721Trade.ToAddr = testAccArr.ToAddr[i]
// erc721Trade.FromAddr = testAccArr.FromAddr[i]
// erc721Trade.TokenId = big.NewInt(int64(i - accIndex))
// auth.Nonce = nonce
// auth.NoSend = true
// auth.GasPrice = big.NewInt(1000000000000)
// tx, err := erc721Trade.Erc721TransferFromSignTx(auth, tokenTransfer)
// if err != nil {
// return nil
// }
// log.Info("Erc721TransferFromSignTx tx:", tx.Hash().Hex())
// resTxArr = append(resTxArr, tx)
//}
//accIndex += txCount
//// 多层
//oneErc721Trade := &contractErc721.OneErc721Trade{
// Erc721Addr: common.HexToAddress(contractMap[constant.ERC721]),
//}
//for i := accIndex; i < txCount+accIndex; i++ {
// auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
// if err != nil {
// log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
// }
// tokenTransfer, err := erc721.NewOneNftTokenTransfer(common.HexToAddress(contractMap[constant.ONE_TOKEN721_TRANSFER]), client)
// if err != nil {
// return nil
// }
// oneErc721Trade.ToAddr = testAccArr.ToAddr[i]
// oneErc721Trade.FromAddr = testAccArr.FromAddr[i]
// auth.Nonce = nonce
// auth.NoSend = true
// auth.GasPrice = big.NewInt(1000000000000)
// tx, err := oneErc721Trade.Erc721OneTransferFromSignTx(auth, tokenTransfer)
// if err != nil {
// return nil
// }
// log.Info("Erc721OneTransferFromSignTx tx:", tx.Hash().Hex())
// resTxArr = append(resTxArr, tx)
//}
//accIndex += txCount
return resTxArr
}
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{}
if funcStr == "PushVarMapArray" {
tx, err = readWriteTrade.ReadWriteSignTxPushVarMapArray(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "PushVarStringArray" {
tx, err = readWriteTrade.ReadWriteSignTxPushVarStringArray(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "PushVarUintArray" {
tx, err = readWriteTrade.ReadWriteSignTxPushVarUintArray(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "SetVarString" {
tx, err = readWriteTrade.ReadWriteSignTxSetVarString(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "SetVarMap" {
tx, err = readWriteTrade.ReadWriteSignTxSetVarMap(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "SetVarMapArray" {
tx, err = readWriteTrade.ReadWriteSignTxSetVarMapArray(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "SetVarUint256" {
tx, err = readWriteTrade.ReadWriteSignTxSetVarUint256(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "SetVarStringArray" {
tx, err = readWriteTrade.ReadWriteSignTxSetVarStringArray(auth, readWriteVar)
if err != nil {
return nil
}
}
if funcStr == "SetVarUintArray" {
tx, err = readWriteTrade.ReadWriteSignTxSetVarUintArray(auth, readWriteVar)
if err != nil {
return nil
}
}
return tx
}
func PartialAssociationContractTx() {
}
func FullyAssociativeContractTx() {
}
func SendTransaction(trans []*types.Transaction) {
client := tool.Cfg.RpcNode
for i := 0; i < 1; i++ {
go func() {
for {
select {
case tran := <-tranChanel:
err := client.SendTransaction(context.Background(), tran)
log.Info("Send tran:", tran.Hash())
if err != nil {
log.Error("send tx error:", err.Error(), ",tx:", tran.Hash().Hex())
return
}
}
}
}()
}
for i := 0; i < len(trans); i++ {
tranChanel <- trans[i]
log.Info("Input count:", i)
}
time.Sleep(time.Second * 60)
log.Info("Send tran successful")
}
package tool
import (
"bufio"
"contract-case/log"
"crypto/ecdsa"
"encoding/json"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
"math/big"
"os"
"strings"
)
type ConfigJson struct {
DeployAddr string `json:"deployAddr"`
DeployPrv string `json:"deployPrv"`
RpcNode string `json:"rpcNode"`
ChainId int64 `json:"chainId"`
TransferType map[string]bool `json:"transferType"`
GenerateAccCount int `json:"generateAccCount"`
IsDeployContract bool `json:"isDeployContract"`
IsInitAccountBalance bool `json:"isInitAccountBalance"`
}
type Config struct {
DeployAddr common.Address
DeployPrv *ecdsa.PrivateKey
RpcNode *ethclient.Client
ChainId *big.Int
TransferType map[string]bool
GenerateAccCount int
IsDeployContract bool
IsInitAccountBalance bool
}
type AccArr struct {
FromAddr []string `json:"from"`
FromPrv []string `json:"fromPrv"`
ToAddr []string `json:"toAddr"`
ToPrv []string `json:"toPrv"`
}
type AccArrFormat struct {
FromAddr []common.Address
FromPrv []*ecdsa.PrivateKey
ToAddr []common.Address
ToPrv []*ecdsa.PrivateKey
}
var (
cfgJson *ConfigJson
Cfg *Config
)
func init() {
ParseConfig("./config/app.json")
}
func ParseConfig(path string) {
file, err := os.Open(path)
if err != nil {
panic(err)
}
defer func(file *os.File) {
err := file.Close()
if err != nil {
log.Error("read file close failed:", err)
}
}(file)
reader := bufio.NewReader(file)
decoder := json.NewDecoder(reader)
if err := decoder.Decode(&cfgJson); err != nil {
log.Error("Config func decode error:", err)
}
deployECDSA, err := crypto.HexToECDSA(cfgJson.DeployPrv)
if err != nil {
log.Error("Config func HexToECDSA error:", err)
}
dial, err := ethclient.Dial(cfgJson.RpcNode)
if err != nil {
log.Error("Config func eth client dial error:", err)
}
Cfg = &Config{
DeployAddr: common.HexToAddress(cfgJson.DeployAddr),
DeployPrv: deployECDSA,
RpcNode: dial,
ChainId: big.NewInt(cfgJson.ChainId),
TransferType: cfgJson.TransferType,
GenerateAccCount: cfgJson.GenerateAccCount,
IsDeployContract: cfgJson.IsDeployContract,
IsInitAccountBalance: cfgJson.IsInitAccountBalance,
}
}
func ParseContractConfig(path string) map[string]string {
data, err := os.ReadFile(path)
if err != nil {
panic(err)
}
var result map[string]string
err = json.Unmarshal(data, &result)
if err != nil {
panic(err)
}
return result
}
func ParseAccountConfig(path string) *AccArrFormat {
data, err := os.ReadFile(path)
if err != nil {
panic(err)
}
res := &AccArr{}
err = json.Unmarshal(data, &res)
if err != nil {
panic(err)
}
fromAddrArr := make([]common.Address, 0)
fromPrvArr := make([]*ecdsa.PrivateKey, 0)
toAddrArr := make([]common.Address, 0)
toPrvArr := make([]*ecdsa.PrivateKey, 0)
for i := 0; i < len(res.FromPrv); i++ {
fromAddr := common.HexToAddress(res.FromAddr[i])
toAddr := common.HexToAddress(res.ToAddr[i])
fromLeftPrv := strings.TrimPrefix(res.FromPrv[i], "0x")
fromPrv, _ := crypto.HexToECDSA(fromLeftPrv)
toLeftPrv := strings.TrimPrefix(res.ToPrv[i], "0x")
toPrv, _ := crypto.HexToECDSA(toLeftPrv)
fromAddrArr = append(fromAddrArr, fromAddr)
fromPrvArr = append(fromPrvArr, fromPrv)
toAddrArr = append(toAddrArr, toAddr)
toPrvArr = append(toPrvArr, toPrv)
}
accArrFormat := &AccArrFormat{
FromPrv: fromPrvArr,
FromAddr: fromAddrArr,
ToPrv: toPrvArr,
ToAddr: toAddrArr,
}
return accArrFormat
}
package util
import (
"context"
erc721 "contract-case/contract_abi/erc721_transfer/compile"
"contract-case/log"
"contract-case/tool"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"golang.org/x/crypto/sha3"
"sync"
"sync/atomic"
)
func CallContractData(method string, params ...[]byte) []byte {
var data []byte
hash := sha3.NewLegacyKeccak256()
hash.Write([]byte(method))
methodID := hash.Sum(nil)[:4]
data = append(data, methodID...)
for _, v := range params {
data = append(data, common.LeftPadBytes(v, 32)...)
}
return data
}
func HexToAddress(addr string) common.Address {
if addr == "" {
return common.Address{}
}
return common.HexToAddress(addr)
}
func GetTxReceipt(client *ethclient.Client, txArr []*types.Transaction) {
for _, tx := range txArr {
receipt, err := client.TransactionReceipt(context.Background(), tx.Hash())
if err != nil {
log.Error("Get tran receipt err:", err)
return
}
if receipt.Status == 0 {
log.Errorf("Receipt: status: %d, logs:%s ,gasUsed: %d", receipt.Status, receipt.Logs, receipt.GasUsed)
} else {
log.Infof("Receipt: status: %d, logs:%s ,gasUsed: %d", receipt.Status, receipt.Logs, receipt.GasUsed)
}
}
}
func GetAccountNonce(client *ethclient.Client) *sync.Map {
accountArr := tool.ParseAccountConfig("./config/account.json")
addrChan := make(chan common.Address, 500)
resSyncMap := &sync.Map{}
var handleNonceCount int32
for i := 0; i < 2; i++ {
go func() {
for {
select {
case addr := <-addrChan:
balance, err := client.NonceAt(context.Background(), addr, nil)
if err != nil {
log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error())
}
resSyncMap.Store(addr, balance)
atomic.AddInt32(&handleNonceCount, 1)
}
}
}()
}
for i := 0; i < len(accountArr.FromAddr); i++ {
addrChan <- accountArr.FromAddr[i]
addrChan <- accountArr.ToAddr[i]
}
for {
if handleNonceCount == int32(tool.Cfg.GenerateAccCount) {
log.Info("Init all account nonce successful")
break
}
}
return resSyncMap
}
func GetAccountBalance(client *ethclient.Client) *sync.Map {
accountArr := tool.ParseAccountConfig("./config/account.json")
b, err := client.BalanceAt(context.Background(), tool.Cfg.DeployAddr, nil)
log.Info(b, err)
addrChan := make(chan common.Address, 500)
resSyncMap := &sync.Map{}
var handleNonceCount int32
for i := 0; i < 2; i++ {
go func() {
for {
select {
case addr := <-addrChan:
balance, err := client.BalanceAt(context.Background(), addr, nil)
if err != nil {
log.Errorf("Get acc:%s,balance err:%s", addr.Hash().Hex(), err.Error())
}
resSyncMap.Store(addr, balance)
atomic.AddInt32(&handleNonceCount, 1)
}
}
}()
}
for i := 0; i < len(accountArr.FromAddr); i++ {
addrChan <- accountArr.FromAddr[i]
addrChan <- accountArr.ToAddr[i]
}
for {
if handleNonceCount == int32(tool.Cfg.GenerateAccCount) {
log.Info("Init all account nonce successful")
break
}
}
return resSyncMap
}
func GetAccountErc721BalanceOf(client *ethclient.Client, erc721Addr common.Address, toAddr common.Address) {
newERC721, err := erc721.NewERC721(erc721Addr, client)
if err != nil {
log.Error("Init account - new erc721 err:", err.Error())
return
}
of, err := newERC721.BalanceOf(&bind.CallOpts{}, toAddr)
if err != nil {
log.Errorf("Get erc721 balance of failed err:", err.Error())
return
}
log.Infof("%s balance of is: %d ", toAddr.Hash().Hex(), of)
}
package util
import (
"contract-case/log"
"crypto/ecdsa"
"github.com/ethereum/go-ethereum/core/types"
"math/big"
)
func SignNewTx(tx types.TxData, chainId *big.Int, prv *ecdsa.PrivateKey) (*types.Transaction, error) {
signedTx, err := types.SignNewTx(prv, types.NewEIP155Signer(chainId), tx)
if err != nil {
log.Errorf("Sign tx error:", err)
return nil, err
}
return signedTx, nil
}
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