From ec325f2cf7d07dc0602dfa40a49ec7c5f64584b3 Mon Sep 17 00:00:00 2001 From: Dmitry Holodov Date: Tue, 1 Nov 2022 23:01:59 -0500 Subject: [PATCH] add linting and formatting support for solidity (#217) * Added new `format-solidity` and `lint-solidity` Makefile targets * Updated documentation on how to install the new tools dependencies * Formatted the solidity code, updated expected byte code and deployed stagenet contract * Updated go.mod to go 1.19 * Updated Github actions for go 1.19 and we now use all formatters/linters in the actions checks --- .github/workflows/checks.yml | 15 +++- .github/workflows/integration-tests.yaml | 4 +- .github/workflows/unit-tests.yml | 2 +- .solhint.json | 9 ++ Makefile | 12 ++- common/config.go | 2 +- docs/build.md | 4 +- docs/developing.md | 22 ++--- ethereum/block/testdata/UTContract.sol | 4 +- ethereum/block/ut_contract_test.go | 18 ++-- ethereum/check_swap_factory_contract.go | 2 +- ethereum/check_swap_factory_contract_test.go | 5 +- ethereum/contracts/Context.sol | 4 +- ethereum/contracts/ERC20.sol | 20 +++-- ethereum/contracts/ERC20Mock.sol | 2 +- ethereum/contracts/ERC2771Context.sol | 4 +- ethereum/contracts/IERC20.sol | 2 +- ethereum/contracts/IERC20Metadata.sol | 4 +- ethereum/contracts/Secp256k1.sol | 13 ++- ethereum/contracts/SwapFactory.sol | 92 ++++++++++++-------- ethereum/contracts/TestUtils.sol | 6 +- ethereum/erc20_mock.go | 2 +- ethereum/swap_factory.go | 10 +-- go.mod | 4 +- go.sum | 4 +- 25 files changed, 155 insertions(+), 111 deletions(-) create mode 100644 .solhint.json diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 12feee62..43c1444a 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -14,10 +14,17 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Run go fmt - run: diff -u <(echo -n) <(gofmt -d -s .) + - name: Install npm formatting/linting tools + run: npm install --global --save-dev prettier prettier-plugin-solidity solhint - - name: golangci-lint + # shellcheck should already be installed, but it doesn't hurt + - name: Install apt formatting/linting tools + run: sudo apt install -y shfmt shellcheck + + - name: Run formatters + run: make format && diff -u <(echo -n) <(git status --short --untracked-files=no) + + - name: Run linters run: make lint vet-check: @@ -25,7 +32,7 @@ jobs: steps: - uses: actions/setup-go@v3 with: - go-version: '1.18.x' + go-version: '1.19.x' - uses: actions/checkout@v3 - name: Run go vet diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 7fe898a7..a7a935bc 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -10,7 +10,7 @@ jobs: integration-tests: strategy: matrix: - go-version: [1.18.x] + go-version: [1.19.x] node-version: [16.x] platform: [ubuntu-22.04] runs-on: ${{ matrix.platform }} @@ -45,4 +45,4 @@ jobs: run: make build - name: Run integration tests - run: ./scripts/run-integration-tests.sh \ No newline at end of file + run: ./scripts/run-integration-tests.sh diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 3f7ba902..304c600c 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -10,7 +10,7 @@ jobs: unit-tests: strategy: matrix: - go-version: [1.18.x] + go-version: [1.19.x] platform: [ubuntu-22.04] runs-on: ${{ matrix.platform }} steps: diff --git a/.solhint.json b/.solhint.json new file mode 100644 index 00000000..712ccd99 --- /dev/null +++ b/.solhint.json @@ -0,0 +1,9 @@ +{ + "extends": "solhint:recommended", + "rules": { + "func-visibility": ["warn",{"ignoreConstructors":true}], + "reason-string": ["warn",{"maxLength":64}], + "no-inline-assembly": "off", + "not-rely-on-time": "off" + } +} diff --git a/Makefile b/Makefile index a97500b6..f468dd11 100644 --- a/Makefile +++ b/Makefile @@ -21,8 +21,12 @@ lint-go: init lint-shell: init shellcheck --source-path=.:scripts scripts/*.sh +.PHONY: lint-solidity +lint-solidity: init + "$$(npm config get prefix)/bin/solhint" $$(find ethereum -name '*.sol') + .PHONY: lint -lint: lint-go lint-shell +lint: lint-go lint-shell lint-solidity .PHONY: format-go format-go: @@ -32,8 +36,12 @@ format-go: format-shell: shfmt -w scripts/*.sh +.PHONY: format-solidity +format-solidity: + "$$(npm config get prefix)/bin/prettier" --print-width 100 --write $$(find ethereum -name '*.sol') + .PHONY: format -format: format-go format-shell +format: format-go format-shell format-solidity .PHONY: test test: init diff --git a/common/config.go b/common/config.go index 0391d95c..d3065865 100644 --- a/common/config.go +++ b/common/config.go @@ -42,7 +42,7 @@ var StagenetConfig = Config{ DataDir: path.Join(baseDir, "stagenet"), MoneroDaemonHost: "node.sethforprivacy.com", MoneroDaemonPort: 38089, // Seth is not using the default stagenet value of 38081 (so don't use our constant) - ContractAddress: ethcommon.HexToAddress("0x5F8Cf66C4c59d398052aA75D46Ce48e7fA09A83E"), + ContractAddress: ethcommon.HexToAddress("0xE6aeCe4B6D6126262Ca51051bd95447367b03A56"), Bootnodes: []string{ "/ip4/134.122.115.208/tcp/9900/p2p/12D3KooWDqCzbjexHEa8Rut7bzxHFpRMZyDRW1L6TGkL1KY24JH5", "/ip4/143.198.123.27/tcp/9900/p2p/12D3KooWSc4yFkPWBFmPToTMbhChH3FAgGH96DNzSg5fio1pQYoN", diff --git a/docs/build.md b/docs/build.md index a21b7a43..fff09bef 100644 --- a/docs/build.md +++ b/docs/build.md @@ -10,8 +10,8 @@ sudo snap install go --classic On other systems or in docker, use the directions here: https://go.dev/doc/install. Summary for X86-64 Linux: ```bash -wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz -rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz +wget https://go.dev/dl/go1.18.7.linux-amd64.tar.gz +rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.7.linux-amd64.tar.gz echo "export PATH=$PATH:/usr/local/go/bin" >> .profile source .profile ``` diff --git a/docs/developing.md b/docs/developing.md index 49540504..b8ae1644 100644 --- a/docs/developing.md +++ b/docs/developing.md @@ -27,21 +27,6 @@ $ ./swapd --dev-xmrtaker --contract-address 0x3F2aF34E4250de94242Ac2B8A38550fd45 # 2022-01-26T18:56:31.627-0500 INFO cmd daemon/contract.go:42 loaded SwapFactory.sol from address 0x3F2aF34E4250de94242Ac2B8A38550fd4503696d ``` -If you want to deploy the contract without running `swapd`, you can use hardhat. You will need node.js installed. -```bash -cd ethereum -npm install --save-dev hardhat -``` - -Then, you can run the deployment script against your desired network to deploy the contract. - -```bash -$ npx hardhat run --network localhost scripts/deploy.js -# Compiling 2 files with 0.8.5 -# Compilation finished successfully -# SwapFactory deployed to: 0xB0f6EC177Ab867E372479C0bfdBB0068bb5E1554 -``` - ## Compiling DLEq binaries The program utilizes a Rust DLEq library implemented by Farcaster. @@ -114,6 +99,13 @@ on Ubuntu for Bash formatting and linting: ``` sudo apt install -y shfmt shellcheck ``` +The solidity formatting uses an npm executable named `prettier` which, for solidity, +needs a plugin called `prettier-plugin-solidity`. For solidity linting, we use the +`solhint` program. +``` +npm install --global --save-dev prettier prettier-plugin-solidity +npm install --global --save-dev solhint +``` Go linting uses `golangci-lint`. If it is not already installed in your user's GOBIN directory, the `make lint` command will install it for you using diff --git a/ethereum/block/testdata/UTContract.sol b/ethereum/block/testdata/UTContract.sol index bee71068..e144d1f3 100644 --- a/ethereum/block/testdata/UTContract.sol +++ b/ethereum/block/testdata/UTContract.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPLv3 -pragma solidity ^0.8.5; +pragma solidity ^0.8.5 .0; // // Unit test contract. Our goal is a transaction that is easy to make fail, but only when it is @@ -12,7 +12,7 @@ pragma solidity ^0.8.5; contract UTContract { uint256 private stamp; - function check_stamp(uint256 _stamp) external { + function checkStamp(uint256 _stamp) external { require(block.timestamp <= _stamp, "block.timestamp was not less than stamp"); stamp = _stamp; // Prevent the function from being view-only } diff --git a/ethereum/block/ut_contract_test.go b/ethereum/block/ut_contract_test.go index 09b70110..01c52daa 100644 --- a/ethereum/block/ut_contract_test.go +++ b/ethereum/block/ut_contract_test.go @@ -30,8 +30,8 @@ var ( // UTContractMetaData contains all meta data concerning the UTContract contract. var UTContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stamp\",\"type\":\"uint256\"}],\"name\":\"check_stamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506101da806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631a6bd24714610030575b600080fd5b61004a600480360381019061004591906100d4565b61004c565b005b8042111561008f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008690610184565b60405180910390fd5b8060008190555050565b600080fd5b6000819050919050565b6100b18161009e565b81146100bc57600080fd5b50565b6000813590506100ce816100a8565b92915050565b6000602082840312156100ea576100e9610099565b5b60006100f8848285016100bf565b91505092915050565b600082825260208201905092915050565b7f626c6f636b2e74696d657374616d7020776173206e6f74206c6573732074686160008201527f6e207374616d7000000000000000000000000000000000000000000000000000602082015250565b600061016e602783610101565b915061017982610112565b604082019050919050565b6000602082019050818103600083015261019d81610161565b905091905056fea26469706673582212204c176742615f8dd95e0d38d1c547b7dc4437e1eee6e350d8e8e42c00e82a577264736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stamp\",\"type\":\"uint256\"}],\"name\":\"checkStamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506101da806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d5f7a03a14610030575b600080fd5b61004a600480360381019061004591906100d4565b61004c565b005b8042111561008f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008690610184565b60405180910390fd5b8060008190555050565b600080fd5b6000819050919050565b6100b18161009e565b81146100bc57600080fd5b50565b6000813590506100ce816100a8565b92915050565b6000602082840312156100ea576100e9610099565b5b60006100f8848285016100bf565b91505092915050565b600082825260208201905092915050565b7f626c6f636b2e74696d657374616d7020776173206e6f74206c6573732074686160008201527f6e207374616d7000000000000000000000000000000000000000000000000000602082015250565b600061016e602783610101565b915061017982610112565b604082019050919050565b6000602082019050818103600083015261019d81610161565b905091905056fea26469706673582212209a0d4c85b813d8ad048f4a05b0a2840830e60b06e288f80e63e62663416c510c64736f6c63430008100033", } // UTContractABI is the input ABI used to generate the binding from. @@ -201,23 +201,23 @@ func (_UTContract *UTContractTransactorRaw) Transact(opts *bind.TransactOpts, me return _UTContract.Contract.contract.Transact(opts, method, params...) } -// CheckStamp is a paid mutator transaction binding the contract method 0x1a6bd247. +// CheckStamp is a paid mutator transaction binding the contract method 0xd5f7a03a. // -// Solidity: function check_stamp(uint256 _stamp) returns() +// Solidity: function checkStamp(uint256 _stamp) returns() func (_UTContract *UTContractTransactor) CheckStamp(opts *bind.TransactOpts, _stamp *big.Int) (*types.Transaction, error) { - return _UTContract.contract.Transact(opts, "check_stamp", _stamp) + return _UTContract.contract.Transact(opts, "checkStamp", _stamp) } -// CheckStamp is a paid mutator transaction binding the contract method 0x1a6bd247. +// CheckStamp is a paid mutator transaction binding the contract method 0xd5f7a03a. // -// Solidity: function check_stamp(uint256 _stamp) returns() +// Solidity: function checkStamp(uint256 _stamp) returns() func (_UTContract *UTContractSession) CheckStamp(_stamp *big.Int) (*types.Transaction, error) { return _UTContract.Contract.CheckStamp(&_UTContract.TransactOpts, _stamp) } -// CheckStamp is a paid mutator transaction binding the contract method 0x1a6bd247. +// CheckStamp is a paid mutator transaction binding the contract method 0xd5f7a03a. // -// Solidity: function check_stamp(uint256 _stamp) returns() +// Solidity: function checkStamp(uint256 _stamp) returns() func (_UTContract *UTContractTransactorSession) CheckStamp(_stamp *big.Int) (*types.Transaction, error) { return _UTContract.Contract.CheckStamp(&_UTContract.TransactOpts, _stamp) } diff --git a/ethereum/check_swap_factory_contract.go b/ethereum/check_swap_factory_contract.go index 7f537676..e608a936 100644 --- a/ethereum/check_swap_factory_contract.go +++ b/ethereum/check_swap_factory_contract.go @@ -13,7 +13,7 @@ import ( // with the trustedForwarder address set to all zeros and reading back the bytecode. See // the unit test TestExpectedSwapFactoryBytecodeHex if you need to update this value. const ( - expectedSwapFactoryBytecodeHex = "6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063aa0f87251461016e578063b32d1b4f1461019e578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad9190611627565b610241565b005b3480156100c057600080fd5b506100c96105bf565b6040516100d69190611678565b60405180910390f35b3480156100eb57600080fd5b5061010660048036038101906101019190611693565b6105e3565b60405161011391906116db565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611627565b61063b565b005b34801561015157600080fd5b5061016c600480360381019061016791906116f6565b610761565b005b6101886004803603810190610183919061174c565b6109b0565b60405161019591906117fd565b60405180910390f35b3480156101aa57600080fd5b506101c560048036038101906101c09190611818565b610ce7565b6040516101d291906116db565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd9190611858565b610dec565b60405161020f91906118fc565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a9190611917565b610e0c565b005b6000826040516020016102549190611a38565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506003808111156102a3576102a2611885565b5b8160038111156102b6576102b5611885565b5b141580156102e95750600060038111156102d3576102d2611885565b5b8160038111156102e6576102e5611885565b5b14155b610328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031f90611ab1565b60405180910390fd5b836000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611b43565b60405180910390fd5b8360a00151421015806103e157508360800151421080156103e05750600260038111156103ca576103c9611885565b5b8160038111156103dd576103dc611885565b5b14155b5b610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041790611bd5565b60405180910390fd5b61042e838560600151610fa5565b7e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f828460405161045e929190611bf5565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561049c5761049b611885565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361052d57836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f19350505050158015610527573d6000803e3d6000fd5b506105b9565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610574929190611c8c565b6020604051808303816000875af1158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611ce1565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6106458282610ff8565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d157816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106cb573d6000803e3d6000fd5b5061075d565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b8152600401610718929190611c8c565b6020604051808303816000875af1158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b9190611ce1565b505b5050565b61076a336105e3565b6107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a090611d80565b60405180910390fd5b6107b38383610ff8565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361089157826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108199190611dcf565b9081150290604051600060405180830381858888f19350505050158015610844573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561088b573d6000803e3d6000fd5b506109ab565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c69190611dcf565b6040518363ffffffff1660e01b81526004016108e3929190611c8c565b6020604051808303816000875af1158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611ce1565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610966929190611e03565b6020604051808303816000875af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190611ce1565b505b505050565b60006109ba61130b565b33816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050888160400181815250508781606001818152505086816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508542610a4a9190611e2c565b816080018181525050600286610a609190611e60565b42610a6b9190611e2c565b8160a0018181525050848160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160e0018181525050600073ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff1603610b3957348160e0015114610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90611f2c565b60405180910390fd5b610bc3565b8060c0015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308460e001516040518463ffffffff1660e01b8152600401610b7e93929190611f4c565b6020604051808303816000875af1158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190611ce1565b505b8281610100018181525050600081604051602001610be19190611a38565b60405160208183030381529060405280519060200120905060006003811115610c0d57610c0c611885565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610c3f57610c3e611885565b5b14610c4957600080fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818b8b85608001518660a001518760c001518860e00151604051610c949796959493929190611f83565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610cd257610cd1611885565b5b02179055508092505050979650505050505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610d4357610d42611ff2565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610d8694939291906120b1565b6020604051602081039080840390855afa158015610da8573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610e1f9190611a38565b60405160208183030381529060405280519060200120905060016003811115610e4b57610e4a611885565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610e7d57610e7c611885565b5b14610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612142565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f26906121d4565b60405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff02191690836003811115610f6557610f64611885565b5b02179055507f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f81604051610f9991906117fd565b60405180910390a15050565b610fb58260001c8260001c610ce7565b610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90612266565b60405180910390fd5b5050565b60008260405160200161100b9190611a38565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506000600381111561105b5761105a611885565b5b81600381111561106e5761106d611885565b5b036110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a5906122d2565b60405180910390fd5b6003808111156110c1576110c0611885565b5b8160038111156110d4576110d3611885565b5b03611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b90611ab1565b60405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff166111376112d1565b73ffffffffffffffffffffffffffffffffffffffff161461118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061233e565b60405180910390fd5b8360800151421015806111c45750600260038111156111af576111ae611885565b5b8160038111156111c2576111c1611885565b5b145b611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906123aa565b60405180910390fd5b8360a001514210611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090612416565b60405180910390fd5b611257838560400151610fa5565b7f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee8284604051611288929190611bf5565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156112c6576112c5611885565b5b021790555050505050565b60006112dc336105e3565b156112f057601436033560601c90506112ff565b6112f8611303565b9050611300565b5b90565b600033905090565b604051806101200160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600080191681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113fc826113b3565b810181811067ffffffffffffffff8211171561141b5761141a6113c4565b5b80604052505050565b600061142e61139f565b905061143a82826113f3565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061146a8261143f565b9050919050565b61147a8161145f565b811461148557600080fd5b50565b60008135905061149781611471565b92915050565b6000819050919050565b6114b08161149d565b81146114bb57600080fd5b50565b6000813590506114cd816114a7565b92915050565b6000819050919050565b6114e6816114d3565b81146114f157600080fd5b50565b600081359050611503816114dd565b92915050565b60006115148261143f565b9050919050565b61152481611509565b811461152f57600080fd5b50565b6000813590506115418161151b565b92915050565b6000610120828403121561155e5761155d6113ae565b5b611569610120611424565b9050600061157984828501611488565b600083015250602061158d84828501611488565b60208301525060406115a1848285016114be565b60408301525060606115b5848285016114be565b60608301525060806115c9848285016114f4565b60808301525060a06115dd848285016114f4565b60a08301525060c06115f184828501611532565b60c08301525060e0611605848285016114f4565b60e08301525061010061161a848285016114f4565b6101008301525092915050565b600080610140838503121561163f5761163e6113a9565b5b600061164d85828601611547565b92505061012061165f858286016114be565b9150509250929050565b61167281611509565b82525050565b600060208201905061168d6000830184611669565b92915050565b6000602082840312156116a9576116a86113a9565b5b60006116b784828501611532565b91505092915050565b60008115159050919050565b6116d5816116c0565b82525050565b60006020820190506116f060008301846116cc565b92915050565b600080600061016084860312156117105761170f6113a9565b5b600061171e86828701611547565b935050610120611730868287016114be565b925050610140611742868287016114f4565b9150509250925092565b600080600080600080600060e0888a03121561176b5761176a6113a9565b5b60006117798a828b016114be565b975050602061178a8a828b016114be565b965050604061179b8a828b01611488565b95505060606117ac8a828b016114f4565b94505060806117bd8a828b01611532565b93505060a06117ce8a828b016114f4565b92505060c06117df8a828b016114f4565b91505092959891949750929550565b6117f78161149d565b82525050565b600060208201905061181260008301846117ee565b92915050565b6000806040838503121561182f5761182e6113a9565b5b600061183d858286016114f4565b925050602061184e858286016114f4565b9150509250929050565b60006020828403121561186e5761186d6113a9565b5b600061187c848285016114be565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118c5576118c4611885565b5b50565b60008190506118d6826118b4565b919050565b60006118e6826118c8565b9050919050565b6118f6816118db565b82525050565b600060208201905061191160008301846118ed565b92915050565b6000610120828403121561192e5761192d6113a9565b5b600061193c84828501611547565b91505092915050565b61194e8161145f565b82525050565b61195d8161149d565b82525050565b61196c816114d3565b82525050565b61197b81611509565b82525050565b610120820160008201516119986000850182611945565b5060208201516119ab6020850182611945565b5060408201516119be6040850182611954565b5060608201516119d16060850182611954565b5060808201516119e46080850182611963565b5060a08201516119f760a0850182611963565b5060c0820151611a0a60c0850182611972565b5060e0820151611a1d60e0850182611963565b50610100820151611a32610100850182611963565b50505050565b600061012082019050611a4e6000830184611981565b92915050565b600082825260208201905092915050565b7f7377617020697320616c726561647920636f6d706c6574656400000000000000600082015250565b6000611a9b601983611a54565b9150611aa682611a65565b602082019050919050565b60006020820190508181036000830152611aca81611a8e565b9050919050565b7f726566756e64206d7573742062652063616c6c6564206279207468652073776160008201527f70206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000611b2d602783611a54565b9150611b3882611ad1565b604082019050919050565b60006020820190508181036000830152611b5c81611b20565b9050919050565b7f697427732074686520636f756e74657270617274792773207475726e2c20756e60008201527f61626c6520746f20726566756e642c2074727920616761696e206c6174657200602082015250565b6000611bbf603f83611a54565b9150611bca82611b63565b604082019050919050565b60006020820190508181036000830152611bee81611bb2565b9050919050565b6000604082019050611c0a60008301856117ee565b611c1760208301846117ee565b9392505050565b6000819050919050565b6000611c43611c3e611c398461143f565b611c1e565b61143f565b9050919050565b6000611c5582611c28565b9050919050565b6000611c6782611c4a565b9050919050565b611c7781611c5c565b82525050565b611c86816114d3565b82525050565b6000604082019050611ca16000830185611c6e565b611cae6020830184611c7d565b9392505050565b611cbe816116c0565b8114611cc957600080fd5b50565b600081519050611cdb81611cb5565b92915050565b600060208284031215611cf757611cf66113a9565b5b6000611d0584828501611ccc565b91505092915050565b7f636c61696d52656c617965722063616e206f6e6c792062652063616c6c65642060008201527f62792061207472757374656420666f7277617264657200000000000000000000602082015250565b6000611d6a603683611a54565b9150611d7582611d0e565b604082019050919050565b60006020820190508181036000830152611d9981611d5d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611dda826114d3565b9150611de5836114d3565b9250828203905081811115611dfd57611dfc611da0565b5b92915050565b6000604082019050611e186000830185611669565b611e256020830184611c7d565b9392505050565b6000611e37826114d3565b9150611e42836114d3565b9250828201905080821115611e5a57611e59611da0565b5b92915050565b6000611e6b826114d3565b9150611e76836114d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611eaf57611eae611da0565b5b828202905092915050565b7f76616c7565206e6f742073616d652061732045544820616d6f756e742073656e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f16602183611a54565b9150611f2182611eba565b604082019050919050565b60006020820190508181036000830152611f4581611f09565b9050919050565b6000606082019050611f616000830186611669565b611f6e6020830185611669565b611f7b6040830184611c7d565b949350505050565b600060e082019050611f98600083018a6117ee565b611fa560208301896117ee565b611fb260408301886117ee565b611fbf6060830187611c7d565b611fcc6080830186611c7d565b611fd960a0830185611669565b611fe660c0830184611c7d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b600061205361204e61204984612021565b61202b565b61149d565b9050919050565b61206381612038565b82525050565b6000819050919050565b600060ff82169050919050565b600061209b61209661209184612069565b611c1e565b612073565b9050919050565b6120ab81612080565b82525050565b60006080820190506120c6600083018761205a565b6120d360208301866120a2565b6120e060408301856117ee565b6120ed60608301846117ee565b95945050505050565b7f73776170206973206e6f7420696e2050454e44494e4720737461746500000000600082015250565b600061212c601c83611a54565b9150612137826120f6565b602082019050919050565b6000602082019050818103600083015261215b8161211f565b9050919050565b7f6f6e6c79207468652073776170206f776e65722063616e2063616c6c2073657460008201527f5265616479000000000000000000000000000000000000000000000000000000602082015250565b60006121be602583611a54565b91506121c982612162565b604082019050919050565b600060208201905081810360008301526121ed816121b1565b9050919050565b7f70726f76696465642073656372657420646f6573206e6f74206d61746368207460008201527f6865206578706563746564207075626c6963206b657900000000000000000000602082015250565b6000612250603683611a54565b915061225b826121f4565b604082019050919050565b6000602082019050818103600083015261227f81612243565b9050919050565b7f696e76616c696420737761700000000000000000000000000000000000000000600082015250565b60006122bc600c83611a54565b91506122c782612286565b602082019050919050565b600060208201905081810360008301526122eb816122af565b9050919050565b7f6f6e6c7920636c61696d65722063616e20636c61696d21000000000000000000600082015250565b6000612328601783611a54565b9150612333826122f2565b602082019050919050565b600060208201905081810360008301526123578161231b565b9050919050565b7f746f6f206561726c7920746f20636c61696d2100000000000000000000000000600082015250565b6000612394601383611a54565b915061239f8261235e565b602082019050919050565b600060208201905081810360008301526123c381612387565b9050919050565b7f746f6f206c61746520746f20636c61696d210000000000000000000000000000600082015250565b6000612400601283611a54565b915061240b826123ca565b602082019050919050565b6000602082019050818103600083015261242f816123f3565b905091905056fea26469706673582212207cbde369fedcf2fe1d950750da1b198ba34ff55dee15b0b173d54b276f96dc3464736f6c63430008100033" //nolint:lll + expectedSwapFactoryBytecodeHex = "6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063aa0f87251461016e578063b32d1b4f1461019e578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad919061165d565b610241565b005b3480156100c057600080fd5b506100c96105bf565b6040516100d691906116ae565b60405180910390f35b3480156100eb57600080fd5b50610106600480360381019061010191906116c9565b6105e3565b6040516101139190611711565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e919061165d565b61063b565b005b34801561015157600080fd5b5061016c6004803603810190610167919061172c565b610761565b005b61018860048036038101906101839190611782565b6109b0565b6040516101959190611833565b60405180910390f35b3480156101aa57600080fd5b506101c560048036038101906101c0919061184e565b610d1d565b6040516101d29190611711565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd919061188e565b610e22565b60405161020f9190611932565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a919061194d565b610e42565b005b6000826040516020016102549190611a6e565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506003808111156102a3576102a26118bb565b5b8160038111156102b6576102b56118bb565b5b141580156102e95750600060038111156102d3576102d26118bb565b5b8160038111156102e6576102e56118bb565b5b14155b610328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031f90611ae7565b60405180910390fd5b836000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611b79565b60405180910390fd5b8360a00151421015806103e157508360800151421080156103e05750600260038111156103ca576103c96118bb565b5b8160038111156103dd576103dc6118bb565b5b14155b5b610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041790611c0b565b60405180910390fd5b61042e838560600151610fdb565b7e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f828460405161045e929190611c2b565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561049c5761049b6118bb565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361052d57836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f19350505050158015610527573d6000803e3d6000fd5b506105b9565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610574929190611cc2565b6020604051808303816000875af1158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611d17565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b610645828261102e565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d157816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106cb573d6000803e3d6000fd5b5061075d565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b8152600401610718929190611cc2565b6020604051808303816000875af1158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b9190611d17565b505b5050565b61076a336105e3565b6107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a090611db6565b60405180910390fd5b6107b3838361102e565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361089157826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108199190611e05565b9081150290604051600060405180830381858888f19350505050158015610844573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561088b573d6000803e3d6000fd5b506109ab565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c69190611e05565b6040518363ffffffff1660e01b81526004016108e3929190611cc2565b6020604051808303816000875af1158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611d17565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610966929190611e39565b6020604051808303816000875af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190611d17565b505b505050565b60006109ba611341565b33816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050888160400181815250508781606001818152505086816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508542610a4a9190611e62565b816080018181525050600286610a609190611e96565b42610a6b9190611e62565b8160a0018181525050848160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160e0018181525050600073ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff1603610b3957348160e0015114610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90611f62565b60405180910390fd5b610bc3565b8060c0015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308460e001516040518463ffffffff1660e01b8152600401610b7e93929190611f82565b6020604051808303816000875af1158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190611d17565b505b8281610100018181525050600081604051602001610be19190611a6e565b60405160208183030381529060405280519060200120905060006003811115610c0d57610c0c6118bb565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610c3f57610c3e6118bb565b5b14610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612005565b60405180910390fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818b8b85608001518660a001518760c001518860e00151604051610cca9796959493929190612025565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610d0857610d076118bb565b5b02179055508092505050979650505050505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610d7957610d78612094565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610dbc9493929190612153565b6020604051602081039080840390855afa158015610dde573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610e559190611a6e565b60405160208183030381529060405280519060200120905060016003811115610e8157610e806118bb565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610eb357610eb26118bb565b5b14610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea906121e4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90612276565b60405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff02191690836003811115610f9b57610f9a6118bb565b5b02179055507f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f81604051610fcf9190611833565b60405180910390a15050565b610feb8260001c8260001c610d1d565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190612308565b60405180910390fd5b5050565b6000826040516020016110419190611a6e565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff16905060006003811115611091576110906118bb565b5b8160038111156110a4576110a36118bb565b5b036110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90612374565b60405180910390fd5b6003808111156110f7576110f66118bb565b5b81600381111561110a576111096118bb565b5b0361114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190611ae7565b60405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff1661116d611307565b73ffffffffffffffffffffffffffffffffffffffff16146111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba906123e0565b60405180910390fd5b8360800151421015806111fa5750600260038111156111e5576111e46118bb565b5b8160038111156111f8576111f76118bb565b5b145b611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061244c565b60405180910390fd5b8360a00151421061127f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611276906124b8565b60405180910390fd5b61128d838560400151610fdb565b7f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee82846040516112be929190611c2b565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156112fc576112fb6118bb565b5b021790555050505050565b6000611312336105e3565b1561132657601436033560601c9050611335565b61132e611339565b9050611336565b5b90565b600033905090565b604051806101200160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600080191681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611432826113e9565b810181811067ffffffffffffffff82111715611451576114506113fa565b5b80604052505050565b60006114646113d5565b90506114708282611429565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114a082611475565b9050919050565b6114b081611495565b81146114bb57600080fd5b50565b6000813590506114cd816114a7565b92915050565b6000819050919050565b6114e6816114d3565b81146114f157600080fd5b50565b600081359050611503816114dd565b92915050565b6000819050919050565b61151c81611509565b811461152757600080fd5b50565b60008135905061153981611513565b92915050565b600061154a82611475565b9050919050565b61155a8161153f565b811461156557600080fd5b50565b60008135905061157781611551565b92915050565b60006101208284031215611594576115936113e4565b5b61159f61012061145a565b905060006115af848285016114be565b60008301525060206115c3848285016114be565b60208301525060406115d7848285016114f4565b60408301525060606115eb848285016114f4565b60608301525060806115ff8482850161152a565b60808301525060a06116138482850161152a565b60a08301525060c061162784828501611568565b60c08301525060e061163b8482850161152a565b60e0830152506101006116508482850161152a565b6101008301525092915050565b6000806101408385031215611675576116746113df565b5b60006116838582860161157d565b925050610120611695858286016114f4565b9150509250929050565b6116a88161153f565b82525050565b60006020820190506116c3600083018461169f565b92915050565b6000602082840312156116df576116de6113df565b5b60006116ed84828501611568565b91505092915050565b60008115159050919050565b61170b816116f6565b82525050565b60006020820190506117266000830184611702565b92915050565b60008060006101608486031215611746576117456113df565b5b60006117548682870161157d565b935050610120611766868287016114f4565b9250506101406117788682870161152a565b9150509250925092565b600080600080600080600060e0888a0312156117a1576117a06113df565b5b60006117af8a828b016114f4565b97505060206117c08a828b016114f4565b96505060406117d18a828b016114be565b95505060606117e28a828b0161152a565b94505060806117f38a828b01611568565b93505060a06118048a828b0161152a565b92505060c06118158a828b0161152a565b91505092959891949750929550565b61182d816114d3565b82525050565b60006020820190506118486000830184611824565b92915050565b60008060408385031215611865576118646113df565b5b60006118738582860161152a565b92505060206118848582860161152a565b9150509250929050565b6000602082840312156118a4576118a36113df565b5b60006118b2848285016114f4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118fb576118fa6118bb565b5b50565b600081905061190c826118ea565b919050565b600061191c826118fe565b9050919050565b61192c81611911565b82525050565b60006020820190506119476000830184611923565b92915050565b60006101208284031215611964576119636113df565b5b60006119728482850161157d565b91505092915050565b61198481611495565b82525050565b611993816114d3565b82525050565b6119a281611509565b82525050565b6119b18161153f565b82525050565b610120820160008201516119ce600085018261197b565b5060208201516119e1602085018261197b565b5060408201516119f4604085018261198a565b506060820151611a07606085018261198a565b506080820151611a1a6080850182611999565b5060a0820151611a2d60a0850182611999565b5060c0820151611a4060c08501826119a8565b5060e0820151611a5360e0850182611999565b50610100820151611a68610100850182611999565b50505050565b600061012082019050611a8460008301846119b7565b92915050565b600082825260208201905092915050565b7f7377617020697320616c726561647920636f6d706c6574656400000000000000600082015250565b6000611ad1601983611a8a565b9150611adc82611a9b565b602082019050919050565b60006020820190508181036000830152611b0081611ac4565b9050919050565b7f726566756e64206d7573742062652063616c6c6564206279207468652073776160008201527f70206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000611b63602783611a8a565b9150611b6e82611b07565b604082019050919050565b60006020820190508181036000830152611b9281611b56565b9050919050565b7f697427732074686520636f756e74657270617274792773207475726e2c20756e60008201527f61626c6520746f20726566756e642c2074727920616761696e206c6174657200602082015250565b6000611bf5603f83611a8a565b9150611c0082611b99565b604082019050919050565b60006020820190508181036000830152611c2481611be8565b9050919050565b6000604082019050611c406000830185611824565b611c4d6020830184611824565b9392505050565b6000819050919050565b6000611c79611c74611c6f84611475565b611c54565b611475565b9050919050565b6000611c8b82611c5e565b9050919050565b6000611c9d82611c80565b9050919050565b611cad81611c92565b82525050565b611cbc81611509565b82525050565b6000604082019050611cd76000830185611ca4565b611ce46020830184611cb3565b9392505050565b611cf4816116f6565b8114611cff57600080fd5b50565b600081519050611d1181611ceb565b92915050565b600060208284031215611d2d57611d2c6113df565b5b6000611d3b84828501611d02565b91505092915050565b7f636c61696d52656c617965722063616e206f6e6c792062652063616c6c65642060008201527f62792061207472757374656420666f7277617264657200000000000000000000602082015250565b6000611da0603683611a8a565b9150611dab82611d44565b604082019050919050565b60006020820190508181036000830152611dcf81611d93565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e1082611509565b9150611e1b83611509565b9250828203905081811115611e3357611e32611dd6565b5b92915050565b6000604082019050611e4e600083018561169f565b611e5b6020830184611cb3565b9392505050565b6000611e6d82611509565b9150611e7883611509565b9250828201905080821115611e9057611e8f611dd6565b5b92915050565b6000611ea182611509565b9150611eac83611509565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ee557611ee4611dd6565b5b828202905092915050565b7f76616c7565206e6f742073616d652061732045544820616d6f756e742073656e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f4c602183611a8a565b9150611f5782611ef0565b604082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b6000606082019050611f97600083018661169f565b611fa4602083018561169f565b611fb16040830184611cb3565b949350505050565b7f7377617020616c72656164792065786973747300000000000000000000000000600082015250565b6000611fef601383611a8a565b9150611ffa82611fb9565b602082019050919050565b6000602082019050818103600083015261201e81611fe2565b9050919050565b600060e08201905061203a600083018a611824565b6120476020830189611824565b6120546040830188611824565b6120616060830187611cb3565b61206e6080830186611cb3565b61207b60a083018561169f565b61208860c0830184611cb3565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b60006120f56120f06120eb846120c3565b6120cd565b6114d3565b9050919050565b612105816120da565b82525050565b6000819050919050565b600060ff82169050919050565b600061213d6121386121338461210b565b611c54565b612115565b9050919050565b61214d81612122565b82525050565b600060808201905061216860008301876120fc565b6121756020830186612144565b6121826040830185611824565b61218f6060830184611824565b95945050505050565b7f73776170206973206e6f7420696e2050454e44494e4720737461746500000000600082015250565b60006121ce601c83611a8a565b91506121d982612198565b602082019050919050565b600060208201905081810360008301526121fd816121c1565b9050919050565b7f6f6e6c79207468652073776170206f776e65722063616e2063616c6c2073657460008201527f5265616479000000000000000000000000000000000000000000000000000000602082015250565b6000612260602583611a8a565b915061226b82612204565b604082019050919050565b6000602082019050818103600083015261228f81612253565b9050919050565b7f70726f76696465642073656372657420646f6573206e6f74206d61746368207460008201527f6865206578706563746564207075626c6963206b657900000000000000000000602082015250565b60006122f2603683611a8a565b91506122fd82612296565b604082019050919050565b60006020820190508181036000830152612321816122e5565b9050919050565b7f696e76616c696420737761700000000000000000000000000000000000000000600082015250565b600061235e600c83611a8a565b915061236982612328565b602082019050919050565b6000602082019050818103600083015261238d81612351565b9050919050565b7f6f6e6c7920636c61696d65722063616e20636c61696d21000000000000000000600082015250565b60006123ca601783611a8a565b91506123d582612394565b602082019050919050565b600060208201905081810360008301526123f9816123bd565b9050919050565b7f746f6f206561726c7920746f20636c61696d2100000000000000000000000000600082015250565b6000612436601383611a8a565b915061244182612400565b602082019050919050565b6000602082019050818103600083015261246581612429565b9050919050565b7f746f6f206c61746520746f20636c61696d210000000000000000000000000000600082015250565b60006124a2601283611a8a565b91506124ad8261246c565b602082019050919050565b600060208201905081810360008301526124d181612495565b905091905056fea26469706673582212200663998a26c938854973c70e61e8de31cf4fe9d561fbd9333791a16650f8cf8c64736f6c63430008100033" //nolint:lll ethAddrByteLen = len(ethcommon.Address{}) // 20 bytes ) diff --git a/ethereum/check_swap_factory_contract_test.go b/ethereum/check_swap_factory_contract_test.go index fe7d78aa..24282c70 100644 --- a/ethereum/check_swap_factory_contract_test.go +++ b/ethereum/check_swap_factory_contract_test.go @@ -48,9 +48,8 @@ func getContractCode(t *testing.T, trustedForwarder ethcommon.Address) []byte { func TestExpectedSwapFactoryBytecodeHex(t *testing.T) { allZeroTrustedForwarder := ethcommon.Address{} codeHex := ethcommon.Bytes2Hex(getContractCode(t, allZeroTrustedForwarder)) - t.Logf("expectedSwapFactoryBytecodeHex: %s", codeHex) - require.Equal(t, expectedSwapFactoryBytecodeHex, codeHex, - "update expectedSwapFactoryBytecodeHex with above logged value to fix this test") + require.Equal(t, codeHex, expectedSwapFactoryBytecodeHex, + "update the expectedSwapFactoryBytecodeHex constant with the expected value to fix this test") } // This test will fail if the compiled SwapFactory contract is updated, but the diff --git a/ethereum/contracts/Context.sol b/ethereum/contracts/Context.sol index 253659a9..d4254239 100644 --- a/ethereum/contracts/Context.sol +++ b/ethereum/contracts/Context.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) -pragma solidity ^0.8.0; +pragma solidity ^0.8.0 .0; /** * @dev Provides information about the current execution context, including the @@ -21,4 +21,4 @@ abstract contract Context { function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } -} \ No newline at end of file +} diff --git a/ethereum/contracts/ERC20.sol b/ethereum/contracts/ERC20.sol index d0394905..664acdf9 100644 --- a/ethereum/contracts/ERC20.sol +++ b/ethereum/contracts/ERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) -pragma solidity ^0.8.0; +pragma solidity ^0.8.0 .0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; @@ -119,7 +119,13 @@ contract ERC20 is Context, IERC20, IERC20Metadata { /** * @dev See {IERC20-allowance}. */ - function allowance(address owner, address spender) public view virtual override returns (uint256) { + function allowance(address owner, address spender) + public + view + virtual + override + returns (uint256) + { return _allowances[owner][spender]; } @@ -198,7 +204,11 @@ contract ERC20 is Context, IERC20, IERC20Metadata { * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ - function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + 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"); @@ -365,7 +375,7 @@ contract ERC20 is Context, IERC20, IERC20Metadata { address from, address to, uint256 amount - ) internal virtual {} + ) internal virtual {} // solhint-disable-line /** * @dev Hook that is called after any transfer of tokens. This includes @@ -385,5 +395,5 @@ contract ERC20 is Context, IERC20, IERC20Metadata { address from, address to, uint256 amount - ) internal virtual {} + ) internal virtual {} // solhint-disable-line } diff --git a/ethereum/contracts/ERC20Mock.sol b/ethereum/contracts/ERC20Mock.sol index 998b8a42..ac2e8ec4 100644 --- a/ethereum/contracts/ERC20Mock.sol +++ b/ethereum/contracts/ERC20Mock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.8.0 .0; import "./ERC20.sol"; diff --git a/ethereum/contracts/ERC2771Context.sol b/ethereum/contracts/ERC2771Context.sol index 4deaeff9..b283a341 100644 --- a/ethereum/contracts/ERC2771Context.sol +++ b/ethereum/contracts/ERC2771Context.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (metatx/ERC2771Context.sol) -pragma solidity ^0.8.9; +pragma solidity ^0.8.9 .0; import "./Context.sol"; @@ -41,4 +41,4 @@ abstract contract ERC2771Context is Context { return super._msgData(); } } -} \ No newline at end of file +} diff --git a/ethereum/contracts/IERC20.sol b/ethereum/contracts/IERC20.sol index b816bfed..b33e5a77 100644 --- a/ethereum/contracts/IERC20.sol +++ b/ethereum/contracts/IERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) -pragma solidity ^0.8.0; +pragma solidity ^0.8.0 .0; /** * @dev Interface of the ERC20 standard as defined in the EIP. diff --git a/ethereum/contracts/IERC20Metadata.sol b/ethereum/contracts/IERC20Metadata.sol index fcedef50..6eee7e31 100644 --- a/ethereum/contracts/IERC20Metadata.sol +++ b/ethereum/contracts/IERC20Metadata.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) -pragma solidity ^0.8.0; +pragma solidity ^0.8.0 .0; import "./IERC20.sol"; @@ -25,4 +25,4 @@ interface IERC20Metadata is IERC20 { * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); -} \ No newline at end of file +} diff --git a/ethereum/contracts/Secp256k1.sol b/ethereum/contracts/Secp256k1.sol index 45165b1b..e660274b 100644 --- a/ethereum/contracts/Secp256k1.sol +++ b/ethereum/contracts/Secp256k1.sol @@ -2,19 +2,18 @@ // Implemention based on Vitalik's idea: // https://ethresear.ch/t/you-can-kinda-abuse-ecrecover-to-do-ecmul-in-secp256k1-today -pragma solidity ^0.8.5; +pragma solidity ^0.8.5 .0; contract Secp256k1 { - uint256 constant gx = + // solhint-disable-next-line + uint256 private constant gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798; - uint256 constant m = - 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; + // solhint-disable-next-line + uint256 private constant m = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; // mulVerify returns true if `Q = s * G` on the secp256k1 curve // qKeccak is defined as uint256(keccak256(abi.encodePacked(qx, qy)) - function mulVerify(uint256 scalar, uint256 qKeccak) public pure - returns(bool) - { + function mulVerify(uint256 scalar, uint256 qKeccak) public pure returns (bool) { address qRes = ecrecover(0, 27, bytes32(gx), bytes32(mulmod(scalar, gx, m))); return uint160(qKeccak) == uint160(qRes); } diff --git a/ethereum/contracts/SwapFactory.sol b/ethereum/contracts/SwapFactory.sol index 1b5870c4..60cfbd4e 100644 --- a/ethereum/contracts/SwapFactory.sol +++ b/ethereum/contracts/SwapFactory.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: LGPLv3 -pragma solidity ^0.8.5; +pragma solidity ^0.8.5 .0; import "./ERC2771Context.sol"; import "./IERC20.sol"; import "./Secp256k1.sol"; contract SwapFactory is ERC2771Context, Secp256k1 { - // Swap state is PENDING when the swap is first created and funded // Alice sets Stage to READY when she sees the funds locked on the other chain. // this prevents Bob from withdrawing funds without locking funds on the other chain first @@ -22,62 +21,62 @@ contract SwapFactory is ERC2771Context, Secp256k1 { struct Swap { // contract creator, Alice address payable owner; - // address allowed to claim the ether in this contract address payable claimer; - // the keccak256 hash of the expected public key derived from the secret `s_b`. // this public key is a point on the secp256k1 curve bytes32 pubKeyClaim; - // the keccak256 hash of the expected public key derived from the secret `s_a`. // this public key is a point on the secp256k1 curve bytes32 pubKeyRefund; - // timestamp (set at contract creation) // before which Alice can call either set_ready or refund - uint256 timeout_0; - + uint256 timeout0; // timestamp after which Bob cannot claim, only Alice can refund. - uint256 timeout_1; - + uint256 timeout1; // the asset being swapped: equal to address(0) for ETH, or an ERC-20 token address address asset; - // the value of this swap. uint256 value; - // choose random uint256 nonce; } mapping(bytes32 => Stage) public swaps; - event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout_0, uint256 timeout_1, address asset, uint256 value); + event New( + bytes32 swapID, + bytes32 claimKey, + bytes32 refundKey, + uint256 timeout0, + uint256 timeout1, + address asset, + uint256 value + ); event Ready(bytes32 swapID); event Claimed(bytes32 swapID, bytes32 s); event Refunded(bytes32 swapID, bytes32 s); - constructor(address trustedForwarder) ERC2771Context(trustedForwarder) {} + constructor(address trustedForwarder) ERC2771Context(trustedForwarder) {} // solhint-disable-line // newSwap creates a new Swap instance with the given parameters. // it returns the swap's ID. - function newSwap(bytes32 _pubKeyClaim, - bytes32 _pubKeyRefund, - address payable _claimer, + function newSwap( + bytes32 _pubKeyClaim, + bytes32 _pubKeyRefund, + address payable _claimer, uint256 _timeoutDuration, address _asset, uint256 _value, uint256 _nonce ) public payable returns (bytes32) { - Swap memory swap; swap.owner = payable(msg.sender); swap.pubKeyClaim = _pubKeyClaim; swap.pubKeyRefund = _pubKeyRefund; swap.claimer = _claimer; - swap.timeout_0 = block.timestamp + _timeoutDuration; - swap.timeout_1 = block.timestamp + (_timeoutDuration * 2); + swap.timeout0 = block.timestamp + _timeoutDuration; + swap.timeout1 = block.timestamp + (_timeoutDuration * 2); swap.asset = _asset; swap.value = _value; if (swap.asset == address(0)) { @@ -94,9 +93,17 @@ contract SwapFactory is ERC2771Context, Secp256k1 { bytes32 swapID = keccak256(abi.encode(swap)); // make sure this isn't overriding an existing swap - require(swaps[swapID] == Stage.INVALID); + require(swaps[swapID] == Stage.INVALID, "swap already exists"); - emit New(swapID, _pubKeyClaim, _pubKeyRefund, swap.timeout_0, swap.timeout_1, swap.asset, swap.value); + emit New( + swapID, + _pubKeyClaim, + _pubKeyRefund, + swap.timeout0, + swap.timeout1, + swap.asset, + swap.value + ); swaps[swapID] = Stage.PENDING; return swapID; } @@ -114,7 +121,7 @@ contract SwapFactory is ERC2771Context, Secp256k1 { // - Alice has set the swap to `ready` or it's past t_0 but before t_1 function claim(Swap memory _swap, bytes32 _s) public { _claim(_swap, _s); - + // send eth to caller (Bob) if (_swap.asset == address(0)) { _swap.claimer.transfer(_swap.value); @@ -122,7 +129,7 @@ contract SwapFactory is ERC2771Context, Secp256k1 { // TODO: this will FAIL for fee-on-transfer or rebasing tokens if the token // transfer reverts (i.e. if this contract does not contain _swap.value tokens), // exposing Bob's secret while giving him nothing - + // potential solution: wrap tokens into shares instead of absolute values // swap.value would then contain the share of the token IERC20(_swap.asset).transfer(_swap.claimer, _swap.value); @@ -131,23 +138,32 @@ contract SwapFactory is ERC2771Context, Secp256k1 { // Bob can claim if: // - Alice has set the swap to `ready` or it's past t_0 but before t_1 - function claimRelayer(Swap memory _swap, bytes32 _s, uint256 fee) public { - require(isTrustedForwarder(msg.sender), "claimRelayer can only be called by a trusted forwarder"); + function claimRelayer( + Swap memory _swap, + bytes32 _s, + uint256 fee + ) public { + require( + isTrustedForwarder(msg.sender), + "claimRelayer can only be called by a trusted forwarder" + ); _claim(_swap, _s); - // send eth to caller (Bob) + // send ether to swap claimant, subtracting the relayer fee + // which is sent to the originator of the transaction. + // tx.origin is okay here, since it isn't for authentication purposes. if (_swap.asset == address(0)) { _swap.claimer.transfer(_swap.value - fee); - payable(tx.origin).transfer(fee); + payable(tx.origin).transfer(fee); // solhint-disable-line } else { // TODO: this will FAIL for fee-on-transfer or rebasing tokens if the token // transfer reverts (i.e. if this contract does not contain _swap.value tokens), // exposing Bob's secret while giving him nothing - + // potential solution: wrap tokens into shares instead of absolute values // swap.value would then contain the share of the token IERC20(_swap.asset).transfer(_swap.claimer, _swap.value - fee); - IERC20(_swap.asset).transfer(tx.origin, fee); + IERC20(_swap.asset).transfer(tx.origin, fee); // solhint-disable-line } } @@ -157,8 +173,11 @@ contract SwapFactory is ERC2771Context, Secp256k1 { require(swapStage != Stage.INVALID, "invalid swap"); require(swapStage != Stage.COMPLETED, "swap is already completed"); require(_msgSender() == _swap.claimer, "only claimer can claim!"); - require((block.timestamp >= _swap.timeout_0 || swapStage == Stage.READY), "too early to claim!"); - require(block.timestamp < _swap.timeout_1, "too late to claim!"); + require( + (block.timestamp >= _swap.timeout0 || swapStage == Stage.READY), + "too early to claim!" + ); + require(block.timestamp < _swap.timeout1, "too late to claim!"); verifySecret(_s, _swap.pubKeyClaim); emit Claimed(swapID, _s); @@ -171,11 +190,14 @@ contract SwapFactory is ERC2771Context, Secp256k1 { function refund(Swap memory _swap, bytes32 _s) public { bytes32 swapID = keccak256(abi.encode(_swap)); Stage swapStage = swaps[swapID]; - require(swapStage != Stage.COMPLETED && swapStage != Stage.INVALID, "swap is already completed"); + require( + swapStage != Stage.COMPLETED && swapStage != Stage.INVALID, + "swap is already completed" + ); require(msg.sender == _swap.owner, "refund must be called by the swap owner"); require( - block.timestamp >= _swap.timeout_1 || - (block.timestamp < _swap.timeout_0 && swapStage != Stage.READY), + block.timestamp >= _swap.timeout1 || + (block.timestamp < _swap.timeout0 && swapStage != Stage.READY), "it's the counterparty's turn, unable to refund, try again later" ); diff --git a/ethereum/contracts/TestUtils.sol b/ethereum/contracts/TestUtils.sol index ec861a5e..b9d1e1ac 100644 --- a/ethereum/contracts/TestUtils.sol +++ b/ethereum/contracts/TestUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPLv3 -pragma solidity ^0.8.5; +pragma solidity ^0.8.5 .0; import "hardhat/console.sol"; @@ -18,9 +18,7 @@ contract TestUtils { uint256 k = length; while (i != 0) { uint256 curr = (i & mask); - bstr[--k] = curr > 9 - ? bytes1(uint8(55 + curr)) - : bytes1(uint8(48 + curr)); // 55 = 65 - 10 + bstr[--k] = curr > 9 ? bytes1(uint8(55 + curr)) : bytes1(uint8(48 + curr)); // 55 = 65 - 10 i = i >> 4; } return string(bstr); diff --git a/ethereum/erc20_mock.go b/ethereum/erc20_mock.go index 2c7414fc..c4d55577 100644 --- a/ethereum/erc20_mock.go +++ b/ethereum/erc20_mock.go @@ -31,7 +31,7 @@ var ( // ERC20MockMetaData contains all meta data concerning the ERC20Mock contract. var ERC20MockMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"initialAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveInternal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferInternal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052604051620020f4380380620020f4833981810160405281019062000029919062000417565b838381600390816200003c919062000708565b5080600490816200004e919062000708565b5050506200006382826200006d60201b60201c565b505050506200090a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d69062000850565b60405180910390fd5b620000f360008383620001da60201b60201c565b8060026000828254620001079190620008a1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001ba9190620008ed565b60405180910390a3620001d660008383620001df60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200024d8262000202565b810181811067ffffffffffffffff821117156200026f576200026e62000213565b5b80604052505050565b600062000284620001e4565b905062000292828262000242565b919050565b600067ffffffffffffffff821115620002b557620002b462000213565b5b620002c08262000202565b9050602081019050919050565b60005b83811015620002ed578082015181840152602081019050620002d0565b60008484015250505050565b6000620003106200030a8462000297565b62000278565b9050828152602081018484840111156200032f576200032e620001fd565b5b6200033c848285620002cd565b509392505050565b600082601f8301126200035c576200035b620001f8565b5b81516200036e848260208601620002f9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003a48262000377565b9050919050565b620003b68162000397565b8114620003c257600080fd5b50565b600081519050620003d681620003ab565b92915050565b6000819050919050565b620003f181620003dc565b8114620003fd57600080fd5b50565b6000815190506200041181620003e6565b92915050565b60008060008060808587031215620004345762000433620001ee565b5b600085015167ffffffffffffffff811115620004555762000454620001f3565b5b620004638782880162000344565b945050602085015167ffffffffffffffff811115620004875762000486620001f3565b5b620004958782880162000344565b9350506040620004a887828801620003c5565b9250506060620004bb8782880162000400565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200051a57607f821691505b60208210810362000530576200052f620004d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200059a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200055b565b620005a686836200055b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005e9620005e3620005dd84620003dc565b620005be565b620003dc565b9050919050565b6000819050919050565b6200060583620005c8565b6200061d6200061482620005f0565b84845462000568565b825550505050565b600090565b6200063462000625565b62000641818484620005fa565b505050565b5b8181101562000669576200065d6000826200062a565b60018101905062000647565b5050565b601f821115620006b857620006828162000536565b6200068d846200054b565b810160208510156200069d578190505b620006b5620006ac856200054b565b83018262000646565b50505b505050565b600082821c905092915050565b6000620006dd60001984600802620006bd565b1980831691505092915050565b6000620006f88383620006ca565b9150826002028217905092915050565b6200071382620004c7565b67ffffffffffffffff8111156200072f576200072e62000213565b5b6200073b825462000501565b620007488282856200066d565b600060209050601f8311600181146200078057600084156200076b578287015190505b620007778582620006ea565b865550620007e7565b601f198416620007908662000536565b60005b82811015620007ba5784890151825560018201915060208501945060208101905062000793565b86831015620007da5784890151620007d6601f891682620006ca565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000838601f83620007ef565b9150620008458262000800565b602082019050919050565b600060208201905081810360008301526200086b8162000829565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008ae82620003dc565b9150620008bb83620003dc565b9250828201905080821115620008d657620008d562000872565b5b92915050565b620008e781620003dc565b82525050565b6000602082019050620009046000830184620008dc565b92915050565b6117da806200091a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610286578063a457c2d7146102a2578063a9059cbb146102d2578063dd62ed3e14610302576100f5565b806340c10f191461020057806356189cb41461021c57806370a082311461023857806395d89b4114610268576100f5565b8063222f5be0116100d3578063222f5be01461016657806323b872dd14610182578063313ce567146101b257806339509351146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610332565b60405161010f9190610f27565b60405180910390f35b610132600480360381019061012d9190610fe2565b6103c4565b60405161013f919061103d565b60405180910390f35b6101506103e7565b60405161015d9190611067565b60405180910390f35b610180600480360381019061017b9190611082565b6103f1565b005b61019c60048036038101906101979190611082565b610401565b6040516101a9919061103d565b60405180910390f35b6101ba610430565b6040516101c791906110f1565b60405180910390f35b6101ea60048036038101906101e59190610fe2565b610439565b6040516101f7919061103d565b60405180910390f35b61021a60048036038101906102159190610fe2565b610470565b005b61023660048036038101906102319190611082565b61047e565b005b610252600480360381019061024d919061110c565b61048e565b60405161025f9190611067565b60405180910390f35b6102706104d6565b60405161027d9190610f27565b60405180910390f35b6102a0600480360381019061029b9190610fe2565b610568565b005b6102bc60048036038101906102b79190610fe2565b610576565b6040516102c9919061103d565b60405180910390f35b6102ec60048036038101906102e79190610fe2565b6105ed565b6040516102f9919061103d565b60405180910390f35b61031c60048036038101906103179190611139565b610610565b6040516103299190611067565b60405180910390f35b606060038054610341906111a8565b80601f016020809104026020016040519081016040528092919081815260200182805461036d906111a8565b80156103ba5780601f1061038f576101008083540402835291602001916103ba565b820191906000526020600020905b81548152906001019060200180831161039d57829003601f168201915b5050505050905090565b6000806103cf610697565b90506103dc81858561069f565b600191505092915050565b6000600254905090565b6103fc838383610868565b505050565b60008061040c610697565b9050610419858285610ade565b610424858585610868565b60019150509392505050565b60006012905090565b600080610444610697565b90506104658185856104568589610610565b6104609190611208565b61069f565b600191505092915050565b61047a8282610b6a565b5050565b61048983838361069f565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546104e5906111a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610511906111a8565b801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b6105728282610cc0565b5050565b600080610581610697565b9050600061058f8286610610565b9050838110156105d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cb906112ae565b60405180910390fd5b6105e1828686840361069f565b60019250505092915050565b6000806105f8610697565b9050610605818585610868565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070590611340565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906113d2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161085b9190611067565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90611464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d906114f6565b60405180910390fd5b610951838383610e8d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce90611588565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ac59190611067565b60405180910390a3610ad8848484610e92565b50505050565b6000610aea8484610610565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b645781811015610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906115f4565b60405180910390fd5b610b63848484840361069f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090611660565b60405180910390fd5b610be560008383610e8d565b8060026000828254610bf79190611208565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ca89190611067565b60405180910390a3610cbc60008383610e92565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906116f2565b60405180910390fd5b610d3b82600083610e8d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890611784565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e749190611067565b60405180910390a3610e8883600084610e92565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ed1578082015181840152602081019050610eb6565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ef982610e97565b610f038185610ea2565b9350610f13818560208601610eb3565b610f1c81610edd565b840191505092915050565b60006020820190508181036000830152610f418184610eee565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f7982610f4e565b9050919050565b610f8981610f6e565b8114610f9457600080fd5b50565b600081359050610fa681610f80565b92915050565b6000819050919050565b610fbf81610fac565b8114610fca57600080fd5b50565b600081359050610fdc81610fb6565b92915050565b60008060408385031215610ff957610ff8610f49565b5b600061100785828601610f97565b925050602061101885828601610fcd565b9150509250929050565b60008115159050919050565b61103781611022565b82525050565b6000602082019050611052600083018461102e565b92915050565b61106181610fac565b82525050565b600060208201905061107c6000830184611058565b92915050565b60008060006060848603121561109b5761109a610f49565b5b60006110a986828701610f97565b93505060206110ba86828701610f97565b92505060406110cb86828701610fcd565b9150509250925092565b600060ff82169050919050565b6110eb816110d5565b82525050565b600060208201905061110660008301846110e2565b92915050565b60006020828403121561112257611121610f49565b5b600061113084828501610f97565b91505092915050565b600080604083850312156111505761114f610f49565b5b600061115e85828601610f97565b925050602061116f85828601610f97565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111c057607f821691505b6020821081036111d3576111d2611179565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061121382610fac565b915061121e83610fac565b9250828201905080821115611236576112356111d9565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611298602583610ea2565b91506112a38261123c565b604082019050919050565b600060208201905081810360008301526112c78161128b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061132a602483610ea2565b9150611335826112ce565b604082019050919050565b600060208201905081810360008301526113598161131d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006113bc602283610ea2565b91506113c782611360565b604082019050919050565b600060208201905081810360008301526113eb816113af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061144e602583610ea2565b9150611459826113f2565b604082019050919050565b6000602082019050818103600083015261147d81611441565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114e0602383610ea2565b91506114eb82611484565b604082019050919050565b6000602082019050818103600083015261150f816114d3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611572602683610ea2565b915061157d82611516565b604082019050919050565b600060208201905081810360008301526115a181611565565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006115de601d83610ea2565b91506115e9826115a8565b602082019050919050565b6000602082019050818103600083015261160d816115d1565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061164a601f83610ea2565b915061165582611614565b602082019050919050565b600060208201905081810360008301526116798161163d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006116dc602183610ea2565b91506116e782611680565b604082019050919050565b6000602082019050818103600083015261170b816116cf565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061176e602283610ea2565b915061177982611712565b604082019050919050565b6000602082019050818103600083015261179d81611761565b905091905056fea26469706673582212209399bbb01b46b6bbabcadbaff0108e834aa4313b6019d4160057ed21c05f3b3364736f6c63430008100033", + Bin: "0x6080604052604051620020f4380380620020f4833981810160405281019062000029919062000417565b838381600390816200003c919062000708565b5080600490816200004e919062000708565b5050506200006382826200006d60201b60201c565b505050506200090a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d69062000850565b60405180910390fd5b620000f360008383620001da60201b60201c565b8060026000828254620001079190620008a1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001ba9190620008ed565b60405180910390a3620001d660008383620001df60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200024d8262000202565b810181811067ffffffffffffffff821117156200026f576200026e62000213565b5b80604052505050565b600062000284620001e4565b905062000292828262000242565b919050565b600067ffffffffffffffff821115620002b557620002b462000213565b5b620002c08262000202565b9050602081019050919050565b60005b83811015620002ed578082015181840152602081019050620002d0565b60008484015250505050565b6000620003106200030a8462000297565b62000278565b9050828152602081018484840111156200032f576200032e620001fd565b5b6200033c848285620002cd565b509392505050565b600082601f8301126200035c576200035b620001f8565b5b81516200036e848260208601620002f9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003a48262000377565b9050919050565b620003b68162000397565b8114620003c257600080fd5b50565b600081519050620003d681620003ab565b92915050565b6000819050919050565b620003f181620003dc565b8114620003fd57600080fd5b50565b6000815190506200041181620003e6565b92915050565b60008060008060808587031215620004345762000433620001ee565b5b600085015167ffffffffffffffff811115620004555762000454620001f3565b5b620004638782880162000344565b945050602085015167ffffffffffffffff811115620004875762000486620001f3565b5b620004958782880162000344565b9350506040620004a887828801620003c5565b9250506060620004bb8782880162000400565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200051a57607f821691505b60208210810362000530576200052f620004d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200059a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200055b565b620005a686836200055b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005e9620005e3620005dd84620003dc565b620005be565b620003dc565b9050919050565b6000819050919050565b6200060583620005c8565b6200061d6200061482620005f0565b84845462000568565b825550505050565b600090565b6200063462000625565b62000641818484620005fa565b505050565b5b8181101562000669576200065d6000826200062a565b60018101905062000647565b5050565b601f821115620006b857620006828162000536565b6200068d846200054b565b810160208510156200069d578190505b620006b5620006ac856200054b565b83018262000646565b50505b505050565b600082821c905092915050565b6000620006dd60001984600802620006bd565b1980831691505092915050565b6000620006f88383620006ca565b9150826002028217905092915050565b6200071382620004c7565b67ffffffffffffffff8111156200072f576200072e62000213565b5b6200073b825462000501565b620007488282856200066d565b600060209050601f8311600181146200078057600084156200076b578287015190505b620007778582620006ea565b865550620007e7565b601f198416620007908662000536565b60005b82811015620007ba5784890151825560018201915060208501945060208101905062000793565b86831015620007da5784890151620007d6601f891682620006ca565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000838601f83620007ef565b9150620008458262000800565b602082019050919050565b600060208201905081810360008301526200086b8162000829565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008ae82620003dc565b9150620008bb83620003dc565b9250828201905080821115620008d657620008d562000872565b5b92915050565b620008e781620003dc565b82525050565b6000602082019050620009046000830184620008dc565b92915050565b6117da806200091a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610286578063a457c2d7146102a2578063a9059cbb146102d2578063dd62ed3e14610302576100f5565b806340c10f191461020057806356189cb41461021c57806370a082311461023857806395d89b4114610268576100f5565b8063222f5be0116100d3578063222f5be01461016657806323b872dd14610182578063313ce567146101b257806339509351146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610332565b60405161010f9190610f27565b60405180910390f35b610132600480360381019061012d9190610fe2565b6103c4565b60405161013f919061103d565b60405180910390f35b6101506103e7565b60405161015d9190611067565b60405180910390f35b610180600480360381019061017b9190611082565b6103f1565b005b61019c60048036038101906101979190611082565b610401565b6040516101a9919061103d565b60405180910390f35b6101ba610430565b6040516101c791906110f1565b60405180910390f35b6101ea60048036038101906101e59190610fe2565b610439565b6040516101f7919061103d565b60405180910390f35b61021a60048036038101906102159190610fe2565b610470565b005b61023660048036038101906102319190611082565b61047e565b005b610252600480360381019061024d919061110c565b61048e565b60405161025f9190611067565b60405180910390f35b6102706104d6565b60405161027d9190610f27565b60405180910390f35b6102a0600480360381019061029b9190610fe2565b610568565b005b6102bc60048036038101906102b79190610fe2565b610576565b6040516102c9919061103d565b60405180910390f35b6102ec60048036038101906102e79190610fe2565b6105ed565b6040516102f9919061103d565b60405180910390f35b61031c60048036038101906103179190611139565b610610565b6040516103299190611067565b60405180910390f35b606060038054610341906111a8565b80601f016020809104026020016040519081016040528092919081815260200182805461036d906111a8565b80156103ba5780601f1061038f576101008083540402835291602001916103ba565b820191906000526020600020905b81548152906001019060200180831161039d57829003601f168201915b5050505050905090565b6000806103cf610697565b90506103dc81858561069f565b600191505092915050565b6000600254905090565b6103fc838383610868565b505050565b60008061040c610697565b9050610419858285610ade565b610424858585610868565b60019150509392505050565b60006012905090565b600080610444610697565b90506104658185856104568589610610565b6104609190611208565b61069f565b600191505092915050565b61047a8282610b6a565b5050565b61048983838361069f565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546104e5906111a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610511906111a8565b801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b6105728282610cc0565b5050565b600080610581610697565b9050600061058f8286610610565b9050838110156105d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cb906112ae565b60405180910390fd5b6105e1828686840361069f565b60019250505092915050565b6000806105f8610697565b9050610605818585610868565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070590611340565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906113d2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161085b9190611067565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90611464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d906114f6565b60405180910390fd5b610951838383610e8d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce90611588565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ac59190611067565b60405180910390a3610ad8848484610e92565b50505050565b6000610aea8484610610565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b645781811015610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906115f4565b60405180910390fd5b610b63848484840361069f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090611660565b60405180910390fd5b610be560008383610e8d565b8060026000828254610bf79190611208565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ca89190611067565b60405180910390a3610cbc60008383610e92565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906116f2565b60405180910390fd5b610d3b82600083610e8d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890611784565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e749190611067565b60405180910390a3610e8883600084610e92565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ed1578082015181840152602081019050610eb6565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ef982610e97565b610f038185610ea2565b9350610f13818560208601610eb3565b610f1c81610edd565b840191505092915050565b60006020820190508181036000830152610f418184610eee565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f7982610f4e565b9050919050565b610f8981610f6e565b8114610f9457600080fd5b50565b600081359050610fa681610f80565b92915050565b6000819050919050565b610fbf81610fac565b8114610fca57600080fd5b50565b600081359050610fdc81610fb6565b92915050565b60008060408385031215610ff957610ff8610f49565b5b600061100785828601610f97565b925050602061101885828601610fcd565b9150509250929050565b60008115159050919050565b61103781611022565b82525050565b6000602082019050611052600083018461102e565b92915050565b61106181610fac565b82525050565b600060208201905061107c6000830184611058565b92915050565b60008060006060848603121561109b5761109a610f49565b5b60006110a986828701610f97565b93505060206110ba86828701610f97565b92505060406110cb86828701610fcd565b9150509250925092565b600060ff82169050919050565b6110eb816110d5565b82525050565b600060208201905061110660008301846110e2565b92915050565b60006020828403121561112257611121610f49565b5b600061113084828501610f97565b91505092915050565b600080604083850312156111505761114f610f49565b5b600061115e85828601610f97565b925050602061116f85828601610f97565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111c057607f821691505b6020821081036111d3576111d2611179565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061121382610fac565b915061121e83610fac565b9250828201905080821115611236576112356111d9565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611298602583610ea2565b91506112a38261123c565b604082019050919050565b600060208201905081810360008301526112c78161128b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061132a602483610ea2565b9150611335826112ce565b604082019050919050565b600060208201905081810360008301526113598161131d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006113bc602283610ea2565b91506113c782611360565b604082019050919050565b600060208201905081810360008301526113eb816113af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061144e602583610ea2565b9150611459826113f2565b604082019050919050565b6000602082019050818103600083015261147d81611441565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114e0602383610ea2565b91506114eb82611484565b604082019050919050565b6000602082019050818103600083015261150f816114d3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611572602683610ea2565b915061157d82611516565b604082019050919050565b600060208201905081810360008301526115a181611565565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006115de601d83610ea2565b91506115e9826115a8565b602082019050919050565b6000602082019050818103600083015261160d816115d1565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061164a601f83610ea2565b915061165582611614565b602082019050919050565b600060208201905081810360008301526116798161163d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006116dc602183610ea2565b91506116e782611680565b604082019050919050565b6000602082019050818103600083015261170b816116cf565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061176e602283610ea2565b915061177982611712565b604082019050919050565b6000602082019050818103600083015261179d81611761565b905091905056fea2646970667358221220195664d03936e70203b96b41e3092c14fcd75da01e39c428302dcd88903ed41e64736f6c63430008100033", } // ERC20MockABI is the input ABI used to generate the binding from. diff --git a/ethereum/swap_factory.go b/ethereum/swap_factory.go index d32230ec..7746089d 100644 --- a/ethereum/swap_factory.go +++ b/ethereum/swap_factory.go @@ -43,8 +43,8 @@ type SwapFactorySwap struct { // SwapFactoryMetaData contains all meta data concerning the SwapFactory contract. var SwapFactoryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"refundKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout_0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout_1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"New\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"}],\"name\":\"Ready\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Refunded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout_1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout_1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"claimRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"qKeccak\",\"type\":\"uint256\"}],\"name\":\"mulVerify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"addresspayable\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeoutDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"newSwap\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout_1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout_1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"}],\"name\":\"setReady\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"swaps\",\"outputs\":[{\"internalType\":\"enumSwapFactory.Stage\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200259f3803806200259f8339818101604052810190620000379190620000de565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000110565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a68262000079565b9050919050565b620000b88162000099565b8114620000c457600080fd5b50565b600081519050620000d881620000ad565b92915050565b600060208284031215620000f757620000f662000074565b5b60006200010784828501620000c7565b91505092915050565b60805161246c62000133600039600081816105c101526105e7015261246c6000f3fe6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063aa0f87251461016e578063b32d1b4f1461019e578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad9190611627565b610241565b005b3480156100c057600080fd5b506100c96105bf565b6040516100d69190611678565b60405180910390f35b3480156100eb57600080fd5b5061010660048036038101906101019190611693565b6105e3565b60405161011391906116db565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611627565b61063b565b005b34801561015157600080fd5b5061016c600480360381019061016791906116f6565b610761565b005b6101886004803603810190610183919061174c565b6109b0565b60405161019591906117fd565b60405180910390f35b3480156101aa57600080fd5b506101c560048036038101906101c09190611818565b610ce7565b6040516101d291906116db565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd9190611858565b610dec565b60405161020f91906118fc565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a9190611917565b610e0c565b005b6000826040516020016102549190611a38565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506003808111156102a3576102a2611885565b5b8160038111156102b6576102b5611885565b5b141580156102e95750600060038111156102d3576102d2611885565b5b8160038111156102e6576102e5611885565b5b14155b610328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031f90611ab1565b60405180910390fd5b836000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611b43565b60405180910390fd5b8360a00151421015806103e157508360800151421080156103e05750600260038111156103ca576103c9611885565b5b8160038111156103dd576103dc611885565b5b14155b5b610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041790611bd5565b60405180910390fd5b61042e838560600151610fa5565b7e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f828460405161045e929190611bf5565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561049c5761049b611885565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361052d57836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f19350505050158015610527573d6000803e3d6000fd5b506105b9565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610574929190611c8c565b6020604051808303816000875af1158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611ce1565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6106458282610ff8565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d157816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106cb573d6000803e3d6000fd5b5061075d565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b8152600401610718929190611c8c565b6020604051808303816000875af1158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b9190611ce1565b505b5050565b61076a336105e3565b6107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a090611d80565b60405180910390fd5b6107b38383610ff8565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361089157826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108199190611dcf565b9081150290604051600060405180830381858888f19350505050158015610844573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561088b573d6000803e3d6000fd5b506109ab565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c69190611dcf565b6040518363ffffffff1660e01b81526004016108e3929190611c8c565b6020604051808303816000875af1158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611ce1565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610966929190611e03565b6020604051808303816000875af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190611ce1565b505b505050565b60006109ba61130b565b33816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050888160400181815250508781606001818152505086816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508542610a4a9190611e2c565b816080018181525050600286610a609190611e60565b42610a6b9190611e2c565b8160a0018181525050848160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160e0018181525050600073ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff1603610b3957348160e0015114610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90611f2c565b60405180910390fd5b610bc3565b8060c0015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308460e001516040518463ffffffff1660e01b8152600401610b7e93929190611f4c565b6020604051808303816000875af1158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190611ce1565b505b8281610100018181525050600081604051602001610be19190611a38565b60405160208183030381529060405280519060200120905060006003811115610c0d57610c0c611885565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610c3f57610c3e611885565b5b14610c4957600080fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818b8b85608001518660a001518760c001518860e00151604051610c949796959493929190611f83565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610cd257610cd1611885565b5b02179055508092505050979650505050505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610d4357610d42611ff2565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610d8694939291906120b1565b6020604051602081039080840390855afa158015610da8573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610e1f9190611a38565b60405160208183030381529060405280519060200120905060016003811115610e4b57610e4a611885565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610e7d57610e7c611885565b5b14610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612142565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f26906121d4565b60405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff02191690836003811115610f6557610f64611885565b5b02179055507f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f81604051610f9991906117fd565b60405180910390a15050565b610fb58260001c8260001c610ce7565b610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90612266565b60405180910390fd5b5050565b60008260405160200161100b9190611a38565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506000600381111561105b5761105a611885565b5b81600381111561106e5761106d611885565b5b036110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a5906122d2565b60405180910390fd5b6003808111156110c1576110c0611885565b5b8160038111156110d4576110d3611885565b5b03611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b90611ab1565b60405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff166111376112d1565b73ffffffffffffffffffffffffffffffffffffffff161461118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061233e565b60405180910390fd5b8360800151421015806111c45750600260038111156111af576111ae611885565b5b8160038111156111c2576111c1611885565b5b145b611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906123aa565b60405180910390fd5b8360a001514210611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090612416565b60405180910390fd5b611257838560400151610fa5565b7f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee8284604051611288929190611bf5565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156112c6576112c5611885565b5b021790555050505050565b60006112dc336105e3565b156112f057601436033560601c90506112ff565b6112f8611303565b9050611300565b5b90565b600033905090565b604051806101200160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600080191681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113fc826113b3565b810181811067ffffffffffffffff8211171561141b5761141a6113c4565b5b80604052505050565b600061142e61139f565b905061143a82826113f3565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061146a8261143f565b9050919050565b61147a8161145f565b811461148557600080fd5b50565b60008135905061149781611471565b92915050565b6000819050919050565b6114b08161149d565b81146114bb57600080fd5b50565b6000813590506114cd816114a7565b92915050565b6000819050919050565b6114e6816114d3565b81146114f157600080fd5b50565b600081359050611503816114dd565b92915050565b60006115148261143f565b9050919050565b61152481611509565b811461152f57600080fd5b50565b6000813590506115418161151b565b92915050565b6000610120828403121561155e5761155d6113ae565b5b611569610120611424565b9050600061157984828501611488565b600083015250602061158d84828501611488565b60208301525060406115a1848285016114be565b60408301525060606115b5848285016114be565b60608301525060806115c9848285016114f4565b60808301525060a06115dd848285016114f4565b60a08301525060c06115f184828501611532565b60c08301525060e0611605848285016114f4565b60e08301525061010061161a848285016114f4565b6101008301525092915050565b600080610140838503121561163f5761163e6113a9565b5b600061164d85828601611547565b92505061012061165f858286016114be565b9150509250929050565b61167281611509565b82525050565b600060208201905061168d6000830184611669565b92915050565b6000602082840312156116a9576116a86113a9565b5b60006116b784828501611532565b91505092915050565b60008115159050919050565b6116d5816116c0565b82525050565b60006020820190506116f060008301846116cc565b92915050565b600080600061016084860312156117105761170f6113a9565b5b600061171e86828701611547565b935050610120611730868287016114be565b925050610140611742868287016114f4565b9150509250925092565b600080600080600080600060e0888a03121561176b5761176a6113a9565b5b60006117798a828b016114be565b975050602061178a8a828b016114be565b965050604061179b8a828b01611488565b95505060606117ac8a828b016114f4565b94505060806117bd8a828b01611532565b93505060a06117ce8a828b016114f4565b92505060c06117df8a828b016114f4565b91505092959891949750929550565b6117f78161149d565b82525050565b600060208201905061181260008301846117ee565b92915050565b6000806040838503121561182f5761182e6113a9565b5b600061183d858286016114f4565b925050602061184e858286016114f4565b9150509250929050565b60006020828403121561186e5761186d6113a9565b5b600061187c848285016114be565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118c5576118c4611885565b5b50565b60008190506118d6826118b4565b919050565b60006118e6826118c8565b9050919050565b6118f6816118db565b82525050565b600060208201905061191160008301846118ed565b92915050565b6000610120828403121561192e5761192d6113a9565b5b600061193c84828501611547565b91505092915050565b61194e8161145f565b82525050565b61195d8161149d565b82525050565b61196c816114d3565b82525050565b61197b81611509565b82525050565b610120820160008201516119986000850182611945565b5060208201516119ab6020850182611945565b5060408201516119be6040850182611954565b5060608201516119d16060850182611954565b5060808201516119e46080850182611963565b5060a08201516119f760a0850182611963565b5060c0820151611a0a60c0850182611972565b5060e0820151611a1d60e0850182611963565b50610100820151611a32610100850182611963565b50505050565b600061012082019050611a4e6000830184611981565b92915050565b600082825260208201905092915050565b7f7377617020697320616c726561647920636f6d706c6574656400000000000000600082015250565b6000611a9b601983611a54565b9150611aa682611a65565b602082019050919050565b60006020820190508181036000830152611aca81611a8e565b9050919050565b7f726566756e64206d7573742062652063616c6c6564206279207468652073776160008201527f70206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000611b2d602783611a54565b9150611b3882611ad1565b604082019050919050565b60006020820190508181036000830152611b5c81611b20565b9050919050565b7f697427732074686520636f756e74657270617274792773207475726e2c20756e60008201527f61626c6520746f20726566756e642c2074727920616761696e206c6174657200602082015250565b6000611bbf603f83611a54565b9150611bca82611b63565b604082019050919050565b60006020820190508181036000830152611bee81611bb2565b9050919050565b6000604082019050611c0a60008301856117ee565b611c1760208301846117ee565b9392505050565b6000819050919050565b6000611c43611c3e611c398461143f565b611c1e565b61143f565b9050919050565b6000611c5582611c28565b9050919050565b6000611c6782611c4a565b9050919050565b611c7781611c5c565b82525050565b611c86816114d3565b82525050565b6000604082019050611ca16000830185611c6e565b611cae6020830184611c7d565b9392505050565b611cbe816116c0565b8114611cc957600080fd5b50565b600081519050611cdb81611cb5565b92915050565b600060208284031215611cf757611cf66113a9565b5b6000611d0584828501611ccc565b91505092915050565b7f636c61696d52656c617965722063616e206f6e6c792062652063616c6c65642060008201527f62792061207472757374656420666f7277617264657200000000000000000000602082015250565b6000611d6a603683611a54565b9150611d7582611d0e565b604082019050919050565b60006020820190508181036000830152611d9981611d5d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611dda826114d3565b9150611de5836114d3565b9250828203905081811115611dfd57611dfc611da0565b5b92915050565b6000604082019050611e186000830185611669565b611e256020830184611c7d565b9392505050565b6000611e37826114d3565b9150611e42836114d3565b9250828201905080821115611e5a57611e59611da0565b5b92915050565b6000611e6b826114d3565b9150611e76836114d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611eaf57611eae611da0565b5b828202905092915050565b7f76616c7565206e6f742073616d652061732045544820616d6f756e742073656e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f16602183611a54565b9150611f2182611eba565b604082019050919050565b60006020820190508181036000830152611f4581611f09565b9050919050565b6000606082019050611f616000830186611669565b611f6e6020830185611669565b611f7b6040830184611c7d565b949350505050565b600060e082019050611f98600083018a6117ee565b611fa560208301896117ee565b611fb260408301886117ee565b611fbf6060830187611c7d565b611fcc6080830186611c7d565b611fd960a0830185611669565b611fe660c0830184611c7d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b600061205361204e61204984612021565b61202b565b61149d565b9050919050565b61206381612038565b82525050565b6000819050919050565b600060ff82169050919050565b600061209b61209661209184612069565b611c1e565b612073565b9050919050565b6120ab81612080565b82525050565b60006080820190506120c6600083018761205a565b6120d360208301866120a2565b6120e060408301856117ee565b6120ed60608301846117ee565b95945050505050565b7f73776170206973206e6f7420696e2050454e44494e4720737461746500000000600082015250565b600061212c601c83611a54565b9150612137826120f6565b602082019050919050565b6000602082019050818103600083015261215b8161211f565b9050919050565b7f6f6e6c79207468652073776170206f776e65722063616e2063616c6c2073657460008201527f5265616479000000000000000000000000000000000000000000000000000000602082015250565b60006121be602583611a54565b91506121c982612162565b604082019050919050565b600060208201905081810360008301526121ed816121b1565b9050919050565b7f70726f76696465642073656372657420646f6573206e6f74206d61746368207460008201527f6865206578706563746564207075626c6963206b657900000000000000000000602082015250565b6000612250603683611a54565b915061225b826121f4565b604082019050919050565b6000602082019050818103600083015261227f81612243565b9050919050565b7f696e76616c696420737761700000000000000000000000000000000000000000600082015250565b60006122bc600c83611a54565b91506122c782612286565b602082019050919050565b600060208201905081810360008301526122eb816122af565b9050919050565b7f6f6e6c7920636c61696d65722063616e20636c61696d21000000000000000000600082015250565b6000612328601783611a54565b9150612333826122f2565b602082019050919050565b600060208201905081810360008301526123578161231b565b9050919050565b7f746f6f206561726c7920746f20636c61696d2100000000000000000000000000600082015250565b6000612394601383611a54565b915061239f8261235e565b602082019050919050565b600060208201905081810360008301526123c381612387565b9050919050565b7f746f6f206c61746520746f20636c61696d210000000000000000000000000000600082015250565b6000612400601283611a54565b915061240b826123ca565b602082019050919050565b6000602082019050818103600083015261242f816123f3565b905091905056fea26469706673582212207cbde369fedcf2fe1d950750da1b198ba34ff55dee15b0b173d54b276f96dc3464736f6c63430008100033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"refundKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"New\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"}],\"name\":\"Ready\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Refunded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"claimRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"qKeccak\",\"type\":\"uint256\"}],\"name\":\"mulVerify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"addresspayable\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeoutDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"newSwap\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapFactory.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"}],\"name\":\"setReady\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"swaps\",\"outputs\":[{\"internalType\":\"enumSwapFactory.Stage\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002641380380620026418339818101604052810190620000379190620000de565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000110565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a68262000079565b9050919050565b620000b88162000099565b8114620000c457600080fd5b50565b600081519050620000d881620000ad565b92915050565b600060208284031215620000f757620000f662000074565b5b60006200010784828501620000c7565b91505092915050565b60805161250e62000133600039600081816105c101526105e7015261250e6000f3fe6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063aa0f87251461016e578063b32d1b4f1461019e578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad919061165d565b610241565b005b3480156100c057600080fd5b506100c96105bf565b6040516100d691906116ae565b60405180910390f35b3480156100eb57600080fd5b50610106600480360381019061010191906116c9565b6105e3565b6040516101139190611711565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e919061165d565b61063b565b005b34801561015157600080fd5b5061016c6004803603810190610167919061172c565b610761565b005b61018860048036038101906101839190611782565b6109b0565b6040516101959190611833565b60405180910390f35b3480156101aa57600080fd5b506101c560048036038101906101c0919061184e565b610d1d565b6040516101d29190611711565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd919061188e565b610e22565b60405161020f9190611932565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a919061194d565b610e42565b005b6000826040516020016102549190611a6e565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506003808111156102a3576102a26118bb565b5b8160038111156102b6576102b56118bb565b5b141580156102e95750600060038111156102d3576102d26118bb565b5b8160038111156102e6576102e56118bb565b5b14155b610328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031f90611ae7565b60405180910390fd5b836000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611b79565b60405180910390fd5b8360a00151421015806103e157508360800151421080156103e05750600260038111156103ca576103c96118bb565b5b8160038111156103dd576103dc6118bb565b5b14155b5b610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041790611c0b565b60405180910390fd5b61042e838560600151610fdb565b7e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f828460405161045e929190611c2b565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561049c5761049b6118bb565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361052d57836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f19350505050158015610527573d6000803e3d6000fd5b506105b9565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610574929190611cc2565b6020604051808303816000875af1158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611d17565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b610645828261102e565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d157816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106cb573d6000803e3d6000fd5b5061075d565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b8152600401610718929190611cc2565b6020604051808303816000875af1158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b9190611d17565b505b5050565b61076a336105e3565b6107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a090611db6565b60405180910390fd5b6107b3838361102e565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361089157826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108199190611e05565b9081150290604051600060405180830381858888f19350505050158015610844573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561088b573d6000803e3d6000fd5b506109ab565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c69190611e05565b6040518363ffffffff1660e01b81526004016108e3929190611cc2565b6020604051808303816000875af1158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611d17565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610966929190611e39565b6020604051808303816000875af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190611d17565b505b505050565b60006109ba611341565b33816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050888160400181815250508781606001818152505086816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508542610a4a9190611e62565b816080018181525050600286610a609190611e96565b42610a6b9190611e62565b8160a0018181525050848160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160e0018181525050600073ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff1603610b3957348160e0015114610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90611f62565b60405180910390fd5b610bc3565b8060c0015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308460e001516040518463ffffffff1660e01b8152600401610b7e93929190611f82565b6020604051808303816000875af1158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190611d17565b505b8281610100018181525050600081604051602001610be19190611a6e565b60405160208183030381529060405280519060200120905060006003811115610c0d57610c0c6118bb565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610c3f57610c3e6118bb565b5b14610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612005565b60405180910390fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818b8b85608001518660a001518760c001518860e00151604051610cca9796959493929190612025565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610d0857610d076118bb565b5b02179055508092505050979650505050505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610d7957610d78612094565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610dbc9493929190612153565b6020604051602081039080840390855afa158015610dde573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610e559190611a6e565b60405160208183030381529060405280519060200120905060016003811115610e8157610e806118bb565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610eb357610eb26118bb565b5b14610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea906121e4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90612276565b60405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff02191690836003811115610f9b57610f9a6118bb565b5b02179055507f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f81604051610fcf9190611833565b60405180910390a15050565b610feb8260001c8260001c610d1d565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190612308565b60405180910390fd5b5050565b6000826040516020016110419190611a6e565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff16905060006003811115611091576110906118bb565b5b8160038111156110a4576110a36118bb565b5b036110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90612374565b60405180910390fd5b6003808111156110f7576110f66118bb565b5b81600381111561110a576111096118bb565b5b0361114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190611ae7565b60405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff1661116d611307565b73ffffffffffffffffffffffffffffffffffffffff16146111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba906123e0565b60405180910390fd5b8360800151421015806111fa5750600260038111156111e5576111e46118bb565b5b8160038111156111f8576111f76118bb565b5b145b611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061244c565b60405180910390fd5b8360a00151421061127f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611276906124b8565b60405180910390fd5b61128d838560400151610fdb565b7f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee82846040516112be929190611c2b565b60405180910390a1600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156112fc576112fb6118bb565b5b021790555050505050565b6000611312336105e3565b1561132657601436033560601c9050611335565b61132e611339565b9050611336565b5b90565b600033905090565b604051806101200160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600080191681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611432826113e9565b810181811067ffffffffffffffff82111715611451576114506113fa565b5b80604052505050565b60006114646113d5565b90506114708282611429565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114a082611475565b9050919050565b6114b081611495565b81146114bb57600080fd5b50565b6000813590506114cd816114a7565b92915050565b6000819050919050565b6114e6816114d3565b81146114f157600080fd5b50565b600081359050611503816114dd565b92915050565b6000819050919050565b61151c81611509565b811461152757600080fd5b50565b60008135905061153981611513565b92915050565b600061154a82611475565b9050919050565b61155a8161153f565b811461156557600080fd5b50565b60008135905061157781611551565b92915050565b60006101208284031215611594576115936113e4565b5b61159f61012061145a565b905060006115af848285016114be565b60008301525060206115c3848285016114be565b60208301525060406115d7848285016114f4565b60408301525060606115eb848285016114f4565b60608301525060806115ff8482850161152a565b60808301525060a06116138482850161152a565b60a08301525060c061162784828501611568565b60c08301525060e061163b8482850161152a565b60e0830152506101006116508482850161152a565b6101008301525092915050565b6000806101408385031215611675576116746113df565b5b60006116838582860161157d565b925050610120611695858286016114f4565b9150509250929050565b6116a88161153f565b82525050565b60006020820190506116c3600083018461169f565b92915050565b6000602082840312156116df576116de6113df565b5b60006116ed84828501611568565b91505092915050565b60008115159050919050565b61170b816116f6565b82525050565b60006020820190506117266000830184611702565b92915050565b60008060006101608486031215611746576117456113df565b5b60006117548682870161157d565b935050610120611766868287016114f4565b9250506101406117788682870161152a565b9150509250925092565b600080600080600080600060e0888a0312156117a1576117a06113df565b5b60006117af8a828b016114f4565b97505060206117c08a828b016114f4565b96505060406117d18a828b016114be565b95505060606117e28a828b0161152a565b94505060806117f38a828b01611568565b93505060a06118048a828b0161152a565b92505060c06118158a828b0161152a565b91505092959891949750929550565b61182d816114d3565b82525050565b60006020820190506118486000830184611824565b92915050565b60008060408385031215611865576118646113df565b5b60006118738582860161152a565b92505060206118848582860161152a565b9150509250929050565b6000602082840312156118a4576118a36113df565b5b60006118b2848285016114f4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118fb576118fa6118bb565b5b50565b600081905061190c826118ea565b919050565b600061191c826118fe565b9050919050565b61192c81611911565b82525050565b60006020820190506119476000830184611923565b92915050565b60006101208284031215611964576119636113df565b5b60006119728482850161157d565b91505092915050565b61198481611495565b82525050565b611993816114d3565b82525050565b6119a281611509565b82525050565b6119b18161153f565b82525050565b610120820160008201516119ce600085018261197b565b5060208201516119e1602085018261197b565b5060408201516119f4604085018261198a565b506060820151611a07606085018261198a565b506080820151611a1a6080850182611999565b5060a0820151611a2d60a0850182611999565b5060c0820151611a4060c08501826119a8565b5060e0820151611a5360e0850182611999565b50610100820151611a68610100850182611999565b50505050565b600061012082019050611a8460008301846119b7565b92915050565b600082825260208201905092915050565b7f7377617020697320616c726561647920636f6d706c6574656400000000000000600082015250565b6000611ad1601983611a8a565b9150611adc82611a9b565b602082019050919050565b60006020820190508181036000830152611b0081611ac4565b9050919050565b7f726566756e64206d7573742062652063616c6c6564206279207468652073776160008201527f70206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000611b63602783611a8a565b9150611b6e82611b07565b604082019050919050565b60006020820190508181036000830152611b9281611b56565b9050919050565b7f697427732074686520636f756e74657270617274792773207475726e2c20756e60008201527f61626c6520746f20726566756e642c2074727920616761696e206c6174657200602082015250565b6000611bf5603f83611a8a565b9150611c0082611b99565b604082019050919050565b60006020820190508181036000830152611c2481611be8565b9050919050565b6000604082019050611c406000830185611824565b611c4d6020830184611824565b9392505050565b6000819050919050565b6000611c79611c74611c6f84611475565b611c54565b611475565b9050919050565b6000611c8b82611c5e565b9050919050565b6000611c9d82611c80565b9050919050565b611cad81611c92565b82525050565b611cbc81611509565b82525050565b6000604082019050611cd76000830185611ca4565b611ce46020830184611cb3565b9392505050565b611cf4816116f6565b8114611cff57600080fd5b50565b600081519050611d1181611ceb565b92915050565b600060208284031215611d2d57611d2c6113df565b5b6000611d3b84828501611d02565b91505092915050565b7f636c61696d52656c617965722063616e206f6e6c792062652063616c6c65642060008201527f62792061207472757374656420666f7277617264657200000000000000000000602082015250565b6000611da0603683611a8a565b9150611dab82611d44565b604082019050919050565b60006020820190508181036000830152611dcf81611d93565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e1082611509565b9150611e1b83611509565b9250828203905081811115611e3357611e32611dd6565b5b92915050565b6000604082019050611e4e600083018561169f565b611e5b6020830184611cb3565b9392505050565b6000611e6d82611509565b9150611e7883611509565b9250828201905080821115611e9057611e8f611dd6565b5b92915050565b6000611ea182611509565b9150611eac83611509565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ee557611ee4611dd6565b5b828202905092915050565b7f76616c7565206e6f742073616d652061732045544820616d6f756e742073656e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f4c602183611a8a565b9150611f5782611ef0565b604082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b6000606082019050611f97600083018661169f565b611fa4602083018561169f565b611fb16040830184611cb3565b949350505050565b7f7377617020616c72656164792065786973747300000000000000000000000000600082015250565b6000611fef601383611a8a565b9150611ffa82611fb9565b602082019050919050565b6000602082019050818103600083015261201e81611fe2565b9050919050565b600060e08201905061203a600083018a611824565b6120476020830189611824565b6120546040830188611824565b6120616060830187611cb3565b61206e6080830186611cb3565b61207b60a083018561169f565b61208860c0830184611cb3565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b60006120f56120f06120eb846120c3565b6120cd565b6114d3565b9050919050565b612105816120da565b82525050565b6000819050919050565b600060ff82169050919050565b600061213d6121386121338461210b565b611c54565b612115565b9050919050565b61214d81612122565b82525050565b600060808201905061216860008301876120fc565b6121756020830186612144565b6121826040830185611824565b61218f6060830184611824565b95945050505050565b7f73776170206973206e6f7420696e2050454e44494e4720737461746500000000600082015250565b60006121ce601c83611a8a565b91506121d982612198565b602082019050919050565b600060208201905081810360008301526121fd816121c1565b9050919050565b7f6f6e6c79207468652073776170206f776e65722063616e2063616c6c2073657460008201527f5265616479000000000000000000000000000000000000000000000000000000602082015250565b6000612260602583611a8a565b915061226b82612204565b604082019050919050565b6000602082019050818103600083015261228f81612253565b9050919050565b7f70726f76696465642073656372657420646f6573206e6f74206d61746368207460008201527f6865206578706563746564207075626c6963206b657900000000000000000000602082015250565b60006122f2603683611a8a565b91506122fd82612296565b604082019050919050565b60006020820190508181036000830152612321816122e5565b9050919050565b7f696e76616c696420737761700000000000000000000000000000000000000000600082015250565b600061235e600c83611a8a565b915061236982612328565b602082019050919050565b6000602082019050818103600083015261238d81612351565b9050919050565b7f6f6e6c7920636c61696d65722063616e20636c61696d21000000000000000000600082015250565b60006123ca601783611a8a565b91506123d582612394565b602082019050919050565b600060208201905081810360008301526123f9816123bd565b9050919050565b7f746f6f206561726c7920746f20636c61696d2100000000000000000000000000600082015250565b6000612436601383611a8a565b915061244182612400565b602082019050919050565b6000602082019050818103600083015261246581612429565b9050919050565b7f746f6f206c61746520746f20636c61696d210000000000000000000000000000600082015250565b60006124a2601283611a8a565b91506124ad8261246c565b602082019050919050565b600060208201905081810360008301526124d181612495565b905091905056fea26469706673582212200663998a26c938854973c70e61e8de31cf4fe9d561fbd9333791a16650f8cf8c64736f6c63430008100033", } // SwapFactoryABI is the input ABI used to generate the binding from. @@ -659,7 +659,7 @@ type SwapFactoryNew struct { // FilterNew is a free log retrieval operation binding the contract event 0x91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56. // -// Solidity: event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout_0, uint256 timeout_1, address asset, uint256 value) +// Solidity: event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout0, uint256 timeout1, address asset, uint256 value) func (_SwapFactory *SwapFactoryFilterer) FilterNew(opts *bind.FilterOpts) (*SwapFactoryNewIterator, error) { logs, sub, err := _SwapFactory.contract.FilterLogs(opts, "New") @@ -671,7 +671,7 @@ func (_SwapFactory *SwapFactoryFilterer) FilterNew(opts *bind.FilterOpts) (*Swap // WatchNew is a free log subscription operation binding the contract event 0x91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56. // -// Solidity: event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout_0, uint256 timeout_1, address asset, uint256 value) +// Solidity: event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout0, uint256 timeout1, address asset, uint256 value) func (_SwapFactory *SwapFactoryFilterer) WatchNew(opts *bind.WatchOpts, sink chan<- *SwapFactoryNew) (event.Subscription, error) { logs, sub, err := _SwapFactory.contract.WatchLogs(opts, "New") @@ -708,7 +708,7 @@ func (_SwapFactory *SwapFactoryFilterer) WatchNew(opts *bind.WatchOpts, sink cha // ParseNew is a log parse operation binding the contract event 0x91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56. // -// Solidity: event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout_0, uint256 timeout_1, address asset, uint256 value) +// Solidity: event New(bytes32 swapID, bytes32 claimKey, bytes32 refundKey, uint256 timeout0, uint256 timeout1, address asset, uint256 value) func (_SwapFactory *SwapFactoryFilterer) ParseNew(log types.Log) (*SwapFactoryNew, error) { event := new(SwapFactoryNew) if err := _SwapFactory.contract.UnpackLog(event, "New", log); err != nil { diff --git a/go.mod b/go.mod index 3a08b8dc..5a876365 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,13 @@ module github.com/athanorlabs/atomic-swap -go 1.18 +go 1.19 require ( filippo.io/edwards25519 v1.0.0 github.com/AthanorLabs/go-relayer v0.0.0-20221022234503-174bb7b32389 github.com/AthanorLabs/go-relayer-client v0.0.0-20220929181539-02b89bc5e882 github.com/ChainSafe/chaindb v0.1.5-0.20221010190531-f900218c88f8 - github.com/MarinX/monerorpc v1.0.4 + github.com/MarinX/monerorpc v1.0.5 github.com/athanorlabs/cgo-dleq v0.0.0-20220929204103-ca62cc9baa28 github.com/btcsuite/btcd/btcutil v1.1.2 github.com/chyeh/pubip v0.0.0-20170203095919-b7e679cf541c diff --git a/go.sum b/go.sum index 0cd6ef1f..51d2de47 100644 --- a/go.sum +++ b/go.sum @@ -55,10 +55,10 @@ github.com/ChainSafe/log15 v1.0.0 h1:vRDVtWtVwIH5uSCBvgTTZh6FA58UBJ6+QiiypaZfBf8 github.com/ChainSafe/log15 v1.0.0/go.mod h1:5v1+ALHtdW0NfAeeoYyKmzCAMcAeqkdhIg4uxXWIgOg= github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/MarinX/monerorpc v1.0.3 h1:ZVxOyZn609yp+Xn1I6G38WgsvCxSrWqJ5JE1qtwq5Rw= -github.com/MarinX/monerorpc v1.0.3/go.mod h1:NohAIf5kJ4pS0sO9mbEQkI1dLHuxd4L0DX2Zou0Yofo= github.com/MarinX/monerorpc v1.0.4 h1:p1ui0bD8s7tdC1zbFy3UacwDCyBo5wCMa1aVfDPAgxI= github.com/MarinX/monerorpc v1.0.4/go.mod h1:NohAIf5kJ4pS0sO9mbEQkI1dLHuxd4L0DX2Zou0Yofo= +github.com/MarinX/monerorpc v1.0.5 h1:3brpRWTLngzjlAGprmLWuAY16QCSiwokoaGdpu+/ukc= +github.com/MarinX/monerorpc v1.0.5/go.mod h1:NohAIf5kJ4pS0sO9mbEQkI1dLHuxd4L0DX2Zou0Yofo= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=