diff --git a/contract/eip721/contract.json b/contract/eip721/contract.json new file mode 100644 index 0000000..f590664 --- /dev/null +++ b/contract/eip721/contract.json @@ -0,0 +1,135 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ETHTransferContract", + "sourceName": "contracts/ETHTransferContract.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "executeTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61016060405234801561001157600080fd5b506040518060400160405280600b81526020017f4554485472616e736665720000000000000000000000000000000000000000008152506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525061009260008361012d60201b90919060201c565b61012081815250506100ae60018261012d60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506100eb61017d60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050610766565b600060208351101561014f57610148836101d860201b60201c565b9050610177565b8261015f8361024060201b60201c565b600001908161016e919061049a565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016101bd9594939291906105d5565b60405160208183030381529060405280519060200120905090565b600080829050601f8151111561022557826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040161021c91906106ad565b60405180910390fd5b805181610231906106ff565b60001c1760001b915050919050565b6000819050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806102cb57607f821691505b6020821081036102de576102dd610284565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026103467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610309565b6103508683610309565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061039761039261038d84610368565b610372565b610368565b9050919050565b6000819050919050565b6103b18361037c565b6103c56103bd8261039e565b848454610316565b825550505050565b600090565b6103da6103cd565b6103e58184846103a8565b505050565b5b81811015610409576103fe6000826103d2565b6001810190506103eb565b5050565b601f82111561044e5761041f816102e4565b610428846102f9565b81016020851015610437578190505b61044b610443856102f9565b8301826103ea565b50505b505050565b600082821c905092915050565b600061047160001984600802610453565b1980831691505092915050565b600061048a8383610460565b9150826002028217905092915050565b6104a38261024a565b67ffffffffffffffff8111156104bc576104bb610255565b5b6104c682546102b3565b6104d182828561040d565b600060209050601f83116001811461050457600084156104f2578287015190505b6104fc858261047e565b865550610564565b601f198416610512866102e4565b60005b8281101561053a57848901518255600182019150602085019450602081019050610515565b868310156105575784890151610553601f891682610460565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b61057f8161056c565b82525050565b61058e81610368565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105bf82610594565b9050919050565b6105cf816105b4565b82525050565b600060a0820190506105ea6000830188610576565b6105f76020830187610576565b6106046040830186610576565b6106116060830185610585565b61061e60808301846105c6565b9695505050505050565b600082825260208201905092915050565b60005b8381101561065757808201518184015260208101905061063c565b60008484015250505050565b6000601f19601f8301169050919050565b600061067f8261024a565b6106898185610628565b9350610699818560208601610639565b6106a281610663565b840191505092915050565b600060208201905081810360008301526106c78184610674565b905092915050565b600081519050919050565b6000819050602082019050919050565b60006106f6825161056c565b80915050919050565b600061070a826106cf565b82610714846106da565b905061071f816106ea565b9250602082101561075f5761075a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610309565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516117836107c060003960006105e9015260006105ae01526000610a0f015260006109ee0152600061061f015260006106750152600061069e01526117836000f3fe60806040526004361061002d5760003560e01c80636468328e1461003957806384b0196e1461005557610034565b3661003457005b600080fd5b610053600480360381019061004e9190610e05565b610086565b005b34801561006157600080fd5b5061006a610224565b60405161007d9796959493929190611023565b60405180910390f35b60007fc078646723bf20f8e2b15448254992f091e1224e4a97df3afabb94146bc4031484846040516020016100bd939291906110a7565b60405160208183030381529060405280519060200120905060006100e0826102ce565b905060006100f784836102e890919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461013182610314565b6040516020016101419190611166565b60405160208183030381529060405290610191576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101889190611188565b60405180910390fd5b50844710156101d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101cc906111f6565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561021b573d6000803e3d6000fd5b50505050505050565b6000606080600080600060606102386105a5565b6102406105e0565b46306000801b600067ffffffffffffffff81111561026157610260610cda565b5b60405190808252806020026020018201604052801561028f5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60006102e16102db61061b565b836106d2565b9050919050565b6000806000806102f88686610713565b925092509250610308828261076f565b82935050505092915050565b60606000602a67ffffffffffffffff81111561033357610332610cda565b5b6040519080825280601f01601f1916602001820160405280156103655781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061039d5761039c611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061040157610400611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561059b57600081601361044b9190611274565b600861045791906112a8565b6002610463919061141d565b8573ffffffffffffffffffffffffffffffffffffffff166104849190611497565b60f81b9050600060108260f81c61049b91906114d5565b60f81b905060008160f81c60106104b29190611506565b8360f81c6104c09190611543565b60f81b90506104ce826108d3565b858560026104dc91906112a8565b60026104e89190611578565b815181106104f9576104f8611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610531816108d3565b8585600261053f91906112a8565b600361054b9190611578565b8151811061055c5761055b611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050508080600101915050610433565b5080915050919050565b60606105db60007f000000000000000000000000000000000000000000000000000000000000000061091990919063ffffffff16565b905090565b606061061660017f000000000000000000000000000000000000000000000000000000000000000061091990919063ffffffff16565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561069757507f000000000000000000000000000000000000000000000000000000000000000046145b156106c4577f000000000000000000000000000000000000000000000000000000000000000090506106cf565b6106cc6109c9565b90505b90565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b600080600060418451036107585760008060006020870151925060408701519150606087015160001a905061074a88828585610a5f565b955095509550505050610768565b60006002855160001b9250925092505b9250925092565b60006003811115610783576107826115ac565b5b826003811115610796576107956115ac565b5b03156108cf57600160038111156107b0576107af6115ac565b5b8260038111156107c3576107c26115ac565b5b036107fa576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561080e5761080d6115ac565b5b826003811115610821576108206115ac565b5b03610866578060001c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161085d91906115db565b60405180910390fd5b600380811115610879576108786115ac565b5b82600381111561088c5761088b6115ac565b5b036108ce57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016108c591906115f6565b60405180910390fd5b5b5050565b6000600a8260f81c60ff1610156108fe5760308260f81c6108f49190611611565b60f81b9050610914565b60578260f81c61090e9190611611565b60f81b90505b919050565b606060ff60001b83146109365761092f83610b53565b90506109c3565b81805461094290611675565b80601f016020809104026020016040519081016040528092919081815260200182805461096e90611675565b80156109bb5780601f10610990576101008083540402835291602001916109bb565b820191906000526020600020905b81548152906001019060200180831161099e57829003601f168201915b505050505090505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001610a449594939291906116a6565b60405160208183030381529060405280519060200120905090565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115610a9f576000600385925092509250610b49565b600060018888888860405160008152602001604052604051610ac49493929190611708565b6020604051602081039080840390855afa158015610ae6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b3a57600060016000801b93509350935050610b49565b8060008060001b935093509350505b9450945094915050565b60606000610b6083610bc7565b90506000602067ffffffffffffffff811115610b7f57610b7e610cda565b5b6040519080825280601f01601f191660200182016040528015610bb15781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60008060ff8360001c169050601f811115610c0e576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c5682610c2b565b9050919050565b610c6681610c4b565b8114610c7157600080fd5b50565b600081359050610c8381610c5d565b92915050565b6000819050919050565b610c9c81610c89565b8114610ca757600080fd5b50565b600081359050610cb981610c93565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d1282610cc9565b810181811067ffffffffffffffff82111715610d3157610d30610cda565b5b80604052505050565b6000610d44610c17565b9050610d508282610d09565b919050565b600067ffffffffffffffff821115610d7057610d6f610cda565b5b610d7982610cc9565b9050602081019050919050565b82818337600083830152505050565b6000610da8610da384610d55565b610d3a565b905082815260208101848484011115610dc457610dc3610cc4565b5b610dcf848285610d86565b509392505050565b600082601f830112610dec57610deb610cbf565b5b8135610dfc848260208601610d95565b91505092915050565b600080600060608486031215610e1e57610e1d610c21565b5b6000610e2c86828701610c74565b9350506020610e3d86828701610caa565b925050604084013567ffffffffffffffff811115610e5e57610e5d610c26565b5b610e6a86828701610dd7565b9150509250925092565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b610ea981610e74565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ee9578082015181840152602081019050610ece565b60008484015250505050565b6000610f0082610eaf565b610f0a8185610eba565b9350610f1a818560208601610ecb565b610f2381610cc9565b840191505092915050565b610f3781610c89565b82525050565b610f4681610c4b565b82525050565b6000819050919050565b610f5f81610f4c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f9a81610c89565b82525050565b6000610fac8383610f91565b60208301905092915050565b6000602082019050919050565b6000610fd082610f65565b610fda8185610f70565b9350610fe583610f81565b8060005b83811015611016578151610ffd8882610fa0565b975061100883610fb8565b925050600181019050610fe9565b5085935050505092915050565b600060e082019050611038600083018a610ea0565b818103602083015261104a8189610ef5565b9050818103604083015261105e8188610ef5565b905061106d6060830187610f2e565b61107a6080830186610f3d565b61108760a0830185610f56565b81810360c08301526110998184610fc5565b905098975050505050505050565b60006060820190506110bc6000830186610f56565b6110c96020830185610f3d565b6110d66040830184610f2e565b949350505050565b600081905092915050565b7f496e76616c6964207369676e61747572652c207369676e65723a200000000000600082015250565b600061111f601b836110de565b915061112a826110e9565b601b82019050919050565b600061114082610eaf565b61114a81856110de565b935061115a818560208601610ecb565b80840191505092915050565b600061117182611112565b915061117d8284611135565b915081905092915050565b600060208201905081810360008301526111a28184610ef5565b905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006111e0601483610eba565b91506111eb826111aa565b602082019050919050565b6000602082019050818103600083015261120f816111d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061127f82610c89565b915061128a83610c89565b92508282039050818111156112a2576112a1611245565b5b92915050565b60006112b382610c89565b91506112be83610c89565b92508282026112cc81610c89565b915082820484148315176112e3576112e2611245565b5b5092915050565b60008160011c9050919050565b6000808291508390505b60018511156113415780860481111561131d5761131c611245565b5b600185161561132c5780820291505b808102905061133a856112ea565b9450611301565b94509492505050565b60008261135a5760019050611416565b816113685760009050611416565b816001811461137e5760028114611388576113b7565b6001915050611416565b60ff84111561139a57611399611245565b5b8360020a9150848211156113b1576113b0611245565b5b50611416565b5060208310610133831016604e8410600b84101617156113ec5782820a9050838111156113e7576113e6611245565b5b611416565b6113f984848460016112f7565b925090508184048111156114105761140f611245565b5b81810290505b9392505050565b600061142882610c89565b915061143383610c89565b92506114607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461134a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006114a282610c89565b91506114ad83610c89565b9250826114bd576114bc611468565b5b828204905092915050565b600060ff82169050919050565b60006114e0826114c8565b91506114eb836114c8565b9250826114fb576114fa611468565b5b828204905092915050565b6000611511826114c8565b915061151c836114c8565b925082820261152a816114c8565b915080821461153c5761153b611245565b5b5092915050565b600061154e826114c8565b9150611559836114c8565b9250828203905060ff81111561157257611571611245565b5b92915050565b600061158382610c89565b915061158e83610c89565b92508282019050808211156115a6576115a5611245565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020820190506115f06000830184610f2e565b92915050565b600060208201905061160b6000830184610f56565b92915050565b600061161c826114c8565b9150611627836114c8565b9250828201905060ff8111156116405761163f611245565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061168d57607f821691505b6020821081036116a05761169f611646565b5b50919050565b600060a0820190506116bb6000830188610f56565b6116c86020830187610f56565b6116d56040830186610f56565b6116e26060830185610f2e565b6116ef6080830184610f3d565b9695505050505050565b611702816114c8565b82525050565b600060808201905061171d6000830187610f56565b61172a60208301866116f9565b6117376040830185610f56565b6117446060830184610f56565b9594505050505056fea2646970667358221220dc704da849c15e0cd4462fd114eda4cac1792fddb73e07cbf1994f2e1193b67864736f6c634300081b0033", + "deployedBytecode": "0x60806040526004361061002d5760003560e01c80636468328e1461003957806384b0196e1461005557610034565b3661003457005b600080fd5b610053600480360381019061004e9190610e05565b610086565b005b34801561006157600080fd5b5061006a610224565b60405161007d9796959493929190611023565b60405180910390f35b60007fc078646723bf20f8e2b15448254992f091e1224e4a97df3afabb94146bc4031484846040516020016100bd939291906110a7565b60405160208183030381529060405280519060200120905060006100e0826102ce565b905060006100f784836102e890919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461013182610314565b6040516020016101419190611166565b60405160208183030381529060405290610191576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101889190611188565b60405180910390fd5b50844710156101d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101cc906111f6565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561021b573d6000803e3d6000fd5b50505050505050565b6000606080600080600060606102386105a5565b6102406105e0565b46306000801b600067ffffffffffffffff81111561026157610260610cda565b5b60405190808252806020026020018201604052801561028f5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60006102e16102db61061b565b836106d2565b9050919050565b6000806000806102f88686610713565b925092509250610308828261076f565b82935050505092915050565b60606000602a67ffffffffffffffff81111561033357610332610cda565b5b6040519080825280601f01601f1916602001820160405280156103655781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061039d5761039c611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061040157610400611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561059b57600081601361044b9190611274565b600861045791906112a8565b6002610463919061141d565b8573ffffffffffffffffffffffffffffffffffffffff166104849190611497565b60f81b9050600060108260f81c61049b91906114d5565b60f81b905060008160f81c60106104b29190611506565b8360f81c6104c09190611543565b60f81b90506104ce826108d3565b858560026104dc91906112a8565b60026104e89190611578565b815181106104f9576104f8611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610531816108d3565b8585600261053f91906112a8565b600361054b9190611578565b8151811061055c5761055b611216565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050508080600101915050610433565b5080915050919050565b60606105db60007f000000000000000000000000000000000000000000000000000000000000000061091990919063ffffffff16565b905090565b606061061660017f000000000000000000000000000000000000000000000000000000000000000061091990919063ffffffff16565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561069757507f000000000000000000000000000000000000000000000000000000000000000046145b156106c4577f000000000000000000000000000000000000000000000000000000000000000090506106cf565b6106cc6109c9565b90505b90565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b600080600060418451036107585760008060006020870151925060408701519150606087015160001a905061074a88828585610a5f565b955095509550505050610768565b60006002855160001b9250925092505b9250925092565b60006003811115610783576107826115ac565b5b826003811115610796576107956115ac565b5b03156108cf57600160038111156107b0576107af6115ac565b5b8260038111156107c3576107c26115ac565b5b036107fa576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561080e5761080d6115ac565b5b826003811115610821576108206115ac565b5b03610866578060001c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161085d91906115db565b60405180910390fd5b600380811115610879576108786115ac565b5b82600381111561088c5761088b6115ac565b5b036108ce57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016108c591906115f6565b60405180910390fd5b5b5050565b6000600a8260f81c60ff1610156108fe5760308260f81c6108f49190611611565b60f81b9050610914565b60578260f81c61090e9190611611565b60f81b90505b919050565b606060ff60001b83146109365761092f83610b53565b90506109c3565b81805461094290611675565b80601f016020809104026020016040519081016040528092919081815260200182805461096e90611675565b80156109bb5780601f10610990576101008083540402835291602001916109bb565b820191906000526020600020905b81548152906001019060200180831161099e57829003601f168201915b505050505090505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001610a449594939291906116a6565b60405160208183030381529060405280519060200120905090565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115610a9f576000600385925092509250610b49565b600060018888888860405160008152602001604052604051610ac49493929190611708565b6020604051602081039080840390855afa158015610ae6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b3a57600060016000801b93509350935050610b49565b8060008060001b935093509350505b9450945094915050565b60606000610b6083610bc7565b90506000602067ffffffffffffffff811115610b7f57610b7e610cda565b5b6040519080825280601f01601f191660200182016040528015610bb15781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60008060ff8360001c169050601f811115610c0e576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c5682610c2b565b9050919050565b610c6681610c4b565b8114610c7157600080fd5b50565b600081359050610c8381610c5d565b92915050565b6000819050919050565b610c9c81610c89565b8114610ca757600080fd5b50565b600081359050610cb981610c93565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d1282610cc9565b810181811067ffffffffffffffff82111715610d3157610d30610cda565b5b80604052505050565b6000610d44610c17565b9050610d508282610d09565b919050565b600067ffffffffffffffff821115610d7057610d6f610cda565b5b610d7982610cc9565b9050602081019050919050565b82818337600083830152505050565b6000610da8610da384610d55565b610d3a565b905082815260208101848484011115610dc457610dc3610cc4565b5b610dcf848285610d86565b509392505050565b600082601f830112610dec57610deb610cbf565b5b8135610dfc848260208601610d95565b91505092915050565b600080600060608486031215610e1e57610e1d610c21565b5b6000610e2c86828701610c74565b9350506020610e3d86828701610caa565b925050604084013567ffffffffffffffff811115610e5e57610e5d610c26565b5b610e6a86828701610dd7565b9150509250925092565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b610ea981610e74565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ee9578082015181840152602081019050610ece565b60008484015250505050565b6000610f0082610eaf565b610f0a8185610eba565b9350610f1a818560208601610ecb565b610f2381610cc9565b840191505092915050565b610f3781610c89565b82525050565b610f4681610c4b565b82525050565b6000819050919050565b610f5f81610f4c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f9a81610c89565b82525050565b6000610fac8383610f91565b60208301905092915050565b6000602082019050919050565b6000610fd082610f65565b610fda8185610f70565b9350610fe583610f81565b8060005b83811015611016578151610ffd8882610fa0565b975061100883610fb8565b925050600181019050610fe9565b5085935050505092915050565b600060e082019050611038600083018a610ea0565b818103602083015261104a8189610ef5565b9050818103604083015261105e8188610ef5565b905061106d6060830187610f2e565b61107a6080830186610f3d565b61108760a0830185610f56565b81810360c08301526110998184610fc5565b905098975050505050505050565b60006060820190506110bc6000830186610f56565b6110c96020830185610f3d565b6110d66040830184610f2e565b949350505050565b600081905092915050565b7f496e76616c6964207369676e61747572652c207369676e65723a200000000000600082015250565b600061111f601b836110de565b915061112a826110e9565b601b82019050919050565b600061114082610eaf565b61114a81856110de565b935061115a818560208601610ecb565b80840191505092915050565b600061117182611112565b915061117d8284611135565b915081905092915050565b600060208201905081810360008301526111a28184610ef5565b905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006111e0601483610eba565b91506111eb826111aa565b602082019050919050565b6000602082019050818103600083015261120f816111d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061127f82610c89565b915061128a83610c89565b92508282039050818111156112a2576112a1611245565b5b92915050565b60006112b382610c89565b91506112be83610c89565b92508282026112cc81610c89565b915082820484148315176112e3576112e2611245565b5b5092915050565b60008160011c9050919050565b6000808291508390505b60018511156113415780860481111561131d5761131c611245565b5b600185161561132c5780820291505b808102905061133a856112ea565b9450611301565b94509492505050565b60008261135a5760019050611416565b816113685760009050611416565b816001811461137e5760028114611388576113b7565b6001915050611416565b60ff84111561139a57611399611245565b5b8360020a9150848211156113b1576113b0611245565b5b50611416565b5060208310610133831016604e8410600b84101617156113ec5782820a9050838111156113e7576113e6611245565b5b611416565b6113f984848460016112f7565b925090508184048111156114105761140f611245565b5b81810290505b9392505050565b600061142882610c89565b915061143383610c89565b92506114607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461134a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006114a282610c89565b91506114ad83610c89565b9250826114bd576114bc611468565b5b828204905092915050565b600060ff82169050919050565b60006114e0826114c8565b91506114eb836114c8565b9250826114fb576114fa611468565b5b828204905092915050565b6000611511826114c8565b915061151c836114c8565b925082820261152a816114c8565b915080821461153c5761153b611245565b5b5092915050565b600061154e826114c8565b9150611559836114c8565b9250828203905060ff81111561157257611571611245565b5b92915050565b600061158382610c89565b915061158e83610c89565b92508282019050808211156115a6576115a5611245565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020820190506115f06000830184610f2e565b92915050565b600060208201905061160b6000830184610f56565b92915050565b600061161c826114c8565b9150611627836114c8565b9250828201905060ff8111156116405761163f611245565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061168d57607f821691505b6020821081036116a05761169f611646565b5b50919050565b600060a0820190506116bb6000830188610f56565b6116c86020830187610f56565b6116d56040830186610f56565b6116e26060830185610f2e565b6116ef6080830184610f3d565b9695505050505050565b611702816114c8565b82525050565b600060808201905061171d6000830187610f56565b61172a60208301866116f9565b6117376040830185610f56565b6117446060830184610f56565b9594505050505056fea2646970667358221220dc704da849c15e0cd4462fd114eda4cac1792fddb73e07cbf1994f2e1193b67864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/contract/eip721/deploy.ts b/contract/eip721/deploy.ts new file mode 100644 index 0000000..5145707 --- /dev/null +++ b/contract/eip721/deploy.ts @@ -0,0 +1,44 @@ +const { ethers } = require("ethers"); +const fs = require('fs'); +const path = require('path'); + +const privateKey = '0x0000000000000000000000000000000000000000000000000000000000000001'; +const keyOfContractAddress = 'NEXT_PUBLIC_CONTRACT_ADDRESS'; + +async function main(): Promise { + const provider = new ethers.JsonRpcProvider("http://127.0.0.1:8545"); + const signer = new ethers.Wallet(privateKey, provider); + + const artifactPath = path.resolve(__dirname, "./contract.json"); + const artifact = JSON.parse(fs.readFileSync(artifactPath, "utf-8")); + const { abi, bytecode } = artifact; + + const factory = new ethers.ContractFactory(abi, bytecode, signer); + const contract = await factory.deploy(); + + await contract.waitForDeployment(); + + const contractAddress = await contract.getAddress(); + console.log("Contract deployed at:", contractAddress); + + const envFilePath = path.resolve(__dirname, "../../.env.local"); + let envContent = ""; + if (fs.existsSync(envFilePath)) { + envContent = fs.readFileSync(envFilePath, "utf-8"); + } + + const updatedContent = envContent + .split("\n") + .filter((line) => !line.startsWith(keyOfContractAddress)) + .join("\n"); + + const finalEnvContent = updatedContent.trim() + `\n${keyOfContractAddress}=${contractAddress}\n`; + + fs.writeFileSync(envFilePath, finalEnvContent, "utf-8"); + console.log(`Updated .env.local with ${keyOfContractAddress}:`, contractAddress); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); \ No newline at end of file diff --git a/package.json b/package.json index f21119e..ab28c98 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "lint": "next lint", "locks:remove": "rm -f yarn.lock", "locks:create": "generate-lockfile --lockfile ../../yarn.lock --package package.json --write yarn.lock --force", - "locks": "npm run locks:remove && npm run locks:create" + "locks": "npm run locks:remove && npm run locks:create", + "run-ganache": "bash scripts/run-ganache.sh", + "deploy-contract": "ts-node contract/eip721/deploy.ts" }, "resolutions": { "react": "18.2.0", @@ -49,7 +51,7 @@ "devDependencies": { "@tanstack/react-query-devtools": "4.29.1", "@types/long": "4.0.0", - "@types/node": "^20.14.6", + "@types/node": "^22.10.1", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "eslint": "8.28.0", diff --git a/pages/ethers/index.tsx b/pages/ethers/index.tsx index 8262dd5..ae69860 100644 --- a/pages/ethers/index.tsx +++ b/pages/ethers/index.tsx @@ -33,7 +33,6 @@ export default function Index() { } const provider = new ethers.BrowserProvider(ethereum) const wallet = await provider.getSigner() - // wallet.signTypedData() const tx = await wallet.sendTransaction({ to: addr0, value: '1' diff --git a/pages/ethers/private-key.tsx b/pages/ethers/private-key.tsx index 782e77b..96fc27b 100644 --- a/pages/ethers/private-key.tsx +++ b/pages/ethers/private-key.tsx @@ -4,9 +4,9 @@ import { useEffect, useState } from "react"; import abi from './abi.json' export default function Index() { - const verifyingContract = '0xf67a42D581eB7d83135De8Dfe2fCccE58e5259bc' + const verifyingContract = process.env.NEXT_PUBLIC_CONTRACT_ADDRESS! // '0xf67a42D581eB7d83135De8Dfe2fCccE58e5259bc' is on bsc testnet const addr0 = '0x0000000000000000000000000000000000000000' - const privateKey = process.env.NEXT_PUBLIC_PRIVATE_KEY + const privateKey = process.env.NEXT_PUBLIC_PRIVATE_KEY_DEV const prc = process.env.NEXT_PUBLIC_BSC_TESTNET_RPC const [balance, setBalance] = useState('--') diff --git a/scripts/run-ganache.sh b/scripts/run-ganache.sh new file mode 100644 index 0000000..6e38b4a --- /dev/null +++ b/scripts/run-ganache.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +npx ganache \ + --account="0x0000000000000000000000000000000000000000000000000000000000000001,1000000000000000000" \ + --account="0x0000000000000000000000000000000000000000000000000000000000000002,1000000000000000000" \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1698b72..1b06949 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,7 @@ "@/*": ["*"] }, "typeRoots": ["node_modules/@types"], - "types": ["long"] + "types": ["long", "node"] }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] diff --git a/yarn.lock b/yarn.lock index e11037f..2f32387 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3883,7 +3883,7 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node@*", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^22.10.1": version "22.10.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== @@ -3902,13 +3902,6 @@ dependencies: undici-types "~6.19.2" -"@types/node@^20.14.6": - version "20.17.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.9.tgz#5f141d4b7ee125cdee5faefe28de095398865bab" - integrity sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw== - dependencies: - undici-types "~6.19.2" - "@types/parse-package-name@0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@types/parse-package-name/-/parse-package-name-0.1.0.tgz#a4e54e3eef677d8b9d931b54b94ed77e8ae52a4f" @@ -3932,11 +3925,9 @@ "@types/react" "*" "@types/react-dom@^18.3.0": - version "18.3.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" - integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== - dependencies: - "@types/react" "*" + version "18.3.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" + integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== "@types/react@*", "@types/react@18.0.25": version "18.0.25" @@ -3948,9 +3939,9 @@ csstype "^3.0.2" "@types/react@^18.3.3": - version "18.3.12" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" - integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== + version "18.3.16" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.16.tgz#5326789125fac98b718d586ad157442ceb44ff28" + integrity sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw== dependencies: "@types/prop-types" "*" csstype "^3.0.2"