From 75c56263ac13ecbb860877e552e1925fc366c9d0 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 28 Nov 2024 15:35:01 +0100 Subject: [PATCH 1/8] wip: compact --- .../solvers/compact/contracts/EcoAdapter.json | 386 ++++++++++++++++++ .../compact/contracts/HyperProver.json | 166 ++++++++ .../compact/contracts/IntentSource.json | 246 +++++++++++ typescript/solver/solvers/compact/filler.ts | 216 ++++++++++ typescript/solver/solvers/compact/index.ts | 2 + typescript/solver/solvers/compact/listener.ts | 66 +++ .../solver/solvers/compact/metadata.yaml | 9 + typescript/solver/solvers/compact/types.ts | 15 + typescript/solver/solvers/compact/utils.ts | 127 ++++++ 9 files changed, 1233 insertions(+) create mode 100644 typescript/solver/solvers/compact/contracts/EcoAdapter.json create mode 100644 typescript/solver/solvers/compact/contracts/HyperProver.json create mode 100644 typescript/solver/solvers/compact/contracts/IntentSource.json create mode 100644 typescript/solver/solvers/compact/filler.ts create mode 100644 typescript/solver/solvers/compact/index.ts create mode 100644 typescript/solver/solvers/compact/listener.ts create mode 100644 typescript/solver/solvers/compact/metadata.yaml create mode 100644 typescript/solver/solvers/compact/types.ts create mode 100644 typescript/solver/solvers/compact/utils.ts diff --git a/typescript/solver/solvers/compact/contracts/EcoAdapter.json b/typescript/solver/solvers/compact/contracts/EcoAdapter.json new file mode 100644 index 00000000..881d4250 --- /dev/null +++ b/typescript/solver/solvers/compact/contracts/EcoAdapter.json @@ -0,0 +1,386 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { "name": "_owner", "type": "address", "internalType": "address" }, + { "name": "_inbox", "type": "address", "internalType": "address" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "fetchFee", + "inputs": [ + { + "name": "_sourceChainID", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "_hashes", "type": "bytes32[]", "internalType": "bytes32[]" }, + { + "name": "_claimants", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "_prover", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "fee", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "fulfillHyperInstant", + "inputs": [ + { + "name": "_sourceChainID", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_targets", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "_data", "type": "bytes[]", "internalType": "bytes[]" }, + { "name": "_expiryTime", "type": "uint256", "internalType": "uint256" }, + { "name": "_nonce", "type": "bytes32", "internalType": "bytes32" }, + { "name": "_claimant", "type": "address", "internalType": "address" }, + { + "name": "_expectedHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { "name": "_prover", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bytes[]", "internalType": "bytes[]" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "inbox", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "contract IInbox" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTransfer", + "inputs": [{ "name": "_data", "type": "bytes", "internalType": "bytes" }], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "InvalidFunctionSelector", "inputs": [] } + ], + "bytecode": { + "object": "0x608060405234801561000f575f80fd5b5060405161143a38038061143a83398101604081905261002e916100d0565b61003733610066565b61004082610066565b600180546001600160a01b0319166001600160a01b039290921691909117905550610101565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100cb575f80fd5b919050565b5f80604083850312156100e1575f80fd5b6100ea836100b5565b91506100f8602084016100b5565b90509250929050565b61132c8061010e5f395ff3fe60806040526004361061006e575f3560e01c8063af8a08d91161004c578063af8a08d914610104578063f02aed1d14610133578063f2fde38b14610153578063fb0e722b14610172575f80fd5b806352130b4014610072578063715018a6146100a45780638da5cb5b146100ba575b5f80fd5b34801561007d575f80fd5b5061009161008c366004610b23565b61019e565b6040519081526020015b60405180910390f35b3480156100af575f80fd5b506100b861026b565b005b3480156100c5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009b565b34801561010f575f80fd5b5061012361011e366004610bf1565b61027e565b604051901515815260200161009b565b610146610141366004610ca5565b6102e7565b60405161009b9190610da7565b34801561015e575f80fd5b506100b861016d366004610e27565b6104a6565b34801561017d575f80fd5b506001546100df9073ffffffffffffffffffffffffffffffffffffffff1681565b5f8084846040516020016101b3929190610e49565b60408051808303601f19018152908290526001547fc1fc9d2e00000000000000000000000000000000000000000000000000000000835290925073ffffffffffffffffffffffffffffffffffffffff8581169291169063c1fc9d2e90610221908a9086908690600401610ed8565b602060405180830381865afa15801561023c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102609190610f00565b979650505050505050565b610273610562565b61027c5f6105e2565b565b5f8061028d6004828587610f17565b81019061029a9190610f3e565b7fffffffff00000000000000000000000000000000000000000000000000000000167fa9059cbb000000000000000000000000000000000000000000000000000000001491505092915050565b60606102f1610562565b5f8a8a5f81811061030457610304610f7d565b90506020020160208101906103199190610e27565b905061034289895f81811061033057610330610f7d565b905060200281019061011e9190610faa565b610378576040517f42868c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f89895f81811061038b5761038b610f7d565b905060200281019061039d9190610faa565b6103ab916004908290610f17565b8101906103b8919061100b565b6001549092506103e5915073ffffffffffffffffffffffffffffffffffffffff8481169133911684610656565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f02aed1d348f8f8f8f8f8f8f8f8f8f6040518c63ffffffff1660e01b81526004016104529a99989796959493929190611100565b5f6040518083038185885af115801561046d573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f1916820160405261049591908101906111d9565b9d9c50505050505050505050505050565b6104ae610562565b73ffffffffffffffffffffffffffffffffffffffff8116610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61055f816105e2565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461027c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526106eb9085906106f1565b50505050565b5f610752826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166108039092919063ffffffff16565b905080515f148061077257508080602001905181019061077291906112d3565b6107fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161054d565b505050565b606061081184845f85610819565b949350505050565b6060824710156108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161054d565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516108d391906112f2565b5f6040518083038185875af1925050503d805f811461090d576040519150601f19603f3d011682016040523d82523d5f602084013e610912565b606091505b509150915061026087838387606083156109b35782515f036109ac5773ffffffffffffffffffffffffffffffffffffffff85163b6109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054d565b5081610811565b61081183838151156109c85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d919061130d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a5257610a526109fc565b604052919050565b5f67ffffffffffffffff821115610a7357610a736109fc565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055f575f80fd5b8035610aa981610a7d565b919050565b5f82601f830112610abd575f80fd5b81356020610ad2610acd83610a5a565b610a29565b8083825260208201915060208460051b870101935086841115610af3575f80fd5b602086015b84811015610b18578035610b0b81610a7d565b8352918301918301610af8565b509695505050505050565b5f805f8060808587031215610b36575f80fd5b8435935060208086013567ffffffffffffffff80821115610b55575f80fd5b818801915088601f830112610b68575f80fd5b8135610b76610acd82610a5a565b81815260059190911b8301840190848101908b831115610b94575f80fd5b938501935b82851015610bb257843582529385019390850190610b99565b975050506040880135925080831115610bc9575f80fd5b5050610bd787828801610aae565b925050610be660608601610a9e565b905092959194509250565b5f8060208385031215610c02575f80fd5b823567ffffffffffffffff80821115610c19575f80fd5b818501915085601f830112610c2c575f80fd5b813581811115610c3a575f80fd5b866020828501011115610c4b575f80fd5b60209290920196919550909350505050565b5f8083601f840112610c6d575f80fd5b50813567ffffffffffffffff811115610c84575f80fd5b6020830191508360208260051b8501011115610c9e575f80fd5b9250929050565b5f805f805f805f805f806101008b8d031215610cbf575f80fd5b8a35995060208b013567ffffffffffffffff80821115610cdd575f80fd5b610ce98e838f01610c5d565b909b50995060408d0135915080821115610d01575f80fd5b50610d0e8d828e01610c5d565b90985096505060608b0135945060808b0135935060a08b0135610d3081610a7d565b925060c08b0135915060e08b0135610d4781610a7d565b809150509295989b9194979a5092959850565b5f5b83811015610d74578181015183820152602001610d5c565b50505f910152565b5f8151808452610d93816020860160208601610d5a565b601f01601f19169290920160200192915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015610e1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610e08858351610d7c565b94509285019290850190600101610dce565b5092979650505050505050565b5f60208284031215610e37575f80fd5b8135610e4281610a7d565b9392505050565b604080825283519082018190525f906020906060840190828701845b82811015610e8157815184529284019290840190600101610e65565b505050838103828501528451808252858301918301905f5b81811015610ecb57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610e99565b5090979650505050505050565b838152606060208201525f610ef06060830185610d7c565b9050826040830152949350505050565b5f60208284031215610f10575f80fd5b5051919050565b5f8085851115610f25575f80fd5b83861115610f31575f80fd5b5050820193919092039150565b5f60208284031215610f4e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e42575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610fdd575f80fd5b83018035915067ffffffffffffffff821115610ff7575f80fd5b602001915036819003821315610c9e575f80fd5b5f806040838503121561101c575f80fd5b823561102781610a7d565b946020939093013593505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b5f838385526020808601955060208560051b830101845f5b87811015610ecb57601f1985840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126110b8575f80fd5b8701848101903567ffffffffffffffff8111156110d3575f80fd5b8036038213156110e1575f80fd5b6110ec858284611035565b9a86019a9450505090830190600101611076565b8a815261010060208083018290529082018a90525f906101208301908c90835b8d81101561115b57823561113381610a7d565b73ffffffffffffffffffffffffffffffffffffffff1684529281019291810191600101611120565b5050508281036040840152611171818a8c61105e565b9150508660608301528560808301526111a260a083018673ffffffffffffffffffffffffffffffffffffffff169052565b8360c08301526111ca60e083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b5f60208083850312156111ea575f80fd5b825167ffffffffffffffff80821115611201575f80fd5b8185019150601f86601f840112611216575f80fd5b8251611224610acd82610a5a565b81815260059190911b84018501908581019089831115611242575f80fd5b8686015b838110156112c55780518681111561125c575f80fd5b8701603f81018c1361126c575f80fd5b88810151604088821115611282576112826109fc565b6112938b601f198a85011601610a29565b8281528e828486010111156112a6575f80fd5b6112b5838d8301848701610d5a565b8652505050918701918701611246565b509998505050505050505050565b5f602082840312156112e3575f80fd5b81518015158114610e42575f80fd5b5f8251611303818460208701610d5a565b9190910192915050565b602081525f610e426020830184610d7c56fea164736f6c6343000819000a", + "sourceMap": "396:1640:154:-:0;;;563:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:28;734:10:43;936:18:28;:32::i;:::-;617:26:154;636:6;617:18;:26::i;:::-;653:5;:22;;-1:-1:-1;;;;;;653:22:154;-1:-1:-1;;;;;653:22:154;;;;;;;;;;-1:-1:-1;396:1640:154;;2426:187:28;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:28;;;-1:-1:-1;;;;;;2534:17:28;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:177:161:-;93:13;;-1:-1:-1;;;;;135:31:161;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;:::-;396:1640:154;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061006e575f3560e01c8063af8a08d91161004c578063af8a08d914610104578063f02aed1d14610133578063f2fde38b14610153578063fb0e722b14610172575f80fd5b806352130b4014610072578063715018a6146100a45780638da5cb5b146100ba575b5f80fd5b34801561007d575f80fd5b5061009161008c366004610b23565b61019e565b6040519081526020015b60405180910390f35b3480156100af575f80fd5b506100b861026b565b005b3480156100c5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009b565b34801561010f575f80fd5b5061012361011e366004610bf1565b61027e565b604051901515815260200161009b565b610146610141366004610ca5565b6102e7565b60405161009b9190610da7565b34801561015e575f80fd5b506100b861016d366004610e27565b6104a6565b34801561017d575f80fd5b506001546100df9073ffffffffffffffffffffffffffffffffffffffff1681565b5f8084846040516020016101b3929190610e49565b60408051808303601f19018152908290526001547fc1fc9d2e00000000000000000000000000000000000000000000000000000000835290925073ffffffffffffffffffffffffffffffffffffffff8581169291169063c1fc9d2e90610221908a9086908690600401610ed8565b602060405180830381865afa15801561023c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102609190610f00565b979650505050505050565b610273610562565b61027c5f6105e2565b565b5f8061028d6004828587610f17565b81019061029a9190610f3e565b7fffffffff00000000000000000000000000000000000000000000000000000000167fa9059cbb000000000000000000000000000000000000000000000000000000001491505092915050565b60606102f1610562565b5f8a8a5f81811061030457610304610f7d565b90506020020160208101906103199190610e27565b905061034289895f81811061033057610330610f7d565b905060200281019061011e9190610faa565b610378576040517f42868c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f89895f81811061038b5761038b610f7d565b905060200281019061039d9190610faa565b6103ab916004908290610f17565b8101906103b8919061100b565b6001549092506103e5915073ffffffffffffffffffffffffffffffffffffffff8481169133911684610656565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f02aed1d348f8f8f8f8f8f8f8f8f8f6040518c63ffffffff1660e01b81526004016104529a99989796959493929190611100565b5f6040518083038185885af115801561046d573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f1916820160405261049591908101906111d9565b9d9c50505050505050505050505050565b6104ae610562565b73ffffffffffffffffffffffffffffffffffffffff8116610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61055f816105e2565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461027c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526106eb9085906106f1565b50505050565b5f610752826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166108039092919063ffffffff16565b905080515f148061077257508080602001905181019061077291906112d3565b6107fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161054d565b505050565b606061081184845f85610819565b949350505050565b6060824710156108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161054d565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516108d391906112f2565b5f6040518083038185875af1925050503d805f811461090d576040519150601f19603f3d011682016040523d82523d5f602084013e610912565b606091505b509150915061026087838387606083156109b35782515f036109ac5773ffffffffffffffffffffffffffffffffffffffff85163b6109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054d565b5081610811565b61081183838151156109c85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d919061130d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a5257610a526109fc565b604052919050565b5f67ffffffffffffffff821115610a7357610a736109fc565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055f575f80fd5b8035610aa981610a7d565b919050565b5f82601f830112610abd575f80fd5b81356020610ad2610acd83610a5a565b610a29565b8083825260208201915060208460051b870101935086841115610af3575f80fd5b602086015b84811015610b18578035610b0b81610a7d565b8352918301918301610af8565b509695505050505050565b5f805f8060808587031215610b36575f80fd5b8435935060208086013567ffffffffffffffff80821115610b55575f80fd5b818801915088601f830112610b68575f80fd5b8135610b76610acd82610a5a565b81815260059190911b8301840190848101908b831115610b94575f80fd5b938501935b82851015610bb257843582529385019390850190610b99565b975050506040880135925080831115610bc9575f80fd5b5050610bd787828801610aae565b925050610be660608601610a9e565b905092959194509250565b5f8060208385031215610c02575f80fd5b823567ffffffffffffffff80821115610c19575f80fd5b818501915085601f830112610c2c575f80fd5b813581811115610c3a575f80fd5b866020828501011115610c4b575f80fd5b60209290920196919550909350505050565b5f8083601f840112610c6d575f80fd5b50813567ffffffffffffffff811115610c84575f80fd5b6020830191508360208260051b8501011115610c9e575f80fd5b9250929050565b5f805f805f805f805f806101008b8d031215610cbf575f80fd5b8a35995060208b013567ffffffffffffffff80821115610cdd575f80fd5b610ce98e838f01610c5d565b909b50995060408d0135915080821115610d01575f80fd5b50610d0e8d828e01610c5d565b90985096505060608b0135945060808b0135935060a08b0135610d3081610a7d565b925060c08b0135915060e08b0135610d4781610a7d565b809150509295989b9194979a5092959850565b5f5b83811015610d74578181015183820152602001610d5c565b50505f910152565b5f8151808452610d93816020860160208601610d5a565b601f01601f19169290920160200192915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015610e1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610e08858351610d7c565b94509285019290850190600101610dce565b5092979650505050505050565b5f60208284031215610e37575f80fd5b8135610e4281610a7d565b9392505050565b604080825283519082018190525f906020906060840190828701845b82811015610e8157815184529284019290840190600101610e65565b505050838103828501528451808252858301918301905f5b81811015610ecb57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610e99565b5090979650505050505050565b838152606060208201525f610ef06060830185610d7c565b9050826040830152949350505050565b5f60208284031215610f10575f80fd5b5051919050565b5f8085851115610f25575f80fd5b83861115610f31575f80fd5b5050820193919092039150565b5f60208284031215610f4e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e42575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610fdd575f80fd5b83018035915067ffffffffffffffff821115610ff7575f80fd5b602001915036819003821315610c9e575f80fd5b5f806040838503121561101c575f80fd5b823561102781610a7d565b946020939093013593505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b5f838385526020808601955060208560051b830101845f5b87811015610ecb57601f1985840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126110b8575f80fd5b8701848101903567ffffffffffffffff8111156110d3575f80fd5b8036038213156110e1575f80fd5b6110ec858284611035565b9a86019a9450505090830190600101611076565b8a815261010060208083018290529082018a90525f906101208301908c90835b8d81101561115b57823561113381610a7d565b73ffffffffffffffffffffffffffffffffffffffff1684529281019291810191600101611120565b5050508281036040840152611171818a8c61105e565b9150508660608301528560808301526111a260a083018673ffffffffffffffffffffffffffffffffffffffff169052565b8360c08301526111ca60e083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b5f60208083850312156111ea575f80fd5b825167ffffffffffffffff80821115611201575f80fd5b8185019150601f86601f840112611216575f80fd5b8251611224610acd82610a5a565b81815260059190911b84018501908581019089831115611242575f80fd5b8686015b838110156112c55780518681111561125c575f80fd5b8701603f81018c1361126c575f80fd5b88810151604088821115611282576112826109fc565b6112938b601f198a85011601610a29565b8281528e828486010111156112a6575f80fd5b6112b5838d8301848701610d5a565b8652505050918701918701611246565b509998505050505050505050565b5f602082840312156112e3575f80fd5b81518015158114610e42575f80fd5b5f8251611303818460208701610d5a565b9190910192915050565b602081525f610e426020830184610d7c56fea164736f6c6343000819000a", + "sourceMap": "396:1640:154:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1685:349;;;;;;;;;;-1:-1:-1;1685:349:154;;;;;:::i;:::-;;:::i;:::-;;;3208:25:161;;;3196:2;3181:18;1685:349:154;;;;;;;;1824:101:28;;;;;;;;;;;;;:::i;:::-;;1201:85;;;;;;;;;;-1:-1:-1;1247:7:28;1273:6;;;1201:85;;;3552:42:161;3540:55;;;3522:74;;3510:2;3495:18;1201:85:28;3376:226:161;1475:204:154;;;;;;;;;;-1:-1:-1;1475:204:154;;;;;:::i;:::-;;:::i;:::-;;;4368:14:161;;4361:22;4343:41;;4331:2;4316:18;1475:204:154;4203:187:161;688:781:154;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2074:198:28:-;;;;;;;;;;-1:-1:-1;2074:198:28;;;;;:::i;:::-;;:::i;499:19:154:-;;;;;;;;;;-1:-1:-1;499:19:154;;;;;;;;1685:349;1820:11;1843:24;1881:7;1890:10;1870:31;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;1870:31:154;;;;;;;1973:5;;:54;;;1870:31;;-1:-1:-1;1931:24:154;;;;;1973:5;;;:14;;:54;;1988:14;;1870:31;;1931:24;;1973:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1967:60;1685:349;-1:-1:-1;;;;;;;1685:349:154:o;1824:101:28:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1475:204:154:-;1538:4;;1591:9;1598:1;1538:4;1591:5;;:9;:::i;:::-;1580:31;;;;;;;:::i;:::-;1628:44;;1648:24;1628:44;;-1:-1:-1;;1475:204:154;;;;:::o;688:781::-;1012:14;1094:13:28;:11;:13::i;:::-;1038:14:154::1;1055:8;;1064:1;1055:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;1038:28;;1082:20;1093:5;;1099:1;1093:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;1082:20::-;1077:59;;1111:25;;;;;;;;;;;;;;1077:59;1150:14;1179:5;;1185:1;1179:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:12;::::0;1188:1:::1;::::0;1179:12;;::::1;:::i;:::-;1168:44;;;;;;;:::i;:::-;1275:5;::::0;1147:65;;-1:-1:-1;1223:67:154::1;::::0;-1:-1:-1;1275:5:154::1;1223:31:::0;;::::1;::::0;1255:10:::1;::::0;1275:5:::1;1147:65:::0;1223:31:::1;:67::i;:::-;1308:5;;;;;;;;;;;:25;;;1341:9;1365:14;1381:8;;1391:5;;1398:11;1411:6;1419:9;1430:13;1445:7;1308:154;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1308:154:154::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1301:161:::0;688:781;-1:-1:-1;;;;;;;;;;;;;688:781:154:o;2074:198:28:-;1094:13;:11;:13::i;:::-;2162:22:::1;::::0;::::1;2154:73;;;::::0;::::1;::::0;;16297:2:161;2154:73:28::1;::::0;::::1;16279:21:161::0;16336:2;16316:18;;;16309:30;16375:34;16355:18;;;16348:62;16446:8;16426:18;;;16419:36;16472:19;;2154:73:28::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1359:130::-;1247:7;1273:6;1422:23;1273:6;734:10:43;1422:23:28;1414:68;;;;;;;16704:2:161;1414:68:28;;;16686:21:161;;;16723:18;;;16716:30;16782:34;16762:18;;;16755:62;16834:18;;1414:68:28;16502:356:161;2426:187:28;2499:16;2518:6;;;2534:17;;;;;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;1355:203:41:-;1482:68;;;17075:42:161;17144:15;;;1482:68:41;;;17126:34:161;17196:15;;17176:18;;;17169:43;17228:18;;;;17221:34;;;1482:68:41;;;;;;;;;;17038:18:161;;;;1482:68:41;;;;;;;;;;1505:27;1482:68;;;1455:96;;1475:5;;1455:19;:96::i;:::-;1355:203;;;;:::o;5196:642::-;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;5641:27;;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;;;;17750:2:161;5720:111:41;;;17732:21:161;17789:2;17769:18;;;17762:30;17828:34;17808:18;;;17801:62;17899:12;17879:18;;;17872:40;17929:19;;5720:111:41;17548:406:161;5720:111:41;5266:572;5196:642;;:::o;4108:223:42:-;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4272:21;:52::i;:::-;4265:59;4108:223;-1:-1:-1;;;;4108:223:42:o;5165:446::-;5330:12;5387:5;5362:21;:30;;5354:81;;;;;;;18161:2:161;5354:81:42;;;18143:21:161;18200:2;18180:18;;;18173:30;18239:34;18219:18;;;18212:62;18310:8;18290:18;;;18283:36;18336:19;;5354:81:42;17959:402:161;5354:81:42;5446:12;5460:23;5487:6;:11;;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;7851;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;1702:19;;;;8113:60;;;;;;;18860:2:161;8113:60:42;;;18842:21:161;18899:2;18879:18;;;18872:30;18938:31;18918:18;;;18911:59;18987:18;;8113:60:42;18658:353:161;8113:60:42;-1:-1:-1;8208:10:42;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;;;;;;;;;;:::i;14:184:161:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:334;274:2;268:9;330:2;320:13;;-1:-1:-1;;316:86:161;304:99;;433:18;418:34;;454:22;;;415:62;412:88;;;480:18;;:::i;:::-;516:2;509:22;203:334;;-1:-1:-1;203:334:161:o;542:183::-;602:4;635:18;627:6;624:30;621:56;;;657:18;;:::i;:::-;-1:-1:-1;702:1:161;698:14;714:4;694:25;;542:183::o;730:154::-;816:42;809:5;805:54;798:5;795:65;785:93;;874:1;871;864:12;889:134;957:20;;986:31;957:20;986:31;:::i;:::-;889:134;;;:::o;1028:743::-;1082:5;1135:3;1128:4;1120:6;1116:17;1112:27;1102:55;;1153:1;1150;1143:12;1102:55;1189:6;1176:20;1215:4;1239:60;1255:43;1295:2;1255:43;:::i;:::-;1239:60;:::i;:::-;1321:3;1345:2;1340:3;1333:15;1373:4;1368:3;1364:14;1357:21;;1430:4;1424:2;1421:1;1417:10;1409:6;1405:23;1401:34;1387:48;;1458:3;1450:6;1447:15;1444:35;;;1475:1;1472;1465:12;1444:35;1511:4;1503:6;1499:17;1525:217;1541:6;1536:3;1533:15;1525:217;;;1621:3;1608:17;1638:31;1663:5;1638:31;:::i;:::-;1682:18;;1720:12;;;;1558;;1525:217;;;-1:-1:-1;1760:5:161;1028:743;-1:-1:-1;;;;;;1028:743:161:o;1776:1281::-;1912:6;1920;1928;1936;1989:3;1977:9;1968:7;1964:23;1960:33;1957:53;;;2006:1;2003;1996:12;1957:53;2042:9;2029:23;2019:33;;2071:2;2124;2113:9;2109:18;2096:32;2147:18;2188:2;2180:6;2177:14;2174:34;;;2204:1;2201;2194:12;2174:34;2242:6;2231:9;2227:22;2217:32;;2287:7;2280:4;2276:2;2272:13;2268:27;2258:55;;2309:1;2306;2299:12;2258:55;2345:2;2332:16;2368:60;2384:43;2424:2;2384:43;:::i;2368:60::-;2462:15;;;2544:1;2540:10;;;;2532:19;;2528:28;;;2493:12;;;;2568:19;;;2565:39;;;2600:1;2597;2590:12;2565:39;2624:11;;;;2644:142;2660:6;2655:3;2652:15;2644:142;;;2726:17;;2714:30;;2677:12;;;;2764;;;;2644:142;;;2805:5;-1:-1:-1;;;2863:2:161;2848:18;;2835:32;;-1:-1:-1;2879:16:161;;;2876:36;;;2908:1;2905;2898:12;2876:36;;;2931:63;2986:7;2975:8;2964:9;2960:24;2931:63;:::i;:::-;2921:73;;;3013:38;3047:2;3036:9;3032:18;3013:38;:::i;:::-;3003:48;;1776:1281;;;;;;;:::o;3607:591::-;3677:6;3685;3738:2;3726:9;3717:7;3713:23;3709:32;3706:52;;;3754:1;3751;3744:12;3706:52;3794:9;3781:23;3823:18;3864:2;3856:6;3853:14;3850:34;;;3880:1;3877;3870:12;3850:34;3918:6;3907:9;3903:22;3893:32;;3963:7;3956:4;3952:2;3948:13;3944:27;3934:55;;3985:1;3982;3975:12;3934:55;4025:2;4012:16;4051:2;4043:6;4040:14;4037:34;;;4067:1;4064;4057:12;4037:34;4112:7;4107:2;4098:6;4094:2;4090:15;4086:24;4083:37;4080:57;;;4133:1;4130;4123:12;4080:57;4164:2;4156:11;;;;;4186:6;;-1:-1:-1;3607:591:161;;-1:-1:-1;;;;3607:591:161:o;4395:367::-;4458:8;4468:6;4522:3;4515:4;4507:6;4503:17;4499:27;4489:55;;4540:1;4537;4530:12;4489:55;-1:-1:-1;4563:20:161;;4606:18;4595:30;;4592:50;;;4638:1;4635;4628:12;4592:50;4675:4;4667:6;4663:17;4651:29;;4735:3;4728:4;4718:6;4715:1;4711:14;4703:6;4699:27;4695:38;4692:47;4689:67;;;4752:1;4749;4742:12;4689:67;4395:367;;;;;:::o;4767:1337::-;4954:6;4962;4970;4978;4986;4994;5002;5010;5018;5026;5079:3;5067:9;5058:7;5054:23;5050:33;5047:53;;;5096:1;5093;5086:12;5047:53;5132:9;5119:23;5109:33;;5193:2;5182:9;5178:18;5165:32;5216:18;5257:2;5249:6;5246:14;5243:34;;;5273:1;5270;5263:12;5243:34;5312:70;5374:7;5365:6;5354:9;5350:22;5312:70;:::i;:::-;5401:8;;-1:-1:-1;5286:96:161;-1:-1:-1;5489:2:161;5474:18;;5461:32;;-1:-1:-1;5505:16:161;;;5502:36;;;5534:1;5531;5524:12;5502:36;;5573:72;5637:7;5626:8;5615:9;5611:24;5573:72;:::i;:::-;5664:8;;-1:-1:-1;5547:98:161;-1:-1:-1;;5746:2:161;5731:18;;5718:32;;-1:-1:-1;5797:3:161;5782:19;;5769:33;;-1:-1:-1;5852:3:161;5837:19;;5824:33;5866:31;5824:33;5866:31;:::i;:::-;5916:5;-1:-1:-1;5968:3:161;5953:19;;5940:33;;-1:-1:-1;6025:3:161;6010:19;;5997:33;6039;5997;6039;:::i;:::-;6091:7;6081:17;;;4767:1337;;;;;;;;;;;;;:::o;6109:250::-;6194:1;6204:113;6218:6;6215:1;6212:13;6204:113;;;6294:11;;;6288:18;6275:11;;;6268:39;6240:2;6233:10;6204:113;;;-1:-1:-1;;6351:1:161;6333:16;;6326:27;6109:250::o;6364:329::-;6405:3;6443:5;6437:12;6470:6;6465:3;6458:19;6486:76;6555:6;6548:4;6543:3;6539:14;6532:4;6525:5;6521:16;6486:76;:::i;:::-;6607:2;6595:15;-1:-1:-1;;6591:88:161;6582:98;;;;6682:4;6578:109;;6364:329;-1:-1:-1;;6364:329:161:o;6698:859::-;6858:4;6887:2;6927;6916:9;6912:18;6957:2;6946:9;6939:21;6980:6;7015;7009:13;7046:6;7038;7031:22;7084:2;7073:9;7069:18;7062:25;;7146:2;7136:6;7133:1;7129:14;7118:9;7114:30;7110:39;7096:53;;7184:2;7176:6;7172:15;7205:1;7215:313;7229:6;7226:1;7223:13;7215:313;;;7318:66;7306:9;7298:6;7294:22;7290:95;7285:3;7278:108;7409:39;7441:6;7432;7426:13;7409:39;:::i;:::-;7399:49;-1:-1:-1;7506:12:161;;;;7471:15;;;;7251:1;7244:9;7215:313;;;-1:-1:-1;7545:6:161;;6698:859;-1:-1:-1;;;;;;;6698:859:161:o;7562:247::-;7621:6;7674:2;7662:9;7653:7;7649:23;7645:32;7642:52;;;7690:1;7687;7680:12;7642:52;7729:9;7716:23;7748:31;7773:5;7748:31;:::i;:::-;7798:5;7562:247;-1:-1:-1;;;7562:247:161:o;8061:1201::-;8329:2;8341:21;;;8411:13;;8314:18;;;8433:22;;;8281:4;;8508;;8486:2;8471:18;;;8535:15;;;8281:4;8578:169;8592:6;8589:1;8586:13;8578:169;;;8653:13;;8641:26;;8687:12;;;;8722:15;;;;8614:1;8607:9;8578:169;;;-1:-1:-1;;;8783:19:161;;;8763:18;;;8756:47;8853:13;;8875:21;;;8951:15;;;;8914:12;;;8986:1;8996:238;9012:8;9007:3;9004:17;8996:238;;;9085:15;;9102:42;9081:64;9067:79;;9207:17;;;;9168:14;;;;9040:1;9031:11;8996:238;;;-1:-1:-1;9251:5:161;;8061:1201;-1:-1:-1;;;;;;;8061:1201:161:o;9267:359::-;9470:6;9459:9;9452:25;9513:2;9508;9497:9;9493:18;9486:30;9433:4;9533:44;9573:2;9562:9;9558:18;9550:6;9533:44;:::i;:::-;9525:52;;9613:6;9608:2;9597:9;9593:18;9586:34;9267:359;;;;;;:::o;9631:184::-;9701:6;9754:2;9742:9;9733:7;9729:23;9725:32;9722:52;;;9770:1;9767;9760:12;9722:52;-1:-1:-1;9793:16:161;;9631:184;-1:-1:-1;9631:184:161:o;9820:331::-;9925:9;9936;9978:8;9966:10;9963:24;9960:44;;;10000:1;9997;9990:12;9960:44;10029:6;10019:8;10016:20;10013:40;;;10049:1;10046;10039:12;10013:40;-1:-1:-1;;10075:23:161;;;10120:25;;;;;-1:-1:-1;9820:331:161:o;10156:332::-;10214:6;10267:2;10255:9;10246:7;10242:23;10238:32;10235:52;;;10283:1;10280;10273:12;10235:52;10322:9;10309:23;10372:66;10365:5;10361:78;10354:5;10351:89;10341:117;;10454:1;10451;10444:12;10493:184;10545:77;10542:1;10535:88;10642:4;10639:1;10632:15;10666:4;10663:1;10656:15;10682:580;10759:4;10765:6;10825:11;10812:25;10915:66;10904:8;10888:14;10884:29;10880:102;10860:18;10856:127;10846:155;;10997:1;10994;10987:12;10846:155;11024:33;;11076:20;;;-1:-1:-1;11119:18:161;11108:30;;11105:50;;;11151:1;11148;11141:12;11105:50;11184:4;11172:17;;-1:-1:-1;11215:14:161;11211:27;;;11201:38;;11198:58;;;11252:1;11249;11242:12;11267:323;11343:6;11351;11404:2;11392:9;11383:7;11379:23;11375:32;11372:52;;;11420:1;11417;11410:12;11372:52;11459:9;11446:23;11478:31;11503:5;11478:31;:::i;:::-;11528:5;11580:2;11565:18;;;;11552:32;;-1:-1:-1;;;11267:323:161:o;11595:325::-;11683:6;11678:3;11671:19;11735:6;11728:5;11721:4;11716:3;11712:14;11699:43;;11787:1;11780:4;11771:6;11766:3;11762:16;11758:27;11751:38;11653:3;11909:4;-1:-1:-1;;11834:2:161;11826:6;11822:15;11818:88;11813:3;11809:98;11805:109;11798:116;;11595:325;;;;:::o;11925:1165::-;12002:3;12033;12057:6;12052:3;12045:19;12083:4;12112;12107:3;12103:14;12096:21;;12170:4;12160:6;12157:1;12153:14;12146:5;12142:26;12138:37;12198:5;12221:1;12231:833;12245:6;12242:1;12239:13;12231:833;;;-1:-1:-1;;12320:5:161;12314:4;12310:16;12306:89;12301:3;12294:102;12448:6;12435:20;12534:66;12526:5;12510:14;12506:26;12502:99;12482:18;12478:124;12468:152;;12616:1;12613;12606:12;12468:152;12648:30;;12756:16;;;;12707:21;12801:18;12788:32;;12785:52;;;12833:1;12830;12823:12;12785:52;12886:8;12870:14;12866:29;12857:7;12853:43;12850:63;;;12909:1;12906;12899:12;12850:63;12934:50;12979:4;12969:8;12960:7;12934:50;:::i;:::-;13042:12;;;;12926:58;-1:-1:-1;;;13007:15:161;;;;12267:1;12260:9;12231:833;;13095:1431;13605:25;;;13552:3;13649:2;13667:18;;;13660:30;;;13578:18;;;13725:22;;;13523:4;;13778:3;13763:19;;;13805:6;;13523:4;13839:300;13853:6;13850:1;13847:13;13839:300;;;13928:6;13915:20;13948:31;13973:5;13948:31;:::i;:::-;14015:42;14004:54;13992:67;;14079:12;;;;14114:15;;;;13875:1;13868:9;13839:300;;;13843:3;;;14184:9;14179:3;14175:19;14170:2;14159:9;14155:18;14148:47;14212:65;14273:3;14265:6;14257;14212:65;:::i;:::-;14204:73;;;14313:6;14308:2;14297:9;14293:18;14286:34;14357:6;14351:3;14340:9;14336:19;14329:35;14373:47;14415:3;14404:9;14400:19;14392:6;3321:42;3310:54;3298:67;;3244:127;14373:47;14457:6;14451:3;14440:9;14436:19;14429:35;14473:47;14515:3;14504:9;14500:19;14492:6;3321:42;3310:54;3298:67;;3244:127;14473:47;13095:1431;;;;;;;;;;;;;:::o;14531:1559::-;14635:6;14666:2;14709;14697:9;14688:7;14684:23;14680:32;14677:52;;;14725:1;14722;14715:12;14677:52;14758:9;14752:16;14787:18;14828:2;14820:6;14817:14;14814:34;;;14844:1;14841;14834:12;14814:34;14882:6;14871:9;14867:22;14857:32;;14908:4;14950:7;14943:4;14939:2;14935:13;14931:27;14921:55;;14972:1;14969;14962:12;14921:55;15001:2;14995:9;15024:60;15040:43;15080:2;15040:43;:::i;15024:60::-;15118:15;;;15200:1;15196:10;;;;15188:19;;15184:28;;;15149:12;;;;15224:19;;;15221:39;;;15256:1;15253;15246:12;15221:39;15288:2;15284;15280:11;15300:760;15316:6;15311:3;15308:15;15300:760;;;15395:3;15389:10;15431:2;15418:11;15415:19;15412:39;;;15447:1;15444;15437:12;15412:39;15474:20;;15529:2;15521:11;;15517:25;-1:-1:-1;15507:53:161;;15556:1;15553;15546:12;15507:53;15597:2;15593;15589:11;15583:18;15624:2;15649;15645;15642:10;15639:36;;;15655:18;;:::i;:::-;15701:110;15807:2;-1:-1:-1;;15733:2:161;15729;15725:11;15721:84;15717:93;15701:110;:::i;:::-;15838:2;15831:5;15824:17;15882:7;15877:2;15872;15868;15864:11;15860:20;15857:33;15854:53;;;15903:1;15900;15893:12;15854:53;15920:67;15984:2;15979;15972:5;15968:14;15963:2;15959;15955:11;15920:67;:::i;:::-;16000:18;;-1:-1:-1;;;16038:12:161;;;;15333;;15300:760;;;-1:-1:-1;16079:5:161;14531:1559;-1:-1:-1;;;;;;;;;14531:1559:161:o;17266:277::-;17333:6;17386:2;17374:9;17365:7;17361:23;17357:32;17354:52;;;17402:1;17399;17392:12;17354:52;17434:9;17428:16;17487:5;17480:13;17473:21;17466:5;17463:32;17453:60;;17509:1;17506;17499:12;18366:287;18495:3;18533:6;18527:13;18549:66;18608:6;18603:3;18596:4;18588:6;18584:17;18549:66;:::i;:::-;18631:16;;;;;18366:287;-1:-1:-1;;18366:287:161:o;19016:219::-;19165:2;19154:9;19147:21;19128:4;19185:44;19225:2;19214:9;19210:18;19202:6;19185:44;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "fetchFee(uint256,bytes32[],address[],address)": "52130b40", + "fulfillHyperInstant(uint256,address[],bytes[],uint256,bytes32,address,bytes32,address)": "f02aed1d", + "inbox()": "fb0e722b", + "isTransfer(bytes)": "af8a08d9", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidFunctionSelector\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sourceChainID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_hashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_claimants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_prover\",\"type\":\"address\"}],\"name\":\"fetchFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sourceChainID\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_data\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_nonce\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_claimant\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_expectedHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_prover\",\"type\":\"address\"}],\"name\":\"fulfillHyperInstant\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contract IInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"isTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/eco/EcoAdapter.sol\":\"EcoAdapter\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@hyperlane-xyz/=../node_modules/@hyperlane-xyz/core/contracts/\",\":@openzeppelin/=../node_modules/@openzeppelin/\",\":@uniswap/=../node_modules/@uniswap/\",\":contracts/=../node_modules/@hyperlane-xyz/core/contracts/\",\":forge-std/=../node_modules/forge-std/src/\"]},\"sources\":{\"../node_modules/@hyperlane-xyz/core/contracts/libs/TypeCasts.sol\":{\"keccak256\":\"0x7e3608c35e1109fc137cea688760f9c10223b1e7d110be113ad44ff716974ead\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://6fff310e714caca96e809f5a56884a2e9edf842d928929d6228d6593ad8f3d52\",\"dweb:/ipfs/QmSHQmcZV2GF8CUJjny128rDThPEDvUvrfA5kBs7kAK5GJ\"]},\"../node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"../node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"../node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"../node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"../node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"../node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/eco/EcoAdapter.sol\":{\"keccak256\":\"0x841defab8b9b18ab1675b6fa72459e424adb510196d94aa9f581801384e0e646\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d6fa2faa7a2a8bc6256fbe0d6a775604fa5ee18fd2ca56b396a2fb2959e052b1\",\"dweb:/ipfs/QmVY4jA7UGLCY2DiStXWNG3DBnwpX414s1TVwMz4fKtyLC\"]},\"src/eco/IInbox.sol\":{\"keccak256\":\"0x5f75c2a5cc40118541297f9ac10d7537456fa85e07ac1ba13fc222a5632e6660\",\"urls\":[\"bzz-raw://aced89165533da5fc17f32a015c98b03d00928646fd68fd15a7d7d07a952ac19\",\"dweb:/ipfs/QmTqLXVLUyQ3FktBPTQTNLfBoiJeAwmnuqaFma8CpHXz1J\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.25+commit.b61c2a91" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { "internalType": "address", "name": "_owner", "type": "address" }, + { "internalType": "address", "name": "_inbox", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "type": "error", "name": "InvalidFunctionSelector" }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_sourceChainID", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "_hashes", + "type": "bytes32[]" + }, + { + "internalType": "address[]", + "name": "_claimants", + "type": "address[]" + }, + { "internalType": "address", "name": "_prover", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "fetchFee", + "outputs": [ + { "internalType": "uint256", "name": "fee", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_sourceChainID", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "_targets", + "type": "address[]" + }, + { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" }, + { + "internalType": "uint256", + "name": "_expiryTime", + "type": "uint256" + }, + { "internalType": "bytes32", "name": "_nonce", "type": "bytes32" }, + { + "internalType": "address", + "name": "_claimant", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_expectedHash", + "type": "bytes32" + }, + { "internalType": "address", "name": "_prover", "type": "address" } + ], + "stateMutability": "payable", + "type": "function", + "name": "fulfillHyperInstant", + "outputs": [ + { "internalType": "bytes[]", "name": "", "type": "bytes[]" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "inbox", + "outputs": [ + { "internalType": "contract IInbox", "name": "", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function", + "name": "isTransfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { "details": "Returns the address of the current owner." }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@hyperlane-xyz/=../node_modules/@hyperlane-xyz/core/contracts/", + "@openzeppelin/=../node_modules/@openzeppelin/", + "@uniswap/=../node_modules/@uniswap/", + "contracts/=../node_modules/@hyperlane-xyz/core/contracts/", + "forge-std/=../node_modules/forge-std/src/" + ], + "optimizer": { "enabled": true, "runs": 10000 }, + "metadata": { "bytecodeHash": "none" }, + "compilationTarget": { "src/eco/EcoAdapter.sol": "EcoAdapter" }, + "evmVersion": "shanghai", + "libraries": {} + }, + "sources": { + "../node_modules/@hyperlane-xyz/core/contracts/libs/TypeCasts.sol": { + "keccak256": "0x7e3608c35e1109fc137cea688760f9c10223b1e7d110be113ad44ff716974ead", + "urls": [ + "bzz-raw://6fff310e714caca96e809f5a56884a2e9edf842d928929d6228d6593ad8f3d52", + "dweb:/ipfs/QmSHQmcZV2GF8CUJjny128rDThPEDvUvrfA5kBs7kAK5GJ" + ], + "license": "MIT OR Apache-2.0" + }, + "../node_modules/@openzeppelin/contracts/access/Ownable.sol": { + "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218", + "urls": [ + "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32", + "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz" + ], + "license": "MIT" + }, + "../node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305", + "urls": [ + "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5", + "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53" + ], + "license": "MIT" + }, + "../node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": { + "keccak256": "0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69", + "urls": [ + "bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71", + "dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5" + ], + "license": "MIT" + }, + "../node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "keccak256": "0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1", + "urls": [ + "bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68", + "dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS" + ], + "license": "MIT" + }, + "../node_modules/@openzeppelin/contracts/utils/Address.sol": { + "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa", + "urls": [ + "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931", + "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm" + ], + "license": "MIT" + }, + "../node_modules/@openzeppelin/contracts/utils/Context.sol": { + "keccak256": "0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439", + "urls": [ + "bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c", + "dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h" + ], + "license": "MIT" + }, + "src/eco/EcoAdapter.sol": { + "keccak256": "0x841defab8b9b18ab1675b6fa72459e424adb510196d94aa9f581801384e0e646", + "urls": [ + "bzz-raw://d6fa2faa7a2a8bc6256fbe0d6a775604fa5ee18fd2ca56b396a2fb2959e052b1", + "dweb:/ipfs/QmVY4jA7UGLCY2DiStXWNG3DBnwpX414s1TVwMz4fKtyLC" + ], + "license": "UNLICENSED" + }, + "src/eco/IInbox.sol": { + "keccak256": "0x5f75c2a5cc40118541297f9ac10d7537456fa85e07ac1ba13fc222a5632e6660", + "urls": [ + "bzz-raw://aced89165533da5fc17f32a015c98b03d00928646fd68fd15a7d7d07a952ac19", + "dweb:/ipfs/QmTqLXVLUyQ3FktBPTQTNLfBoiJeAwmnuqaFma8CpHXz1J" + ], + "license": null + } + }, + "version": 1 + }, + "id": 154 +} diff --git a/typescript/solver/solvers/compact/contracts/HyperProver.json b/typescript/solver/solvers/compact/contracts/HyperProver.json new file mode 100644 index 00000000..bcb4bf25 --- /dev/null +++ b/typescript/solver/solvers/compact/contracts/HyperProver.json @@ -0,0 +1,166 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_mailbox", + "type": "address" + }, + { + "internalType": "address", + "name": "_inbox", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "UnauthorizedDispatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "UnauthorizedHandle", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_intentHash", + "type": "bytes32" + } + ], + "name": "IntentAlreadyProven", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "_claimant", + "type": "address" + } + ], + "name": "IntentProven", + "type": "event" + }, + { + "inputs": [], + "name": "INBOX", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAILBOX", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROOF_TYPE", + "outputs": [ + { + "internalType": "enum IProver.ProofType", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProofType", + "outputs": [ + { + "internalType": "enum IProver.ProofType", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_messageBody", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenIntents", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/typescript/solver/solvers/compact/contracts/IntentSource.json b/typescript/solver/solvers/compact/contracts/IntentSource.json new file mode 100644 index 00000000..a392f856 --- /dev/null +++ b/typescript/solver/solvers/compact/contracts/IntentSource.json @@ -0,0 +1,246 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumDuration", + "type": "uint256" + }, + { "internalType": "uint256", "name": "_counterStart", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "CalldataMismatch", "type": "error" }, + { "inputs": [], "name": "ExpiryTooSoon", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_hash", "type": "bytes32" } + ], + "name": "NothingToWithdraw", + "type": "error" + }, + { "inputs": [], "name": "RewardsMismatch", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_hash", "type": "bytes32" } + ], + "name": "UnauthorizedWithdrawal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_creator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "_destinationChain", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_targets", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes[]", + "name": "_data", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_rewardTokens", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "_rewardAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_expiryTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "_prover", + "type": "address" + } + ], + "name": "IntentCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "Withdrawal", + "type": "event" + }, + { + "inputs": [], + "name": "CHAIN_ID", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINIMUM_DURATION", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "counter", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_destinationChainID", + "type": "uint256" + }, + { "internalType": "address", "name": "_inbox", "type": "address" }, + { "internalType": "address[]", "name": "_targets", "type": "address[]" }, + { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" }, + { + "internalType": "address[]", + "name": "_rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_rewardAmounts", + "type": "uint256[]" + }, + { "internalType": "uint256", "name": "_expiryTime", "type": "uint256" }, + { "internalType": "address", "name": "_prover", "type": "address" } + ], + "name": "createIntent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" } + ], + "name": "getIntent", + "outputs": [ + { + "components": [ + { "internalType": "address", "name": "creator", "type": "address" }, + { + "internalType": "uint256", + "name": "destinationChainID", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { "internalType": "bytes[]", "name": "data", "type": "bytes[]" }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewardAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "expiryTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "hasBeenWithdrawn", + "type": "bool" + }, + { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, + { "internalType": "address", "name": "prover", "type": "address" } + ], + "internalType": "struct Intent", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "intenthash", "type": "bytes32" } + ], + "name": "intents", + "outputs": [ + { "internalType": "address", "name": "creator", "type": "address" }, + { + "internalType": "uint256", + "name": "destinationChainID", + "type": "uint256" + }, + { "internalType": "uint256", "name": "expiryTime", "type": "uint256" }, + { "internalType": "bool", "name": "hasBeenWithdrawn", "type": "bool" }, + { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, + { "internalType": "address", "name": "prover", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_hash", "type": "bytes32" } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/typescript/solver/solvers/compact/filler.ts b/typescript/solver/solvers/compact/filler.ts new file mode 100644 index 00000000..526e41cf --- /dev/null +++ b/typescript/solver/solvers/compact/filler.ts @@ -0,0 +1,216 @@ +import { Zero } from "@ethersproject/constants"; +import { type MultiProvider } from "@hyperlane-xyz/sdk"; +import { type Result } from "@hyperlane-xyz/utils"; + +import { type BigNumber } from "ethers"; + +import type { IntentCreatedEventObject } from "../../typechain/eco/contracts/IntentSource.js"; +import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; +import { EcoAdapter__factory } from "../../typechain/factories/eco/contracts/EcoAdapter__factory.js"; +import type { EcoMetadata, IntentData } from "./types.js"; +import { + log, + metadata, + retrieveOriginInfo, + retrieveTargetInfo, + withdrawRewards, +} from "./utils.js"; +import { Compact } from "./listener.js"; + +export const create = (multiProvider: MultiProvider) => { + const { adapters, intentSource, solverName } = setup(); + + return async function eco(intent: Compact) { + const origin = await retrieveOriginInfo( + intent, + intentSource, + multiProvider, + ); + const target = await retrieveTargetInfo(intent, adapters, multiProvider); + + log.info({ + msg: "Intent Indexed", + intent: `${solverName}-${intent._hash}`, + origin: origin.join(", "), + target: target.join(", "), + }); + + const result = await prepareIntent( + intent, + adapters, + multiProvider, + solverName, + ); + + if (!result.success) { + log.error( + `${solverName} Failed evaluating filling Intent: ${result.error}`, + ); + return; + } + + await fill( + intent, + result.data.adapter, + intentSource, + multiProvider, + solverName, + ); + + await withdrawRewards(intent, intentSource, multiProvider, solverName); + }; +}; + +function setup() { + if (!metadata.solverName) { + metadata.solverName = "UNKNOWN_SOLVER"; + } + + if (!metadata.adapters.every(({ address }) => address)) { + throw new Error("EcoAdapter address must be provided"); + } + + if (!metadata.intentSource.chainId) { + throw new Error("IntentSource chain ID must be provided"); + } + + if (!metadata.intentSource.address) { + throw new Error("IntentSource address must be provided"); + } + + return metadata; +} + +// We're assuming the filler will pay out of their own stock, but in reality they may have to +// produce the funds before executing each leg. +async function prepareIntent( + intent: IntentCreatedEventObject, + adapters: EcoMetadata["adapters"], + multiProvider: MultiProvider, + solverName: string, +): Promise> { + log.info({ + msg: "Evaluating filling Intent", + intent: `${solverName}-${intent._hash}`, + }); + + try { + const destinationChainId = intent._destinationChain.toNumber(); + const adapter = adapters.find( + ({ chainId }) => chainId === destinationChainId, + ); + + if (!adapter) { + return { + error: "No adapter found for destination chain", + success: false, + }; + } + + const signer = multiProvider.getSigner(destinationChainId); + const erc20Interface = Erc20__factory.createInterface(); + + const requiredAmountsByTarget = intent._targets.reduce<{ + [tokenAddress: string]: BigNumber; + }>((acc, target, index) => { + const [, amount] = erc20Interface.decodeFunctionData( + "transfer", + intent._data[index], + ) as [string, BigNumber]; + + acc[target] ||= Zero; + acc[target] = acc[target].add(amount); + + return acc; + }, {}); + + const fillerAddress = + await multiProvider.getSignerAddress(destinationChainId); + + const areTargetFundsAvailable = await Promise.all( + Object.entries(requiredAmountsByTarget).map( + async ([target, requiredAmount]) => { + const erc20 = Erc20__factory.connect(target, signer); + + const balance = await erc20.balanceOf(fillerAddress); + return balance.gte(requiredAmount); + }, + ), + ); + + if (!areTargetFundsAvailable.every(Boolean)) { + return { error: "Not enough tokens", success: false }; + } + + log.debug( + `${solverName} - Approving tokens: ${intent._hash}, for ${adapter.address}`, + ); + await Promise.all( + Object.entries(requiredAmountsByTarget).map( + async ([target, requiredAmount]) => { + const erc20 = Erc20__factory.connect(target, signer); + + const tx = await erc20.approve(adapter.address, requiredAmount); + await tx.wait(); + }, + ), + ); + + return { data: { adapter }, success: true }; + } catch (error: any) { + return { + error: error.message ?? "Failed to prepare Eco Intent.", + success: false, + }; + } +} + +async function fill( + intent: IntentCreatedEventObject, + adapter: EcoMetadata["adapters"][number], + intentSource: EcoMetadata["intentSource"], + multiProvider: MultiProvider, + solverName: string, +): Promise { + log.info({ + msg: "Filling Intent", + intent: `${solverName}-${intent._hash}`, + }); + + const _chainId = intent._destinationChain.toString(); + + const filler = multiProvider.getSigner(_chainId); + const ecoAdapter = EcoAdapter__factory.connect(adapter.address, filler); + + const claimantAddress = await multiProvider.getSignerAddress( + intentSource.chainId, + ); + + const { _targets, _data, _expiryTime, nonce, _hash, _prover } = intent; + const value = await ecoAdapter.fetchFee( + intentSource.chainId, + [_hash], + [claimantAddress], + _prover, + ); + const tx = await ecoAdapter.fulfillHyperInstant( + intentSource.chainId, + _targets, + _data, + _expiryTime, + nonce, + claimantAddress, + _hash, + _prover, + { value }, + ); + + const receipt = await tx.wait(); + + log.info({ + msg: "Filled Intent", + intent: `${solverName}-${intent._hash}`, + txDetails: receipt.transactionHash, + txHash: receipt.transactionHash, + }); +} diff --git a/typescript/solver/solvers/compact/index.ts b/typescript/solver/solvers/compact/index.ts new file mode 100644 index 00000000..4be68f40 --- /dev/null +++ b/typescript/solver/solvers/compact/index.ts @@ -0,0 +1,2 @@ +export * as filler from "./filler.js"; +export * as listener from "./listener.js"; diff --git a/typescript/solver/solvers/compact/listener.ts b/typescript/solver/solvers/compact/listener.ts new file mode 100644 index 00000000..bee9ee8e --- /dev/null +++ b/typescript/solver/solvers/compact/listener.ts @@ -0,0 +1,66 @@ + +export type Compact = { + hash: string; + claimChain: number; + compact: { + arbiter: string; + sponsor: string; + nonce: string; + expires: string; + id: string; + amount: string; + }; + intent: { + token: string; + amount: string; + fee: string; + chainId: number; + recipient: string; + }; + allocatorSignature: string; + sponsorSignature: string; + filled: boolean; +}; + +export const create = () => { + return function (handler: (args: Compact) => void) { + poll("https://the-compact-allocator-api.vercel.app/api/compacts/?filled=false", handler); + }; +}; + +interface PollOptions { + interval?: number; + timeout?: number; +} + +/** + * Polling wrapper for a GET request. + * + * @param {string} url - The URL to fetch data from. + * @param {function} handler - Handler function. + * @param {object} options - Configuration options. + * @param {number} options.interval - Interval between requests (in milliseconds). + * @returns {void} - Nothing. + */ +function poll(url: string, handler: (args: TResolve) => void, options: PollOptions = {}) { + const { + interval = 4_000, // Default polling interval: 1 second + } = options; + + const poller = async () => { + console.log("Polling..."); + const response = await fetch(url); + + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + + const data = await response.json(); + + handler(data.data.compact); + + setTimeout(poller, interval); + }; + + poller(); +} diff --git a/typescript/solver/solvers/compact/metadata.yaml b/typescript/solver/solvers/compact/metadata.yaml new file mode 100644 index 00000000..891a9754 --- /dev/null +++ b/typescript/solver/solvers/compact/metadata.yaml @@ -0,0 +1,9 @@ +solverName: "Eco" +intentSource: + address: "0x734a3d5a8D691d9b911674E682De5f06517c79ec" + chainId: 11155420 + chainName: "optimism-sepolia" +adapters: + - address: "0x218FB5210d4eE248f046F3EC8B5Dd1c7Bc0756e5" + chainId: 84532 + chainName: "base-sepolia" diff --git a/typescript/solver/solvers/compact/types.ts b/typescript/solver/solvers/compact/types.ts new file mode 100644 index 00000000..c107f620 --- /dev/null +++ b/typescript/solver/solvers/compact/types.ts @@ -0,0 +1,15 @@ +export type EcoMetadata = { + solverName: string; + intentSource: { + address: string; + chainId: number; + chainName?: string; + }; + adapters: Array<{ + address: string; + chainId: number; + chainName?: string; + }>; +}; + +export type IntentData = { adapter: EcoMetadata["adapters"][number] }; diff --git a/typescript/solver/solvers/compact/utils.ts b/typescript/solver/solvers/compact/utils.ts new file mode 100644 index 00000000..9af3cbcf --- /dev/null +++ b/typescript/solver/solvers/compact/utils.ts @@ -0,0 +1,127 @@ +import { formatUnits } from "@ethersproject/units"; +import type { MultiProvider } from "@hyperlane-xyz/sdk"; +import type { BigNumber } from "ethers"; + +import { createLogger } from "../../logger.js"; +import type { IntentCreatedEventObject } from "../../typechain/eco/contracts/IntentSource.js"; +import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; +import { HyperProver__factory } from "../../typechain/factories/eco/contracts/HyperProver__factory.js"; +import { IntentSource__factory } from "../../typechain/factories/eco/contracts/IntentSource__factory.js"; +import { getMetadata } from "../utils.js"; +import type { EcoMetadata } from "./types.js"; + +export const metadata = getMetadata(import.meta.dirname); + +export const log = createLogger(metadata.solverName); + +export async function withdrawRewards( + intent: IntentCreatedEventObject, + intentSource: EcoMetadata["intentSource"], + multiProvider: MultiProvider, + solverName: string, +) { + log.info({ + msg: "Settling Intent", + intent: `${solverName}-${intent._hash}`, + }); + + const { _hash, _prover } = intent; + const signer = multiProvider.getSigner(intentSource.chainId); + const claimantAddress = await signer.getAddress(); + const prover = HyperProver__factory.connect(_prover, signer); + + await new Promise((resolve) => + prover.once( + prover.filters.IntentProven(_hash, claimantAddress), + async () => { + log.debug(`${solverName} - Intent proven: ${_hash}`); + + const settler = IntentSource__factory.connect( + intentSource.address, + signer, + ); + const tx = await settler.withdrawRewards(_hash); + const receipt = await tx.wait(); + const baseUrl = multiProvider.getChainMetadata(intentSource.chainId) + .blockExplorers?.[0].url; + + const txInfo = baseUrl + ? `${baseUrl}/tx/${receipt.transactionHash}` + : receipt.transactionHash; + + log.info({ + msg: "Settled Intent", + intent: `${solverName}-${_hash}`, + txDetails: txInfo, + txHash: receipt.transactionHash, + }); + + resolve(_hash); + }, + ), + ); +} + +export async function retrieveOriginInfo( + intent: IntentCreatedEventObject, + intentSource: EcoMetadata["intentSource"], + multiProvider: MultiProvider, +): Promise> { + const originInfo = await Promise.all( + intent._rewardTokens.map(async (tokenAddress, index) => { + const erc20 = Erc20__factory.connect( + tokenAddress, + multiProvider.getProvider(intentSource.chainId), + ); + const [decimals, symbol] = await Promise.all([ + erc20.decimals(), + erc20.symbol(), + ]); + const amount = intent._rewardAmounts[index]; + + return { amount, decimals, symbol }; + }), + ); + + return originInfo.map( + ({ amount, decimals, symbol }) => + `${formatUnits(amount, decimals)} ${symbol} in on ${intentSource.chainName}`, + ); +} + +export async function retrieveTargetInfo( + intent: IntentCreatedEventObject, + adapters: EcoMetadata["adapters"], + multiProvider: MultiProvider, +): Promise> { + const erc20Interface = Erc20__factory.createInterface(); + + const targetInfo = await Promise.all( + intent._targets.map(async (tokenAddress, index) => { + const erc20 = Erc20__factory.connect( + tokenAddress, + multiProvider.getProvider(intent._destinationChain.toString()), + ); + const [decimals, symbol] = await Promise.all([ + erc20.decimals(), + erc20.symbol(), + ]); + + const [, amount] = erc20Interface.decodeFunctionData( + "transfer", + intent._data[index], + ) as [string, BigNumber]; + + return { amount, decimals, symbol }; + }), + ); + + const targetChain = adapters.find( + ({ chainId }) => chainId === intent._destinationChain.toNumber(), + ); + + return targetInfo.map( + ({ amount, decimals, symbol }) => + `${formatUnits(amount, decimals)} ${symbol} out on ${targetChain?.chainName ?? "UNKNOWN_CHAIN"}`, + ); +} From 0ded4619a562892faf91b11beef2edf8011f281a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Rojas?= Date: Thu, 28 Nov 2024 18:09:46 -0300 Subject: [PATCH 2/8] Update The Compact contract types --- .../solvers/compact/contracts/EcoAdapter.json | 386 - .../compact/contracts/HyperProver.json | 166 - .../compact/contracts/HyperlaneArbiter.json | 299 + .../compact/contracts/IntentSource.json | 246 - .../solvers/compact/contracts/TheCompact.json | 6913 +++++++++++++++++ typescript/solver/solvers/compact/types.ts | 32 +- 6 files changed, 7236 insertions(+), 806 deletions(-) delete mode 100644 typescript/solver/solvers/compact/contracts/EcoAdapter.json delete mode 100644 typescript/solver/solvers/compact/contracts/HyperProver.json create mode 100644 typescript/solver/solvers/compact/contracts/HyperlaneArbiter.json delete mode 100644 typescript/solver/solvers/compact/contracts/IntentSource.json create mode 100644 typescript/solver/solvers/compact/contracts/TheCompact.json diff --git a/typescript/solver/solvers/compact/contracts/EcoAdapter.json b/typescript/solver/solvers/compact/contracts/EcoAdapter.json deleted file mode 100644 index 881d4250..00000000 --- a/typescript/solver/solvers/compact/contracts/EcoAdapter.json +++ /dev/null @@ -1,386 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_owner", "type": "address", "internalType": "address" }, - { "name": "_inbox", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "fetchFee", - "inputs": [ - { - "name": "_sourceChainID", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_hashes", "type": "bytes32[]", "internalType": "bytes32[]" }, - { - "name": "_claimants", - "type": "address[]", - "internalType": "address[]" - }, - { "name": "_prover", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "fulfillHyperInstant", - "inputs": [ - { - "name": "_sourceChainID", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_targets", - "type": "address[]", - "internalType": "address[]" - }, - { "name": "_data", "type": "bytes[]", "internalType": "bytes[]" }, - { "name": "_expiryTime", "type": "uint256", "internalType": "uint256" }, - { "name": "_nonce", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_claimant", "type": "address", "internalType": "address" }, - { - "name": "_expectedHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "_prover", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bytes[]", "internalType": "bytes[]" }], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "inbox", - "inputs": [], - "outputs": [ - { "name": "", "type": "address", "internalType": "contract IInbox" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTransfer", - "inputs": [{ "name": "_data", "type": "bytes", "internalType": "bytes" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidFunctionSelector", "inputs": [] } - ], - "bytecode": { - "object": "0x608060405234801561000f575f80fd5b5060405161143a38038061143a83398101604081905261002e916100d0565b61003733610066565b61004082610066565b600180546001600160a01b0319166001600160a01b039290921691909117905550610101565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100cb575f80fd5b919050565b5f80604083850312156100e1575f80fd5b6100ea836100b5565b91506100f8602084016100b5565b90509250929050565b61132c8061010e5f395ff3fe60806040526004361061006e575f3560e01c8063af8a08d91161004c578063af8a08d914610104578063f02aed1d14610133578063f2fde38b14610153578063fb0e722b14610172575f80fd5b806352130b4014610072578063715018a6146100a45780638da5cb5b146100ba575b5f80fd5b34801561007d575f80fd5b5061009161008c366004610b23565b61019e565b6040519081526020015b60405180910390f35b3480156100af575f80fd5b506100b861026b565b005b3480156100c5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009b565b34801561010f575f80fd5b5061012361011e366004610bf1565b61027e565b604051901515815260200161009b565b610146610141366004610ca5565b6102e7565b60405161009b9190610da7565b34801561015e575f80fd5b506100b861016d366004610e27565b6104a6565b34801561017d575f80fd5b506001546100df9073ffffffffffffffffffffffffffffffffffffffff1681565b5f8084846040516020016101b3929190610e49565b60408051808303601f19018152908290526001547fc1fc9d2e00000000000000000000000000000000000000000000000000000000835290925073ffffffffffffffffffffffffffffffffffffffff8581169291169063c1fc9d2e90610221908a9086908690600401610ed8565b602060405180830381865afa15801561023c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102609190610f00565b979650505050505050565b610273610562565b61027c5f6105e2565b565b5f8061028d6004828587610f17565b81019061029a9190610f3e565b7fffffffff00000000000000000000000000000000000000000000000000000000167fa9059cbb000000000000000000000000000000000000000000000000000000001491505092915050565b60606102f1610562565b5f8a8a5f81811061030457610304610f7d565b90506020020160208101906103199190610e27565b905061034289895f81811061033057610330610f7d565b905060200281019061011e9190610faa565b610378576040517f42868c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f89895f81811061038b5761038b610f7d565b905060200281019061039d9190610faa565b6103ab916004908290610f17565b8101906103b8919061100b565b6001549092506103e5915073ffffffffffffffffffffffffffffffffffffffff8481169133911684610656565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f02aed1d348f8f8f8f8f8f8f8f8f8f6040518c63ffffffff1660e01b81526004016104529a99989796959493929190611100565b5f6040518083038185885af115801561046d573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f1916820160405261049591908101906111d9565b9d9c50505050505050505050505050565b6104ae610562565b73ffffffffffffffffffffffffffffffffffffffff8116610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61055f816105e2565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461027c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526106eb9085906106f1565b50505050565b5f610752826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166108039092919063ffffffff16565b905080515f148061077257508080602001905181019061077291906112d3565b6107fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161054d565b505050565b606061081184845f85610819565b949350505050565b6060824710156108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161054d565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516108d391906112f2565b5f6040518083038185875af1925050503d805f811461090d576040519150601f19603f3d011682016040523d82523d5f602084013e610912565b606091505b509150915061026087838387606083156109b35782515f036109ac5773ffffffffffffffffffffffffffffffffffffffff85163b6109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054d565b5081610811565b61081183838151156109c85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d919061130d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a5257610a526109fc565b604052919050565b5f67ffffffffffffffff821115610a7357610a736109fc565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055f575f80fd5b8035610aa981610a7d565b919050565b5f82601f830112610abd575f80fd5b81356020610ad2610acd83610a5a565b610a29565b8083825260208201915060208460051b870101935086841115610af3575f80fd5b602086015b84811015610b18578035610b0b81610a7d565b8352918301918301610af8565b509695505050505050565b5f805f8060808587031215610b36575f80fd5b8435935060208086013567ffffffffffffffff80821115610b55575f80fd5b818801915088601f830112610b68575f80fd5b8135610b76610acd82610a5a565b81815260059190911b8301840190848101908b831115610b94575f80fd5b938501935b82851015610bb257843582529385019390850190610b99565b975050506040880135925080831115610bc9575f80fd5b5050610bd787828801610aae565b925050610be660608601610a9e565b905092959194509250565b5f8060208385031215610c02575f80fd5b823567ffffffffffffffff80821115610c19575f80fd5b818501915085601f830112610c2c575f80fd5b813581811115610c3a575f80fd5b866020828501011115610c4b575f80fd5b60209290920196919550909350505050565b5f8083601f840112610c6d575f80fd5b50813567ffffffffffffffff811115610c84575f80fd5b6020830191508360208260051b8501011115610c9e575f80fd5b9250929050565b5f805f805f805f805f806101008b8d031215610cbf575f80fd5b8a35995060208b013567ffffffffffffffff80821115610cdd575f80fd5b610ce98e838f01610c5d565b909b50995060408d0135915080821115610d01575f80fd5b50610d0e8d828e01610c5d565b90985096505060608b0135945060808b0135935060a08b0135610d3081610a7d565b925060c08b0135915060e08b0135610d4781610a7d565b809150509295989b9194979a5092959850565b5f5b83811015610d74578181015183820152602001610d5c565b50505f910152565b5f8151808452610d93816020860160208601610d5a565b601f01601f19169290920160200192915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015610e1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610e08858351610d7c565b94509285019290850190600101610dce565b5092979650505050505050565b5f60208284031215610e37575f80fd5b8135610e4281610a7d565b9392505050565b604080825283519082018190525f906020906060840190828701845b82811015610e8157815184529284019290840190600101610e65565b505050838103828501528451808252858301918301905f5b81811015610ecb57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610e99565b5090979650505050505050565b838152606060208201525f610ef06060830185610d7c565b9050826040830152949350505050565b5f60208284031215610f10575f80fd5b5051919050565b5f8085851115610f25575f80fd5b83861115610f31575f80fd5b5050820193919092039150565b5f60208284031215610f4e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e42575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610fdd575f80fd5b83018035915067ffffffffffffffff821115610ff7575f80fd5b602001915036819003821315610c9e575f80fd5b5f806040838503121561101c575f80fd5b823561102781610a7d565b946020939093013593505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b5f838385526020808601955060208560051b830101845f5b87811015610ecb57601f1985840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126110b8575f80fd5b8701848101903567ffffffffffffffff8111156110d3575f80fd5b8036038213156110e1575f80fd5b6110ec858284611035565b9a86019a9450505090830190600101611076565b8a815261010060208083018290529082018a90525f906101208301908c90835b8d81101561115b57823561113381610a7d565b73ffffffffffffffffffffffffffffffffffffffff1684529281019291810191600101611120565b5050508281036040840152611171818a8c61105e565b9150508660608301528560808301526111a260a083018673ffffffffffffffffffffffffffffffffffffffff169052565b8360c08301526111ca60e083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b5f60208083850312156111ea575f80fd5b825167ffffffffffffffff80821115611201575f80fd5b8185019150601f86601f840112611216575f80fd5b8251611224610acd82610a5a565b81815260059190911b84018501908581019089831115611242575f80fd5b8686015b838110156112c55780518681111561125c575f80fd5b8701603f81018c1361126c575f80fd5b88810151604088821115611282576112826109fc565b6112938b601f198a85011601610a29565b8281528e828486010111156112a6575f80fd5b6112b5838d8301848701610d5a565b8652505050918701918701611246565b509998505050505050505050565b5f602082840312156112e3575f80fd5b81518015158114610e42575f80fd5b5f8251611303818460208701610d5a565b9190910192915050565b602081525f610e426020830184610d7c56fea164736f6c6343000819000a", - "sourceMap": "396:1640:154:-:0;;;563:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:28;734:10:43;936:18:28;:32::i;:::-;617:26:154;636:6;617:18;:26::i;:::-;653:5;:22;;-1:-1:-1;;;;;;653:22:154;-1:-1:-1;;;;;653:22:154;;;;;;;;;;-1:-1:-1;396:1640:154;;2426:187:28;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:28;;;-1:-1:-1;;;;;;2534:17:28;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:177:161:-;93:13;;-1:-1:-1;;;;;135:31:161;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;:::-;396:1640:154;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061006e575f3560e01c8063af8a08d91161004c578063af8a08d914610104578063f02aed1d14610133578063f2fde38b14610153578063fb0e722b14610172575f80fd5b806352130b4014610072578063715018a6146100a45780638da5cb5b146100ba575b5f80fd5b34801561007d575f80fd5b5061009161008c366004610b23565b61019e565b6040519081526020015b60405180910390f35b3480156100af575f80fd5b506100b861026b565b005b3480156100c5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009b565b34801561010f575f80fd5b5061012361011e366004610bf1565b61027e565b604051901515815260200161009b565b610146610141366004610ca5565b6102e7565b60405161009b9190610da7565b34801561015e575f80fd5b506100b861016d366004610e27565b6104a6565b34801561017d575f80fd5b506001546100df9073ffffffffffffffffffffffffffffffffffffffff1681565b5f8084846040516020016101b3929190610e49565b60408051808303601f19018152908290526001547fc1fc9d2e00000000000000000000000000000000000000000000000000000000835290925073ffffffffffffffffffffffffffffffffffffffff8581169291169063c1fc9d2e90610221908a9086908690600401610ed8565b602060405180830381865afa15801561023c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102609190610f00565b979650505050505050565b610273610562565b61027c5f6105e2565b565b5f8061028d6004828587610f17565b81019061029a9190610f3e565b7fffffffff00000000000000000000000000000000000000000000000000000000167fa9059cbb000000000000000000000000000000000000000000000000000000001491505092915050565b60606102f1610562565b5f8a8a5f81811061030457610304610f7d565b90506020020160208101906103199190610e27565b905061034289895f81811061033057610330610f7d565b905060200281019061011e9190610faa565b610378576040517f42868c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f89895f81811061038b5761038b610f7d565b905060200281019061039d9190610faa565b6103ab916004908290610f17565b8101906103b8919061100b565b6001549092506103e5915073ffffffffffffffffffffffffffffffffffffffff8481169133911684610656565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f02aed1d348f8f8f8f8f8f8f8f8f8f6040518c63ffffffff1660e01b81526004016104529a99989796959493929190611100565b5f6040518083038185885af115801561046d573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f1916820160405261049591908101906111d9565b9d9c50505050505050505050505050565b6104ae610562565b73ffffffffffffffffffffffffffffffffffffffff8116610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61055f816105e2565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461027c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526106eb9085906106f1565b50505050565b5f610752826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166108039092919063ffffffff16565b905080515f148061077257508080602001905181019061077291906112d3565b6107fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161054d565b505050565b606061081184845f85610819565b949350505050565b6060824710156108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161054d565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516108d391906112f2565b5f6040518083038185875af1925050503d805f811461090d576040519150601f19603f3d011682016040523d82523d5f602084013e610912565b606091505b509150915061026087838387606083156109b35782515f036109ac5773ffffffffffffffffffffffffffffffffffffffff85163b6109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054d565b5081610811565b61081183838151156109c85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d919061130d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a5257610a526109fc565b604052919050565b5f67ffffffffffffffff821115610a7357610a736109fc565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055f575f80fd5b8035610aa981610a7d565b919050565b5f82601f830112610abd575f80fd5b81356020610ad2610acd83610a5a565b610a29565b8083825260208201915060208460051b870101935086841115610af3575f80fd5b602086015b84811015610b18578035610b0b81610a7d565b8352918301918301610af8565b509695505050505050565b5f805f8060808587031215610b36575f80fd5b8435935060208086013567ffffffffffffffff80821115610b55575f80fd5b818801915088601f830112610b68575f80fd5b8135610b76610acd82610a5a565b81815260059190911b8301840190848101908b831115610b94575f80fd5b938501935b82851015610bb257843582529385019390850190610b99565b975050506040880135925080831115610bc9575f80fd5b5050610bd787828801610aae565b925050610be660608601610a9e565b905092959194509250565b5f8060208385031215610c02575f80fd5b823567ffffffffffffffff80821115610c19575f80fd5b818501915085601f830112610c2c575f80fd5b813581811115610c3a575f80fd5b866020828501011115610c4b575f80fd5b60209290920196919550909350505050565b5f8083601f840112610c6d575f80fd5b50813567ffffffffffffffff811115610c84575f80fd5b6020830191508360208260051b8501011115610c9e575f80fd5b9250929050565b5f805f805f805f805f806101008b8d031215610cbf575f80fd5b8a35995060208b013567ffffffffffffffff80821115610cdd575f80fd5b610ce98e838f01610c5d565b909b50995060408d0135915080821115610d01575f80fd5b50610d0e8d828e01610c5d565b90985096505060608b0135945060808b0135935060a08b0135610d3081610a7d565b925060c08b0135915060e08b0135610d4781610a7d565b809150509295989b9194979a5092959850565b5f5b83811015610d74578181015183820152602001610d5c565b50505f910152565b5f8151808452610d93816020860160208601610d5a565b601f01601f19169290920160200192915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015610e1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610e08858351610d7c565b94509285019290850190600101610dce565b5092979650505050505050565b5f60208284031215610e37575f80fd5b8135610e4281610a7d565b9392505050565b604080825283519082018190525f906020906060840190828701845b82811015610e8157815184529284019290840190600101610e65565b505050838103828501528451808252858301918301905f5b81811015610ecb57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610e99565b5090979650505050505050565b838152606060208201525f610ef06060830185610d7c565b9050826040830152949350505050565b5f60208284031215610f10575f80fd5b5051919050565b5f8085851115610f25575f80fd5b83861115610f31575f80fd5b5050820193919092039150565b5f60208284031215610f4e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e42575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610fdd575f80fd5b83018035915067ffffffffffffffff821115610ff7575f80fd5b602001915036819003821315610c9e575f80fd5b5f806040838503121561101c575f80fd5b823561102781610a7d565b946020939093013593505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b5f838385526020808601955060208560051b830101845f5b87811015610ecb57601f1985840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126110b8575f80fd5b8701848101903567ffffffffffffffff8111156110d3575f80fd5b8036038213156110e1575f80fd5b6110ec858284611035565b9a86019a9450505090830190600101611076565b8a815261010060208083018290529082018a90525f906101208301908c90835b8d81101561115b57823561113381610a7d565b73ffffffffffffffffffffffffffffffffffffffff1684529281019291810191600101611120565b5050508281036040840152611171818a8c61105e565b9150508660608301528560808301526111a260a083018673ffffffffffffffffffffffffffffffffffffffff169052565b8360c08301526111ca60e083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b5f60208083850312156111ea575f80fd5b825167ffffffffffffffff80821115611201575f80fd5b8185019150601f86601f840112611216575f80fd5b8251611224610acd82610a5a565b81815260059190911b84018501908581019089831115611242575f80fd5b8686015b838110156112c55780518681111561125c575f80fd5b8701603f81018c1361126c575f80fd5b88810151604088821115611282576112826109fc565b6112938b601f198a85011601610a29565b8281528e828486010111156112a6575f80fd5b6112b5838d8301848701610d5a565b8652505050918701918701611246565b509998505050505050505050565b5f602082840312156112e3575f80fd5b81518015158114610e42575f80fd5b5f8251611303818460208701610d5a565b9190910192915050565b602081525f610e426020830184610d7c56fea164736f6c6343000819000a", - "sourceMap": "396:1640:154:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1685:349;;;;;;;;;;-1:-1:-1;1685:349:154;;;;;:::i;:::-;;:::i;:::-;;;3208:25:161;;;3196:2;3181:18;1685:349:154;;;;;;;;1824:101:28;;;;;;;;;;;;;:::i;:::-;;1201:85;;;;;;;;;;-1:-1:-1;1247:7:28;1273:6;;;1201:85;;;3552:42:161;3540:55;;;3522:74;;3510:2;3495:18;1201:85:28;3376:226:161;1475:204:154;;;;;;;;;;-1:-1:-1;1475:204:154;;;;;:::i;:::-;;:::i;:::-;;;4368:14:161;;4361:22;4343:41;;4331:2;4316:18;1475:204:154;4203:187:161;688:781:154;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2074:198:28:-;;;;;;;;;;-1:-1:-1;2074:198:28;;;;;:::i;:::-;;:::i;499:19:154:-;;;;;;;;;;-1:-1:-1;499:19:154;;;;;;;;1685:349;1820:11;1843:24;1881:7;1890:10;1870:31;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;1870:31:154;;;;;;;1973:5;;:54;;;1870:31;;-1:-1:-1;1931:24:154;;;;;1973:5;;;:14;;:54;;1988:14;;1870:31;;1931:24;;1973:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1967:60;1685:349;-1:-1:-1;;;;;;;1685:349:154:o;1824:101:28:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1475:204:154:-;1538:4;;1591:9;1598:1;1538:4;1591:5;;:9;:::i;:::-;1580:31;;;;;;;:::i;:::-;1628:44;;1648:24;1628:44;;-1:-1:-1;;1475:204:154;;;;:::o;688:781::-;1012:14;1094:13:28;:11;:13::i;:::-;1038:14:154::1;1055:8;;1064:1;1055:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;1038:28;;1082:20;1093:5;;1099:1;1093:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;1082:20::-;1077:59;;1111:25;;;;;;;;;;;;;;1077:59;1150:14;1179:5;;1185:1;1179:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:12;::::0;1188:1:::1;::::0;1179:12;;::::1;:::i;:::-;1168:44;;;;;;;:::i;:::-;1275:5;::::0;1147:65;;-1:-1:-1;1223:67:154::1;::::0;-1:-1:-1;1275:5:154::1;1223:31:::0;;::::1;::::0;1255:10:::1;::::0;1275:5:::1;1147:65:::0;1223:31:::1;:67::i;:::-;1308:5;;;;;;;;;;;:25;;;1341:9;1365:14;1381:8;;1391:5;;1398:11;1411:6;1419:9;1430:13;1445:7;1308:154;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1308:154:154::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1301:161:::0;688:781;-1:-1:-1;;;;;;;;;;;;;688:781:154:o;2074:198:28:-;1094:13;:11;:13::i;:::-;2162:22:::1;::::0;::::1;2154:73;;;::::0;::::1;::::0;;16297:2:161;2154:73:28::1;::::0;::::1;16279:21:161::0;16336:2;16316:18;;;16309:30;16375:34;16355:18;;;16348:62;16446:8;16426:18;;;16419:36;16472:19;;2154:73:28::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1359:130::-;1247:7;1273:6;1422:23;1273:6;734:10:43;1422:23:28;1414:68;;;;;;;16704:2:161;1414:68:28;;;16686:21:161;;;16723:18;;;16716:30;16782:34;16762:18;;;16755:62;16834:18;;1414:68:28;16502:356:161;2426:187:28;2499:16;2518:6;;;2534:17;;;;;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;1355:203:41:-;1482:68;;;17075:42:161;17144:15;;;1482:68:41;;;17126:34:161;17196:15;;17176:18;;;17169:43;17228:18;;;;17221:34;;;1482:68:41;;;;;;;;;;17038:18:161;;;;1482:68:41;;;;;;;;;;1505:27;1482:68;;;1455:96;;1475:5;;1455:19;:96::i;:::-;1355:203;;;;:::o;5196:642::-;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;5641:27;;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;;;;17750:2:161;5720:111:41;;;17732:21:161;17789:2;17769:18;;;17762:30;17828:34;17808:18;;;17801:62;17899:12;17879:18;;;17872:40;17929:19;;5720:111:41;17548:406:161;5720:111:41;5266:572;5196:642;;:::o;4108:223:42:-;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4272:21;:52::i;:::-;4265:59;4108:223;-1:-1:-1;;;;4108:223:42:o;5165:446::-;5330:12;5387:5;5362:21;:30;;5354:81;;;;;;;18161:2:161;5354:81:42;;;18143:21:161;18200:2;18180:18;;;18173:30;18239:34;18219:18;;;18212:62;18310:8;18290:18;;;18283:36;18336:19;;5354:81:42;17959:402:161;5354:81:42;5446:12;5460:23;5487:6;:11;;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;7851;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;1702:19;;;;8113:60;;;;;;;18860:2:161;8113:60:42;;;18842:21:161;18899:2;18879:18;;;18872:30;18938:31;18918:18;;;18911:59;18987:18;;8113:60:42;18658:353:161;8113:60:42;-1:-1:-1;8208:10:42;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;;;;;;;;;;:::i;14:184:161:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:334;274:2;268:9;330:2;320:13;;-1:-1:-1;;316:86:161;304:99;;433:18;418:34;;454:22;;;415:62;412:88;;;480:18;;:::i;:::-;516:2;509:22;203:334;;-1:-1:-1;203:334:161:o;542:183::-;602:4;635:18;627:6;624:30;621:56;;;657:18;;:::i;:::-;-1:-1:-1;702:1:161;698:14;714:4;694:25;;542:183::o;730:154::-;816:42;809:5;805:54;798:5;795:65;785:93;;874:1;871;864:12;889:134;957:20;;986:31;957:20;986:31;:::i;:::-;889:134;;;:::o;1028:743::-;1082:5;1135:3;1128:4;1120:6;1116:17;1112:27;1102:55;;1153:1;1150;1143:12;1102:55;1189:6;1176:20;1215:4;1239:60;1255:43;1295:2;1255:43;:::i;:::-;1239:60;:::i;:::-;1321:3;1345:2;1340:3;1333:15;1373:4;1368:3;1364:14;1357:21;;1430:4;1424:2;1421:1;1417:10;1409:6;1405:23;1401:34;1387:48;;1458:3;1450:6;1447:15;1444:35;;;1475:1;1472;1465:12;1444:35;1511:4;1503:6;1499:17;1525:217;1541:6;1536:3;1533:15;1525:217;;;1621:3;1608:17;1638:31;1663:5;1638:31;:::i;:::-;1682:18;;1720:12;;;;1558;;1525:217;;;-1:-1:-1;1760:5:161;1028:743;-1:-1:-1;;;;;;1028:743:161:o;1776:1281::-;1912:6;1920;1928;1936;1989:3;1977:9;1968:7;1964:23;1960:33;1957:53;;;2006:1;2003;1996:12;1957:53;2042:9;2029:23;2019:33;;2071:2;2124;2113:9;2109:18;2096:32;2147:18;2188:2;2180:6;2177:14;2174:34;;;2204:1;2201;2194:12;2174:34;2242:6;2231:9;2227:22;2217:32;;2287:7;2280:4;2276:2;2272:13;2268:27;2258:55;;2309:1;2306;2299:12;2258:55;2345:2;2332:16;2368:60;2384:43;2424:2;2384:43;:::i;2368:60::-;2462:15;;;2544:1;2540:10;;;;2532:19;;2528:28;;;2493:12;;;;2568:19;;;2565:39;;;2600:1;2597;2590:12;2565:39;2624:11;;;;2644:142;2660:6;2655:3;2652:15;2644:142;;;2726:17;;2714:30;;2677:12;;;;2764;;;;2644:142;;;2805:5;-1:-1:-1;;;2863:2:161;2848:18;;2835:32;;-1:-1:-1;2879:16:161;;;2876:36;;;2908:1;2905;2898:12;2876:36;;;2931:63;2986:7;2975:8;2964:9;2960:24;2931:63;:::i;:::-;2921:73;;;3013:38;3047:2;3036:9;3032:18;3013:38;:::i;:::-;3003:48;;1776:1281;;;;;;;:::o;3607:591::-;3677:6;3685;3738:2;3726:9;3717:7;3713:23;3709:32;3706:52;;;3754:1;3751;3744:12;3706:52;3794:9;3781:23;3823:18;3864:2;3856:6;3853:14;3850:34;;;3880:1;3877;3870:12;3850:34;3918:6;3907:9;3903:22;3893:32;;3963:7;3956:4;3952:2;3948:13;3944:27;3934:55;;3985:1;3982;3975:12;3934:55;4025:2;4012:16;4051:2;4043:6;4040:14;4037:34;;;4067:1;4064;4057:12;4037:34;4112:7;4107:2;4098:6;4094:2;4090:15;4086:24;4083:37;4080:57;;;4133:1;4130;4123:12;4080:57;4164:2;4156:11;;;;;4186:6;;-1:-1:-1;3607:591:161;;-1:-1:-1;;;;3607:591:161:o;4395:367::-;4458:8;4468:6;4522:3;4515:4;4507:6;4503:17;4499:27;4489:55;;4540:1;4537;4530:12;4489:55;-1:-1:-1;4563:20:161;;4606:18;4595:30;;4592:50;;;4638:1;4635;4628:12;4592:50;4675:4;4667:6;4663:17;4651:29;;4735:3;4728:4;4718:6;4715:1;4711:14;4703:6;4699:27;4695:38;4692:47;4689:67;;;4752:1;4749;4742:12;4689:67;4395:367;;;;;:::o;4767:1337::-;4954:6;4962;4970;4978;4986;4994;5002;5010;5018;5026;5079:3;5067:9;5058:7;5054:23;5050:33;5047:53;;;5096:1;5093;5086:12;5047:53;5132:9;5119:23;5109:33;;5193:2;5182:9;5178:18;5165:32;5216:18;5257:2;5249:6;5246:14;5243:34;;;5273:1;5270;5263:12;5243:34;5312:70;5374:7;5365:6;5354:9;5350:22;5312:70;:::i;:::-;5401:8;;-1:-1:-1;5286:96:161;-1:-1:-1;5489:2:161;5474:18;;5461:32;;-1:-1:-1;5505:16:161;;;5502:36;;;5534:1;5531;5524:12;5502:36;;5573:72;5637:7;5626:8;5615:9;5611:24;5573:72;:::i;:::-;5664:8;;-1:-1:-1;5547:98:161;-1:-1:-1;;5746:2:161;5731:18;;5718:32;;-1:-1:-1;5797:3:161;5782:19;;5769:33;;-1:-1:-1;5852:3:161;5837:19;;5824:33;5866:31;5824:33;5866:31;:::i;:::-;5916:5;-1:-1:-1;5968:3:161;5953:19;;5940:33;;-1:-1:-1;6025:3:161;6010:19;;5997:33;6039;5997;6039;:::i;:::-;6091:7;6081:17;;;4767:1337;;;;;;;;;;;;;:::o;6109:250::-;6194:1;6204:113;6218:6;6215:1;6212:13;6204:113;;;6294:11;;;6288:18;6275:11;;;6268:39;6240:2;6233:10;6204:113;;;-1:-1:-1;;6351:1:161;6333:16;;6326:27;6109:250::o;6364:329::-;6405:3;6443:5;6437:12;6470:6;6465:3;6458:19;6486:76;6555:6;6548:4;6543:3;6539:14;6532:4;6525:5;6521:16;6486:76;:::i;:::-;6607:2;6595:15;-1:-1:-1;;6591:88:161;6582:98;;;;6682:4;6578:109;;6364:329;-1:-1:-1;;6364:329:161:o;6698:859::-;6858:4;6887:2;6927;6916:9;6912:18;6957:2;6946:9;6939:21;6980:6;7015;7009:13;7046:6;7038;7031:22;7084:2;7073:9;7069:18;7062:25;;7146:2;7136:6;7133:1;7129:14;7118:9;7114:30;7110:39;7096:53;;7184:2;7176:6;7172:15;7205:1;7215:313;7229:6;7226:1;7223:13;7215:313;;;7318:66;7306:9;7298:6;7294:22;7290:95;7285:3;7278:108;7409:39;7441:6;7432;7426:13;7409:39;:::i;:::-;7399:49;-1:-1:-1;7506:12:161;;;;7471:15;;;;7251:1;7244:9;7215:313;;;-1:-1:-1;7545:6:161;;6698:859;-1:-1:-1;;;;;;;6698:859:161:o;7562:247::-;7621:6;7674:2;7662:9;7653:7;7649:23;7645:32;7642:52;;;7690:1;7687;7680:12;7642:52;7729:9;7716:23;7748:31;7773:5;7748:31;:::i;:::-;7798:5;7562:247;-1:-1:-1;;;7562:247:161:o;8061:1201::-;8329:2;8341:21;;;8411:13;;8314:18;;;8433:22;;;8281:4;;8508;;8486:2;8471:18;;;8535:15;;;8281:4;8578:169;8592:6;8589:1;8586:13;8578:169;;;8653:13;;8641:26;;8687:12;;;;8722:15;;;;8614:1;8607:9;8578:169;;;-1:-1:-1;;;8783:19:161;;;8763:18;;;8756:47;8853:13;;8875:21;;;8951:15;;;;8914:12;;;8986:1;8996:238;9012:8;9007:3;9004:17;8996:238;;;9085:15;;9102:42;9081:64;9067:79;;9207:17;;;;9168:14;;;;9040:1;9031:11;8996:238;;;-1:-1:-1;9251:5:161;;8061:1201;-1:-1:-1;;;;;;;8061:1201:161:o;9267:359::-;9470:6;9459:9;9452:25;9513:2;9508;9497:9;9493:18;9486:30;9433:4;9533:44;9573:2;9562:9;9558:18;9550:6;9533:44;:::i;:::-;9525:52;;9613:6;9608:2;9597:9;9593:18;9586:34;9267:359;;;;;;:::o;9631:184::-;9701:6;9754:2;9742:9;9733:7;9729:23;9725:32;9722:52;;;9770:1;9767;9760:12;9722:52;-1:-1:-1;9793:16:161;;9631:184;-1:-1:-1;9631:184:161:o;9820:331::-;9925:9;9936;9978:8;9966:10;9963:24;9960:44;;;10000:1;9997;9990:12;9960:44;10029:6;10019:8;10016:20;10013:40;;;10049:1;10046;10039:12;10013:40;-1:-1:-1;;10075:23:161;;;10120:25;;;;;-1:-1:-1;9820:331:161:o;10156:332::-;10214:6;10267:2;10255:9;10246:7;10242:23;10238:32;10235:52;;;10283:1;10280;10273:12;10235:52;10322:9;10309:23;10372:66;10365:5;10361:78;10354:5;10351:89;10341:117;;10454:1;10451;10444:12;10493:184;10545:77;10542:1;10535:88;10642:4;10639:1;10632:15;10666:4;10663:1;10656:15;10682:580;10759:4;10765:6;10825:11;10812:25;10915:66;10904:8;10888:14;10884:29;10880:102;10860:18;10856:127;10846:155;;10997:1;10994;10987:12;10846:155;11024:33;;11076:20;;;-1:-1:-1;11119:18:161;11108:30;;11105:50;;;11151:1;11148;11141:12;11105:50;11184:4;11172:17;;-1:-1:-1;11215:14:161;11211:27;;;11201:38;;11198:58;;;11252:1;11249;11242:12;11267:323;11343:6;11351;11404:2;11392:9;11383:7;11379:23;11375:32;11372:52;;;11420:1;11417;11410:12;11372:52;11459:9;11446:23;11478:31;11503:5;11478:31;:::i;:::-;11528:5;11580:2;11565:18;;;;11552:32;;-1:-1:-1;;;11267:323:161:o;11595:325::-;11683:6;11678:3;11671:19;11735:6;11728:5;11721:4;11716:3;11712:14;11699:43;;11787:1;11780:4;11771:6;11766:3;11762:16;11758:27;11751:38;11653:3;11909:4;-1:-1:-1;;11834:2:161;11826:6;11822:15;11818:88;11813:3;11809:98;11805:109;11798:116;;11595:325;;;;:::o;11925:1165::-;12002:3;12033;12057:6;12052:3;12045:19;12083:4;12112;12107:3;12103:14;12096:21;;12170:4;12160:6;12157:1;12153:14;12146:5;12142:26;12138:37;12198:5;12221:1;12231:833;12245:6;12242:1;12239:13;12231:833;;;-1:-1:-1;;12320:5:161;12314:4;12310:16;12306:89;12301:3;12294:102;12448:6;12435:20;12534:66;12526:5;12510:14;12506:26;12502:99;12482:18;12478:124;12468:152;;12616:1;12613;12606:12;12468:152;12648:30;;12756:16;;;;12707:21;12801:18;12788:32;;12785:52;;;12833:1;12830;12823:12;12785:52;12886:8;12870:14;12866:29;12857:7;12853:43;12850:63;;;12909:1;12906;12899:12;12850:63;12934:50;12979:4;12969:8;12960:7;12934:50;:::i;:::-;13042:12;;;;12926:58;-1:-1:-1;;;13007:15:161;;;;12267:1;12260:9;12231:833;;13095:1431;13605:25;;;13552:3;13649:2;13667:18;;;13660:30;;;13578:18;;;13725:22;;;13523:4;;13778:3;13763:19;;;13805:6;;13523:4;13839:300;13853:6;13850:1;13847:13;13839:300;;;13928:6;13915:20;13948:31;13973:5;13948:31;:::i;:::-;14015:42;14004:54;13992:67;;14079:12;;;;14114:15;;;;13875:1;13868:9;13839:300;;;13843:3;;;14184:9;14179:3;14175:19;14170:2;14159:9;14155:18;14148:47;14212:65;14273:3;14265:6;14257;14212:65;:::i;:::-;14204:73;;;14313:6;14308:2;14297:9;14293:18;14286:34;14357:6;14351:3;14340:9;14336:19;14329:35;14373:47;14415:3;14404:9;14400:19;14392:6;3321:42;3310:54;3298:67;;3244:127;14373:47;14457:6;14451:3;14440:9;14436:19;14429:35;14473:47;14515:3;14504:9;14500:19;14492:6;3321:42;3310:54;3298:67;;3244:127;14473:47;13095:1431;;;;;;;;;;;;;:::o;14531:1559::-;14635:6;14666:2;14709;14697:9;14688:7;14684:23;14680:32;14677:52;;;14725:1;14722;14715:12;14677:52;14758:9;14752:16;14787:18;14828:2;14820:6;14817:14;14814:34;;;14844:1;14841;14834:12;14814:34;14882:6;14871:9;14867:22;14857:32;;14908:4;14950:7;14943:4;14939:2;14935:13;14931:27;14921:55;;14972:1;14969;14962:12;14921:55;15001:2;14995:9;15024:60;15040:43;15080:2;15040:43;:::i;15024:60::-;15118:15;;;15200:1;15196:10;;;;15188:19;;15184:28;;;15149:12;;;;15224:19;;;15221:39;;;15256:1;15253;15246:12;15221:39;15288:2;15284;15280:11;15300:760;15316:6;15311:3;15308:15;15300:760;;;15395:3;15389:10;15431:2;15418:11;15415:19;15412:39;;;15447:1;15444;15437:12;15412:39;15474:20;;15529:2;15521:11;;15517:25;-1:-1:-1;15507:53:161;;15556:1;15553;15546:12;15507:53;15597:2;15593;15589:11;15583:18;15624:2;15649;15645;15642:10;15639:36;;;15655:18;;:::i;:::-;15701:110;15807:2;-1:-1:-1;;15733:2:161;15729;15725:11;15721:84;15717:93;15701:110;:::i;:::-;15838:2;15831:5;15824:17;15882:7;15877:2;15872;15868;15864:11;15860:20;15857:33;15854:53;;;15903:1;15900;15893:12;15854:53;15920:67;15984:2;15979;15972:5;15968:14;15963:2;15959;15955:11;15920:67;:::i;:::-;16000:18;;-1:-1:-1;;;16038:12:161;;;;15333;;15300:760;;;-1:-1:-1;16079:5:161;14531:1559;-1:-1:-1;;;;;;;;;14531:1559:161:o;17266:277::-;17333:6;17386:2;17374:9;17365:7;17361:23;17357:32;17354:52;;;17402:1;17399;17392:12;17354:52;17434:9;17428:16;17487:5;17480:13;17473:21;17466:5;17463:32;17453:60;;17509:1;17506;17499:12;18366:287;18495:3;18533:6;18527:13;18549:66;18608:6;18603:3;18596:4;18588:6;18584:17;18549:66;:::i;:::-;18631:16;;;;;18366:287;-1:-1:-1;;18366:287:161:o;19016:219::-;19165:2;19154:9;19147:21;19128:4;19185:44;19225:2;19214:9;19210:18;19202:6;19185:44;:::i", - "linkReferences": {} - }, - "methodIdentifiers": { - "fetchFee(uint256,bytes32[],address[],address)": "52130b40", - "fulfillHyperInstant(uint256,address[],bytes[],uint256,bytes32,address,bytes32,address)": "f02aed1d", - "inbox()": "fb0e722b", - "isTransfer(bytes)": "af8a08d9", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidFunctionSelector\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sourceChainID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_hashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_claimants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_prover\",\"type\":\"address\"}],\"name\":\"fetchFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sourceChainID\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_data\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_nonce\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_claimant\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_expectedHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_prover\",\"type\":\"address\"}],\"name\":\"fulfillHyperInstant\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contract IInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"isTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/eco/EcoAdapter.sol\":\"EcoAdapter\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@hyperlane-xyz/=../node_modules/@hyperlane-xyz/core/contracts/\",\":@openzeppelin/=../node_modules/@openzeppelin/\",\":@uniswap/=../node_modules/@uniswap/\",\":contracts/=../node_modules/@hyperlane-xyz/core/contracts/\",\":forge-std/=../node_modules/forge-std/src/\"]},\"sources\":{\"../node_modules/@hyperlane-xyz/core/contracts/libs/TypeCasts.sol\":{\"keccak256\":\"0x7e3608c35e1109fc137cea688760f9c10223b1e7d110be113ad44ff716974ead\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://6fff310e714caca96e809f5a56884a2e9edf842d928929d6228d6593ad8f3d52\",\"dweb:/ipfs/QmSHQmcZV2GF8CUJjny128rDThPEDvUvrfA5kBs7kAK5GJ\"]},\"../node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"../node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"../node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"../node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"../node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"../node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/eco/EcoAdapter.sol\":{\"keccak256\":\"0x841defab8b9b18ab1675b6fa72459e424adb510196d94aa9f581801384e0e646\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d6fa2faa7a2a8bc6256fbe0d6a775604fa5ee18fd2ca56b396a2fb2959e052b1\",\"dweb:/ipfs/QmVY4jA7UGLCY2DiStXWNG3DBnwpX414s1TVwMz4fKtyLC\"]},\"src/eco/IInbox.sol\":{\"keccak256\":\"0x5f75c2a5cc40118541297f9ac10d7537456fa85e07ac1ba13fc222a5632e6660\",\"urls\":[\"bzz-raw://aced89165533da5fc17f32a015c98b03d00928646fd68fd15a7d7d07a952ac19\",\"dweb:/ipfs/QmTqLXVLUyQ3FktBPTQTNLfBoiJeAwmnuqaFma8CpHXz1J\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.25+commit.b61c2a91" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_owner", "type": "address" }, - { "internalType": "address", "name": "_inbox", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "type": "error", "name": "InvalidFunctionSelector" }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_sourceChainID", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "_hashes", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "_claimants", - "type": "address[]" - }, - { "internalType": "address", "name": "_prover", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "fetchFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_sourceChainID", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_targets", - "type": "address[]" - }, - { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" }, - { - "internalType": "uint256", - "name": "_expiryTime", - "type": "uint256" - }, - { "internalType": "bytes32", "name": "_nonce", "type": "bytes32" }, - { - "internalType": "address", - "name": "_claimant", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_expectedHash", - "type": "bytes32" - }, - { "internalType": "address", "name": "_prover", "type": "address" } - ], - "stateMutability": "payable", - "type": "function", - "name": "fulfillHyperInstant", - "outputs": [ - { "internalType": "bytes[]", "name": "", "type": "bytes[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "inbox", - "outputs": [ - { "internalType": "contract IInbox", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_data", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "isTransfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@hyperlane-xyz/=../node_modules/@hyperlane-xyz/core/contracts/", - "@openzeppelin/=../node_modules/@openzeppelin/", - "@uniswap/=../node_modules/@uniswap/", - "contracts/=../node_modules/@hyperlane-xyz/core/contracts/", - "forge-std/=../node_modules/forge-std/src/" - ], - "optimizer": { "enabled": true, "runs": 10000 }, - "metadata": { "bytecodeHash": "none" }, - "compilationTarget": { "src/eco/EcoAdapter.sol": "EcoAdapter" }, - "evmVersion": "shanghai", - "libraries": {} - }, - "sources": { - "../node_modules/@hyperlane-xyz/core/contracts/libs/TypeCasts.sol": { - "keccak256": "0x7e3608c35e1109fc137cea688760f9c10223b1e7d110be113ad44ff716974ead", - "urls": [ - "bzz-raw://6fff310e714caca96e809f5a56884a2e9edf842d928929d6228d6593ad8f3d52", - "dweb:/ipfs/QmSHQmcZV2GF8CUJjny128rDThPEDvUvrfA5kBs7kAK5GJ" - ], - "license": "MIT OR Apache-2.0" - }, - "../node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218", - "urls": [ - "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32", - "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz" - ], - "license": "MIT" - }, - "../node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305", - "urls": [ - "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5", - "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53" - ], - "license": "MIT" - }, - "../node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": { - "keccak256": "0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69", - "urls": [ - "bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71", - "dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5" - ], - "license": "MIT" - }, - "../node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1", - "urls": [ - "bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68", - "dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS" - ], - "license": "MIT" - }, - "../node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa", - "urls": [ - "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931", - "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm" - ], - "license": "MIT" - }, - "../node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439", - "urls": [ - "bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c", - "dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h" - ], - "license": "MIT" - }, - "src/eco/EcoAdapter.sol": { - "keccak256": "0x841defab8b9b18ab1675b6fa72459e424adb510196d94aa9f581801384e0e646", - "urls": [ - "bzz-raw://d6fa2faa7a2a8bc6256fbe0d6a775604fa5ee18fd2ca56b396a2fb2959e052b1", - "dweb:/ipfs/QmVY4jA7UGLCY2DiStXWNG3DBnwpX414s1TVwMz4fKtyLC" - ], - "license": "UNLICENSED" - }, - "src/eco/IInbox.sol": { - "keccak256": "0x5f75c2a5cc40118541297f9ac10d7537456fa85e07ac1ba13fc222a5632e6660", - "urls": [ - "bzz-raw://aced89165533da5fc17f32a015c98b03d00928646fd68fd15a7d7d07a952ac19", - "dweb:/ipfs/QmTqLXVLUyQ3FktBPTQTNLfBoiJeAwmnuqaFma8CpHXz1J" - ], - "license": null - } - }, - "version": 1 - }, - "id": 154 -} diff --git a/typescript/solver/solvers/compact/contracts/HyperProver.json b/typescript/solver/solvers/compact/contracts/HyperProver.json deleted file mode 100644 index bcb4bf25..00000000 --- a/typescript/solver/solvers/compact/contracts/HyperProver.json +++ /dev/null @@ -1,166 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_mailbox", - "type": "address" - }, - { - "internalType": "address", - "name": "_inbox", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "UnauthorizedDispatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "UnauthorizedHandle", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "_intentHash", - "type": "bytes32" - } - ], - "name": "IntentAlreadyProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "_hash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "_claimant", - "type": "address" - } - ], - "name": "IntentProven", - "type": "event" - }, - { - "inputs": [], - "name": "INBOX", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAILBOX", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROOF_TYPE", - "outputs": [ - { - "internalType": "enum IProver.ProofType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProofType", - "outputs": [ - { - "internalType": "enum IProver.ProofType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenIntents", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/typescript/solver/solvers/compact/contracts/HyperlaneArbiter.json b/typescript/solver/solvers/compact/contracts/HyperlaneArbiter.json new file mode 100644 index 00000000..37767105 --- /dev/null +++ b/typescript/solver/solvers/compact/contracts/HyperlaneArbiter.json @@ -0,0 +1,299 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_mailbox", "type": "address" }, + { "internalType": "address", "name": "_theCompact", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_hook", + "type": "address" + } + ], + "name": "HookSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ism", + "type": "address" + } + ], + "name": "IsmSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "PACKAGE_VERSION", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "domains", + "outputs": [{ "internalType": "uint32[]", "name": "", "type": "uint32[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_domain", "type": "uint32" }, + { "internalType": "bytes32", "name": "_router", "type": "bytes32" } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" }, + { "internalType": "bytes32[]", "name": "_addresses", "type": "bytes32[]" } + ], + "name": "enrollRemoteRouters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "claimChain", "type": "uint32" }, + { + "components": [ + { "internalType": "address", "name": "arbiter", "type": "address" }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct Compact", + "name": "compact", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { "internalType": "uint32", "name": "chainId", "type": "uint32" }, + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct Intent", + "name": "intent", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "bytes", "name": "sponsorSignature", "type": "bytes" } + ], + "name": "fill", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getCompactWitnessTypestring", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_origin", "type": "uint32" }, + { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, + { "internalType": "bytes", "name": "_message", "type": "bytes" } + ], + "name": "handle", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { "internalType": "uint32", "name": "chainId", "type": "uint32" }, + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct Intent", + "name": "intent", + "type": "tuple" + } + ], + "name": "hash", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "hook", + "outputs": [ + { + "internalType": "contract IPostDispatchHook", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interchainSecurityModule", + "outputs": [ + { + "internalType": "contract IInterchainSecurityModule", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "localDomain", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mailbox", + "outputs": [ + { "internalType": "contract IMailbox", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_domain", "type": "uint32" } + ], + "name": "routers", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_hook", "type": "address" } + ], + "name": "setHook", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_module", "type": "address" } + ], + "name": "setInterchainSecurityModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "theCompact", + "outputs": [ + { "internalType": "contract TheCompact", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "_domain", "type": "uint32" } + ], + "name": "unenrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" } + ], + "name": "unenrollRemoteRouters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/typescript/solver/solvers/compact/contracts/IntentSource.json b/typescript/solver/solvers/compact/contracts/IntentSource.json deleted file mode 100644 index a392f856..00000000 --- a/typescript/solver/solvers/compact/contracts/IntentSource.json +++ /dev/null @@ -1,246 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumDuration", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_counterStart", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "name": "CalldataMismatch", "type": "error" }, - { "inputs": [], "name": "ExpiryTooSoon", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_hash", "type": "bytes32" } - ], - "name": "NothingToWithdraw", - "type": "error" - }, - { "inputs": [], "name": "RewardsMismatch", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_hash", "type": "bytes32" } - ], - "name": "UnauthorizedWithdrawal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "_hash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "_creator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_destinationChain", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "_targets", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "bytes[]", - "name": "_data", - "type": "bytes[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "_rewardTokens", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_rewardAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_expiryTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "nonce", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "_prover", - "type": "address" - } - ], - "name": "IntentCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "_hash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "CHAIN_ID", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINIMUM_DURATION", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "counter", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_destinationChainID", - "type": "uint256" - }, - { "internalType": "address", "name": "_inbox", "type": "address" }, - { "internalType": "address[]", "name": "_targets", "type": "address[]" }, - { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" }, - { - "internalType": "address[]", - "name": "_rewardTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_rewardAmounts", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "_expiryTime", "type": "uint256" }, - { "internalType": "address", "name": "_prover", "type": "address" } - ], - "name": "createIntent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "identifier", "type": "bytes32" } - ], - "name": "getIntent", - "outputs": [ - { - "components": [ - { "internalType": "address", "name": "creator", "type": "address" }, - { - "internalType": "uint256", - "name": "destinationChainID", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { "internalType": "bytes[]", "name": "data", "type": "bytes[]" }, - { - "internalType": "address[]", - "name": "rewardTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "rewardAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "expiryTime", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "hasBeenWithdrawn", - "type": "bool" - }, - { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, - { "internalType": "address", "name": "prover", "type": "address" } - ], - "internalType": "struct Intent", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "intenthash", "type": "bytes32" } - ], - "name": "intents", - "outputs": [ - { "internalType": "address", "name": "creator", "type": "address" }, - { - "internalType": "uint256", - "name": "destinationChainID", - "type": "uint256" - }, - { "internalType": "uint256", "name": "expiryTime", "type": "uint256" }, - { "internalType": "bool", "name": "hasBeenWithdrawn", "type": "bool" }, - { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, - { "internalType": "address", "name": "prover", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_hash", "type": "bytes32" } - ], - "name": "withdrawRewards", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/typescript/solver/solvers/compact/contracts/TheCompact.json b/typescript/solver/solvers/compact/contracts/TheCompact.json new file mode 100644 index 00000000..94bc3792 --- /dev/null +++ b/typescript/solver/solvers/compact/contracts/TheCompact.json @@ -0,0 +1,6913 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "providedAmount", "type": "uint256" } + ], + "name": "AllocatedAmountExceeded", + "type": "error" + }, + { "inputs": [], "name": "BalanceOverflow", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "expiration", "type": "uint256" } + ], + "name": "Expired", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" } + ], + "name": "ForcedWithdrawalAlreadyDisabled", + "type": "error" + }, + { "inputs": [], "name": "InsufficientBalance", "type": "error" }, + { "inputs": [], "name": "InsufficientPermission", "type": "error" }, + { "inputs": [], "name": "InvalidBatchAllocation", "type": "error" }, + { "inputs": [], "name": "InvalidBatchDepositStructure", "type": "error" }, + { "inputs": [], "name": "InvalidDepositBalanceChange", "type": "error" }, + { "inputs": [], "name": "InvalidDepositTokenOrdering", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ], + "name": "InvalidRegistrationDuration", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "allocator", "type": "address" } + ], + "name": "InvalidRegistrationProof", + "type": "error" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "InvalidScope", + "type": "error" + }, + { "inputs": [], "name": "InvalidSignature", "type": "error" }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" } + ], + "name": "InvalidToken", + "type": "error" + }, + { "inputs": [], "name": "OnlyDirectCalls", "type": "error" }, + { "inputs": [], "name": "Permit2CallFailed", "type": "error" }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "PrematureWithdrawal", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "existingCaller", "type": "address" } + ], + "name": "ReentrantCall", + "type": "error" + }, + { "inputs": [], "name": "TStoreAlreadyActivated", "type": "error" }, + { "inputs": [], "name": "TStoreNotSupported", "type": "error" }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "UnallocatedTransfer", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint96", + "name": "allocatorId", + "type": "uint96" + }, + { + "indexed": false, + "internalType": "address", + "name": "allocator", + "type": "address" + } + ], + "name": "AllocatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sponsor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "arbiter", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "claimHash", + "type": "bytes32" + } + ], + "name": "Claim", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sponsor", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "claimHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "typehash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "name": "CompactRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "activating", + "type": "bool" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "withdrawableAt", + "type": "uint256" + } + ], + "name": "ForcedWithdrawalStatusUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "allocator", "type": "address" }, + { "internalType": "bytes", "name": "proof", "type": "bytes" } + ], + "name": "__registerAllocator", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct TransferComponent[]", + "name": "transfers", + "type": "tuple[]" + }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "internalType": "struct BatchTransfer", + "name": "transfer", + "type": "tuple" + } + ], + "name": "allocatedTransfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitByIdComponent[]", + "name": "transfers", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchTransfer", + "name": "transfer", + "type": "tuple" + } + ], + "name": "allocatedTransfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "recipients", + "type": "tuple[]" + } + ], + "internalType": "struct SplitTransfer", + "name": "transfer", + "type": "tuple" + } + ], + "name": "allocatedTransfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "internalType": "struct BasicTransfer", + "name": "transfer", + "type": "tuple" + } + ], + "name": "allocatedTransfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "internalType": "struct BasicTransfer", + "name": "withdrawal", + "type": "tuple" + } + ], + "name": "allocatedWithdrawal", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitByIdComponent[]", + "name": "transfers", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchTransfer", + "name": "withdrawal", + "type": "tuple" + } + ], + "name": "allocatedWithdrawal", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct TransferComponent[]", + "name": "transfers", + "type": "tuple[]" + }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "internalType": "struct BatchTransfer", + "name": "withdrawal", + "type": "tuple" + } + ], + "name": "allocatedWithdrawal", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "recipients", + "type": "tuple[]" + } + ], + "internalType": "struct SplitTransfer", + "name": "withdrawal", + "type": "tuple" + } + ], + "name": "allocatedWithdrawal", + "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": "id", "type": "uint256" } + ], + "name": "allowance", + "outputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" } + ], + "name": "balanceOf", + "outputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousQualifiedBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousQualifiedBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousQualifiedMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BasicClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct MultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct MultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousQualifiedMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claim", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousQualifiedBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct MultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousQualifiedMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct SplitClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct MultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitBatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BasicClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct BatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousQualifiedSplitBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct ExogenousSplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ExogenousQualifiedMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "address", "name": "claimant", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct QualifiedMultichainClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SplitComponent[]", + "name": "portions", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + } + ], + "internalType": "struct SplitBatchClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct QualifiedBatchClaim", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimant", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct SplitComponent[]", + "name": "claimants", + "type": "tuple[]" + } + ], + "internalType": "struct QualifiedSplitClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "allocatorSignature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sponsorSignature", + "type": "bytes" + }, + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" }, + { "internalType": "bytes32", "name": "witness", "type": "bytes32" }, + { + "internalType": "string", + "name": "witnessTypestring", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "qualificationTypehash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "qualificationPayload", + "type": "bytes" + }, + { + "internalType": "bytes32[]", + "name": "additionalChains", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "chainIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "notarizedChainId", + "type": "uint256" + }, + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "uint256", + "name": "allocatedAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct BatchClaimComponent[]", + "name": "claims", + "type": "tuple[]" + }, + { "internalType": "address", "name": "claimant", "type": "address" } + ], + "internalType": "struct ExogenousQualifiedBatchMultichainClaimWithWitness", + "name": "claimPayload", + "type": "tuple" + } + ], + "name": "claimAndWithdraw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256[]", "name": "nonces", "type": "uint256[]" } + ], + "name": "consume", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "decimals", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "enum ResetPeriod", "name": "", "type": "uint8" }, + { "internalType": "enum Scope", "name": "", "type": "uint8" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "name": "deposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "allocator", "type": "address" }, + { + "internalType": "enum ResetPeriod", + "name": "resetPeriod", + "type": "uint8" + }, + { "internalType": "enum Scope", "name": "scope", "type": "uint8" }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "name": "deposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "address", "name": "allocator", "type": "address" }, + { + "internalType": "enum ResetPeriod", + "name": "resetPeriod", + "type": "uint8" + }, + { "internalType": "enum Scope", "name": "scope", "type": "uint8" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "name": "deposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "address", "name": "allocator", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "deposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { + "components": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ISignatureTransfer.TokenPermissions[]", + "name": "permitted", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "enum ResetPeriod", "name": "", "type": "uint8" }, + { "internalType": "enum Scope", "name": "", "type": "uint8" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "name": "deposit", + "outputs": [ + { "internalType": "uint256[]", "name": "", "type": "uint256[]" } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[2][]", + "name": "idsAndAmounts", + "type": "uint256[2][]" + }, + { "internalType": "address", "name": "recipient", "type": "address" } + ], + "name": "deposit", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "allocator", "type": "address" } + ], + "name": "deposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { + "internalType": "enum ResetPeriod", + "name": "resetPeriod", + "type": "uint8" + }, + { "internalType": "enum Scope", "name": "", "type": "uint8" }, + { "internalType": "bytes32", "name": "claimHash", "type": "bytes32" }, + { + "internalType": "enum CompactCategory", + "name": "compactCategory", + "type": "uint8" + }, + { "internalType": "string", "name": "witness", "type": "string" }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "name": "depositAndRegister", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[2][]", + "name": "idsAndAmounts", + "type": "uint256[2][]" + }, + { + "internalType": "bytes32[2][]", + "name": "claimHashesAndTypehashes", + "type": "bytes32[2][]" + }, + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ], + "name": "depositAndRegister", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "allocator", "type": "address" }, + { "internalType": "bytes32", "name": "claimHash", "type": "bytes32" }, + { "internalType": "bytes32", "name": "typehash", "type": "bytes32" } + ], + "name": "depositAndRegister", + "outputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { + "components": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct ISignatureTransfer.TokenPermissions[]", + "name": "permitted", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "address", "name": "", "type": "address" }, + { + "internalType": "enum ResetPeriod", + "name": "resetPeriod", + "type": "uint8" + }, + { "internalType": "enum Scope", "name": "", "type": "uint8" }, + { "internalType": "bytes32", "name": "claimHash", "type": "bytes32" }, + { + "internalType": "enum CompactCategory", + "name": "compactCategory", + "type": "uint8" + }, + { "internalType": "string", "name": "witness", "type": "string" }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "name": "depositAndRegister", + "outputs": [ + { "internalType": "uint256[]", "name": "", "type": "uint256[]" } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "address", "name": "allocator", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "bytes32", "name": "claimHash", "type": "bytes32" }, + { "internalType": "bytes32", "name": "typehash", "type": "bytes32" } + ], + "name": "depositAndRegister", + "outputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "disableForcedWithdrawal", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "enableForcedWithdrawal", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "slot", "type": "bytes32" } + ], + "name": "extsload", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32[]", "name": "slots", "type": "bytes32[]" } + ], + "name": "extsload", + "outputs": [ + { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "slot", "type": "bytes32" } + ], + "name": "exttload", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "forcedWithdrawal", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" } + ], + "name": "getForcedWithdrawalStatus", + "outputs": [ + { + "internalType": "enum ForcedWithdrawalStatus", + "name": "", + "type": "uint8" + }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "getLockDetails", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "enum ResetPeriod", "name": "", "type": "uint8" }, + { "internalType": "enum Scope", "name": "", "type": "uint8" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "sponsor", "type": "address" }, + { "internalType": "bytes32", "name": "claimHash", "type": "bytes32" }, + { "internalType": "bytes32", "name": "typehash", "type": "bytes32" } + ], + "name": "getRegistrationStatus", + "outputs": [ + { "internalType": "bool", "name": "isActive", "type": "bool" }, + { "internalType": "uint256", "name": "expires", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" }, + { "internalType": "address", "name": "allocator", "type": "address" } + ], + "name": "hasConsumedAllocatorNonce", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" } + ], + "name": "isOperator", + "outputs": [{ "internalType": "bool", "name": "status", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[2][]", + "name": "claimHashesAndTypehashes", + "type": "bytes32[2][]" + }, + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ], + "name": "register", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "claimHash", "type": "bytes32" }, + { "internalType": "bytes32", "name": "typehash", "type": "bytes32" }, + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ], + "name": "register", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bool", "name": "approved", "type": "bool" } + ], + "name": "setOperator", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "tokenURI", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/typescript/solver/solvers/compact/types.ts b/typescript/solver/solvers/compact/types.ts index c107f620..06ab5103 100644 --- a/typescript/solver/solvers/compact/types.ts +++ b/typescript/solver/solvers/compact/types.ts @@ -1,15 +1,31 @@ -export type EcoMetadata = { +export type CompactMetadata = { solverName: string; - intentSource: { - address: string; - chainId: number; - chainName?: string; - }; - adapters: Array<{ + arbiters: Array<{ address: string; chainId: number; chainName?: string; }>; }; -export type IntentData = { adapter: EcoMetadata["adapters"][number] }; +export type Compact = { + hash: string; + claimChain: number; + compact: { + arbiter: string; + sponsor: string; + nonce: string; + expires: string; + id: string; + amount: string; + }; + intent: { + token: string; + amount: string; + fee: string; + chainId: number; + recipient: string; + }; + allocatorSignature: string; + sponsorSignature: string; + filled: boolean; +}; From f5c6b8ef5b41a5ad569074177959906fe8ed3a34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Rojas?= Date: Thu, 28 Nov 2024 18:12:14 -0300 Subject: [PATCH 3/8] Partially implement listener and filler for The Compact Co-Authored-By: fernandomg --- typescript/solver/logger.ts | 1 - typescript/solver/solvers/compact/filler.ts | 122 +++++--------- typescript/solver/solvers/compact/listener.ts | 90 +++++------ .../solver/solvers/compact/metadata.yaml | 20 +-- typescript/solver/solvers/compact/utils.ts | 150 +++++------------- 5 files changed, 144 insertions(+), 239 deletions(-) diff --git a/typescript/solver/logger.ts b/typescript/solver/logger.ts index f74a6c73..089f0ae1 100644 --- a/typescript/solver/logger.ts +++ b/typescript/solver/logger.ts @@ -35,4 +35,3 @@ function createLogger(name?: string, logFormat?: LogFormat, logLevel?: Level) { const log = createLogger(); export { createLogger, log, LogFormat, type Level, type Logger }; - diff --git a/typescript/solver/solvers/compact/filler.ts b/typescript/solver/solvers/compact/filler.ts index 526e41cf..fab7e5db 100644 --- a/typescript/solver/solvers/compact/filler.ts +++ b/typescript/solver/solvers/compact/filler.ts @@ -2,35 +2,26 @@ import { Zero } from "@ethersproject/constants"; import { type MultiProvider } from "@hyperlane-xyz/sdk"; import { type Result } from "@hyperlane-xyz/utils"; -import { type BigNumber } from "ethers"; - -import type { IntentCreatedEventObject } from "../../typechain/eco/contracts/IntentSource.js"; import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; -import { EcoAdapter__factory } from "../../typechain/factories/eco/contracts/EcoAdapter__factory.js"; -import type { EcoMetadata, IntentData } from "./types.js"; +import type { Compact, CompactMetadata } from "./types.js"; import { log, metadata, retrieveOriginInfo, retrieveTargetInfo, - withdrawRewards, } from "./utils.js"; -import { Compact } from "./listener.js"; +import { HyperlaneArbiter__factory } from "../../typechain/factories/compact/contracts/HyperlaneArbiter__factory.js"; export const create = (multiProvider: MultiProvider) => { - const { adapters, intentSource, solverName } = setup(); + const { solverName } = setup(); - return async function eco(intent: Compact) { - const origin = await retrieveOriginInfo( - intent, - intentSource, - multiProvider, - ); - const target = await retrieveTargetInfo(intent, adapters, multiProvider); + return async function compact(intent: Compact) { + const origin = await retrieveOriginInfo(intent, multiProvider); + const target = await retrieveTargetInfo(intent, multiProvider); log.info({ msg: "Intent Indexed", - intent: `${solverName}-${intent._hash}`, + intent: `${solverName}-${intent.hash}`, origin: origin.join(", "), target: target.join(", "), }); @@ -57,7 +48,7 @@ export const create = (multiProvider: MultiProvider) => { solverName, ); - await withdrawRewards(intent, intentSource, multiProvider, solverName); + // await withdrawRewards(intent, intentSource, multiProvider, solverName); }; }; @@ -66,16 +57,13 @@ function setup() { metadata.solverName = "UNKNOWN_SOLVER"; } - if (!metadata.adapters.every(({ address }) => address)) { - throw new Error("EcoAdapter address must be provided"); - } - - if (!metadata.intentSource.chainId) { - throw new Error("IntentSource chain ID must be provided"); - } - - if (!metadata.intentSource.address) { - throw new Error("IntentSource address must be provided"); + if ( + !metadata.arbiters.every( + ({ address, chainId, chainName }) => + !!address && !!chainId && !!chainName, + ) + ) { + throw new Error("Arbiter address must be provided"); } return metadata; @@ -84,45 +72,34 @@ function setup() { // We're assuming the filler will pay out of their own stock, but in reality they may have to // produce the funds before executing each leg. async function prepareIntent( - intent: IntentCreatedEventObject, - adapters: EcoMetadata["adapters"], + intent: Compact, + arbiters: CompactMetadata["arbiters"], multiProvider: MultiProvider, solverName: string, ): Promise> { log.info({ msg: "Evaluating filling Intent", - intent: `${solverName}-${intent._hash}`, + intent: `${solverName}-${intent.hash}`, }); try { - const destinationChainId = intent._destinationChain.toNumber(); - const adapter = adapters.find( + const destinationChainId = intent.intent.chainId; + const arbiter = arbiters.find( ({ chainId }) => chainId === destinationChainId, ); - if (!adapter) { + if (!arbiter) { return { - error: "No adapter found for destination chain", + error: "No arbiter found for destination chain", success: false, }; } const signer = multiProvider.getSigner(destinationChainId); - const erc20Interface = Erc20__factory.createInterface(); - - const requiredAmountsByTarget = intent._targets.reduce<{ - [tokenAddress: string]: BigNumber; - }>((acc, target, index) => { - const [, amount] = erc20Interface.decodeFunctionData( - "transfer", - intent._data[index], - ) as [string, BigNumber]; - - acc[target] ||= Zero; - acc[target] = acc[target].add(amount); - return acc; - }, {}); + const requiredAmountsByTarget = { + [intent.intent.token]: intent.intent.amount, + }; const fillerAddress = await multiProvider.getSignerAddress(destinationChainId); @@ -143,65 +120,54 @@ async function prepareIntent( } log.debug( - `${solverName} - Approving tokens: ${intent._hash}, for ${adapter.address}`, + `${solverName} - Approving tokens: ${intent.hash}, for ${arbiter.address}`, ); await Promise.all( Object.entries(requiredAmountsByTarget).map( async ([target, requiredAmount]) => { const erc20 = Erc20__factory.connect(target, signer); - const tx = await erc20.approve(adapter.address, requiredAmount); + const tx = await erc20.approve(arbiter.address, requiredAmount); await tx.wait(); }, ), ); - return { data: { adapter }, success: true }; + return { data: { arbiter }, success: true }; } catch (error: any) { return { - error: error.message ?? "Failed to prepare Eco Intent.", + error: error.message ?? "Failed to prepare Compact Intent.", success: false, }; } } async function fill( - intent: IntentCreatedEventObject, - adapter: EcoMetadata["adapters"][number], - intentSource: EcoMetadata["intentSource"], + intent: Compact, + arbiterInfo: CompactMetadata["arbiters"][number], multiProvider: MultiProvider, solverName: string, ): Promise { log.info({ msg: "Filling Intent", - intent: `${solverName}-${intent._hash}`, + intent: `${solverName}-${intent.hash}`, }); - const _chainId = intent._destinationChain.toString(); + const _chainId = intent.intent.chainId; const filler = multiProvider.getSigner(_chainId); - const ecoAdapter = EcoAdapter__factory.connect(adapter.address, filler); - - const claimantAddress = await multiProvider.getSignerAddress( - intentSource.chainId, + const arbiter = HyperlaneArbiter__factory.connect( + arbiterInfo.address, + filler, ); - const { _targets, _data, _expiryTime, nonce, _hash, _prover } = intent; - const value = await ecoAdapter.fetchFee( - intentSource.chainId, - [_hash], - [claimantAddress], - _prover, - ); - const tx = await ecoAdapter.fulfillHyperInstant( - intentSource.chainId, - _targets, - _data, - _expiryTime, - nonce, - claimantAddress, - _hash, - _prover, + const value = 0; + const tx = await arbiter.fill( + intent.claimChain, + intent.compact, + intent.intent, + intent.allocatorSignature, + intent.sponsorSignature, { value }, ); @@ -209,7 +175,7 @@ async function fill( log.info({ msg: "Filled Intent", - intent: `${solverName}-${intent._hash}`, + intent: `${solverName}-${intent.hash}`, txDetails: receipt.transactionHash, txHash: receipt.transactionHash, }); diff --git a/typescript/solver/solvers/compact/listener.ts b/typescript/solver/solvers/compact/listener.ts index bee9ee8e..7c99c325 100644 --- a/typescript/solver/solvers/compact/listener.ts +++ b/typescript/solver/solvers/compact/listener.ts @@ -1,30 +1,11 @@ - -export type Compact = { - hash: string; - claimChain: number; - compact: { - arbiter: string; - sponsor: string; - nonce: string; - expires: string; - id: string; - amount: string; - }; - intent: { - token: string; - amount: string; - fee: string; - chainId: number; - recipient: string; - }; - allocatorSignature: string; - sponsorSignature: string; - filled: boolean; -}; +import type { Compact } from "./types.js"; export const create = () => { return function (handler: (args: Compact) => void) { - poll("https://the-compact-allocator-api.vercel.app/api/compacts/?filled=false", handler); + poll( + "https://the-compact-allocator-api.vercel.app/api/compacts/?filled=false", + handler, + ); }; }; @@ -33,34 +14,53 @@ interface PollOptions { timeout?: number; } -/** - * Polling wrapper for a GET request. - * - * @param {string} url - The URL to fetch data from. - * @param {function} handler - Handler function. - * @param {object} options - Configuration options. - * @param {number} options.interval - Interval between requests (in milliseconds). - * @returns {void} - Nothing. - */ -function poll(url: string, handler: (args: TResolve) => void, options: PollOptions = {}) { +function poll( + url: string, + handler: (args: TResolve) => void, + options: PollOptions = {}, +) { const { interval = 4_000, // Default polling interval: 1 second } = options; - const poller = async () => { - console.log("Polling..."); - const response = await fetch(url); + const poller = async () => { + console.log("Polling..."); + const response = await fetch(url); - if (!response.ok) { - throw new Error(`HTTP error! Status: ${response.status}`); - } + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } - const data = await response.json(); + const { + data: { compact: _compact }, + } = await response.json(); + const compact = { + hash: _compact.hash, + claimChain: _compact.claimChain, + compact: { + arbiter: _compact.compact_arbiter, + sponsor: _compact.compact_sponsor, + nonce: _compact.compact_nonce, + expires: _compact.compact_expires, + id: _compact.compact_id, + amount: _compact.compact_amount, + }, + intent: { + token: _compact.intent_token, + amount: _compact.intent_amount, + fee: _compact.intent_fee, + chainId: _compact.intent_chainId, + recipient: _compact.intent_recipient, + }, + allocatorSignature: _compact.allocatorSignature, + sponsorSignature: _compact.sponsorSignature, + filled: _compact.filled, + }; - handler(data.data.compact); + handler(compact as TResolve); - setTimeout(poller, interval); - }; + setTimeout(poller, interval); + }; - poller(); + poller(); } diff --git a/typescript/solver/solvers/compact/metadata.yaml b/typescript/solver/solvers/compact/metadata.yaml index 891a9754..0073c708 100644 --- a/typescript/solver/solvers/compact/metadata.yaml +++ b/typescript/solver/solvers/compact/metadata.yaml @@ -1,9 +1,11 @@ -solverName: "Eco" -intentSource: - address: "0x734a3d5a8D691d9b911674E682De5f06517c79ec" - chainId: 11155420 - chainName: "optimism-sepolia" -adapters: - - address: "0x218FB5210d4eE248f046F3EC8B5Dd1c7Bc0756e5" - chainId: 84532 - chainName: "base-sepolia" +solverName: "The Compact" +arbiters: + - address: "0x088470910056221862d18fF2e65ffaeC96ec6dA4" + chainId: 1 + chainName: "ethereum" + - address: "0x57F0638d4fba79DB978c4eE1B73d469ea21014b2" + chainId: 10 + chainName: "optimism" + - address: "0x43b60b47764B6460c96349A1B414214BBa7F22c9" + chainId: 8453 + chainName: "base" diff --git a/typescript/solver/solvers/compact/utils.ts b/typescript/solver/solvers/compact/utils.ts index 9af3cbcf..260a1fc6 100644 --- a/typescript/solver/solvers/compact/utils.ts +++ b/typescript/solver/solvers/compact/utils.ts @@ -1,127 +1,65 @@ import { formatUnits } from "@ethersproject/units"; import type { MultiProvider } from "@hyperlane-xyz/sdk"; -import type { BigNumber } from "ethers"; import { createLogger } from "../../logger.js"; -import type { IntentCreatedEventObject } from "../../typechain/eco/contracts/IntentSource.js"; import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; -import { HyperProver__factory } from "../../typechain/factories/eco/contracts/HyperProver__factory.js"; -import { IntentSource__factory } from "../../typechain/factories/eco/contracts/IntentSource__factory.js"; +import { + HyperlaneArbiter__factory, + TheCompact__factory, +} from "../../typechain/factories/compact/contracts"; + import { getMetadata } from "../utils.js"; -import type { EcoMetadata } from "./types.js"; +import type { Compact, CompactMetadata } from "./types.js"; -export const metadata = getMetadata(import.meta.dirname); +export const metadata = getMetadata(import.meta.dirname); export const log = createLogger(metadata.solverName); -export async function withdrawRewards( - intent: IntentCreatedEventObject, - intentSource: EcoMetadata["intentSource"], - multiProvider: MultiProvider, - solverName: string, -) { - log.info({ - msg: "Settling Intent", - intent: `${solverName}-${intent._hash}`, - }); - - const { _hash, _prover } = intent; - const signer = multiProvider.getSigner(intentSource.chainId); - const claimantAddress = await signer.getAddress(); - const prover = HyperProver__factory.connect(_prover, signer); - - await new Promise((resolve) => - prover.once( - prover.filters.IntentProven(_hash, claimantAddress), - async () => { - log.debug(`${solverName} - Intent proven: ${_hash}`); - - const settler = IntentSource__factory.connect( - intentSource.address, - signer, - ); - const tx = await settler.withdrawRewards(_hash); - const receipt = await tx.wait(); - const baseUrl = multiProvider.getChainMetadata(intentSource.chainId) - .blockExplorers?.[0].url; - - const txInfo = baseUrl - ? `${baseUrl}/tx/${receipt.transactionHash}` - : receipt.transactionHash; - - log.info({ - msg: "Settled Intent", - intent: `${solverName}-${_hash}`, - txDetails: txInfo, - txHash: receipt.transactionHash, - }); - - resolve(_hash); - }, - ), - ); -} - export async function retrieveOriginInfo( - intent: IntentCreatedEventObject, - intentSource: EcoMetadata["intentSource"], + intent: Compact, multiProvider: MultiProvider, ): Promise> { - const originInfo = await Promise.all( - intent._rewardTokens.map(async (tokenAddress, index) => { - const erc20 = Erc20__factory.connect( - tokenAddress, - multiProvider.getProvider(intentSource.chainId), - ); - const [decimals, symbol] = await Promise.all([ - erc20.decimals(), - erc20.symbol(), - ]); - const amount = intent._rewardAmounts[index]; - - return { amount, decimals, symbol }; - }), + const provider = multiProvider.getProvider(intent.claimChain); + const arbiterData = metadata.arbiters.find( + (a) => a.chainId == intent.claimChain, + )!; + const arbiter = HyperlaneArbiter__factory.connect( + arbiterData.address, + provider, ); - - return originInfo.map( - ({ amount, decimals, symbol }) => - `${formatUnits(amount, decimals)} ${symbol} in on ${intentSource.chainName}`, + const compact = TheCompact__factory.connect( + await arbiter.theCompact(), + provider, ); + const [tokenAddress] = await compact.getLockDetails(intent.compact.id); + const erc20 = Erc20__factory.connect(tokenAddress, provider); + const [decimals, symbol] = await Promise.all([ + erc20.decimals(), + erc20.symbol(), + ]); + const amount = intent.compact.amount; + + return [ + `${formatUnits(amount, decimals)} ${symbol} in on ${arbiterData.chainName}`, + ]; } export async function retrieveTargetInfo( - intent: IntentCreatedEventObject, - adapters: EcoMetadata["adapters"], + intent: Compact, multiProvider: MultiProvider, ): Promise> { - const erc20Interface = Erc20__factory.createInterface(); - - const targetInfo = await Promise.all( - intent._targets.map(async (tokenAddress, index) => { - const erc20 = Erc20__factory.connect( - tokenAddress, - multiProvider.getProvider(intent._destinationChain.toString()), - ); - const [decimals, symbol] = await Promise.all([ - erc20.decimals(), - erc20.symbol(), - ]); - - const [, amount] = erc20Interface.decodeFunctionData( - "transfer", - intent._data[index], - ) as [string, BigNumber]; - - return { amount, decimals, symbol }; - }), - ); - - const targetChain = adapters.find( - ({ chainId }) => chainId === intent._destinationChain.toNumber(), - ); - - return targetInfo.map( - ({ amount, decimals, symbol }) => - `${formatUnits(amount, decimals)} ${symbol} out on ${targetChain?.chainName ?? "UNKNOWN_CHAIN"}`, - ); + const arbiterData = metadata.arbiters.find( + (a) => a.chainId == intent.intent.chainId, + )!; + const provider = multiProvider.getProvider(intent.intent.chainId); + const erc20 = Erc20__factory.connect(intent.intent.token, provider); + const [decimals, symbol] = await Promise.all([ + erc20.decimals(), + erc20.symbol(), + ]); + const amount = intent.intent.amount; + + return [ + `${formatUnits(amount, decimals)} ${symbol} out on ${arbiterData.chainName ?? "UNKNOWN_CHAIN"}`, + ]; } From 389274153e134ba412ee3d47d6a47baa14a17f9b Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 29 Nov 2024 15:26:52 +0100 Subject: [PATCH 4/8] retrieve quote for the compact MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Tomás Rojas --- typescript/solver/solvers/compact/filler.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/typescript/solver/solvers/compact/filler.ts b/typescript/solver/solvers/compact/filler.ts index fab7e5db..76d91d8d 100644 --- a/typescript/solver/solvers/compact/filler.ts +++ b/typescript/solver/solvers/compact/filler.ts @@ -1,7 +1,8 @@ -import { Zero } from "@ethersproject/constants"; import { type MultiProvider } from "@hyperlane-xyz/sdk"; import { type Result } from "@hyperlane-xyz/utils"; +import { BigNumber } from "@ethersproject/bignumber"; +import { HyperlaneArbiter__factory } from "../../typechain/factories/compact/contracts/HyperlaneArbiter__factory.js"; import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; import type { Compact, CompactMetadata } from "./types.js"; import { @@ -10,7 +11,6 @@ import { retrieveOriginInfo, retrieveTargetInfo, } from "./utils.js"; -import { HyperlaneArbiter__factory } from "../../typechain/factories/compact/contracts/HyperlaneArbiter__factory.js"; export const create = (multiProvider: MultiProvider) => { const { solverName } = setup(); @@ -161,7 +161,13 @@ async function fill( filler, ); - const value = 0; + const compact = JSON.stringify(intent); + const apiUrl = `https://the-compact-allocator-api.vercel.app/api/quote?compact=${compact}`; + const response = await fetch(apiUrl); + const data = await response.json(); + + const value = BigNumber.from(data.fee).add(intent.intent.amount); + const tx = await arbiter.fill( intent.claimChain, intent.compact, From ebaf817cb0ccbe0b41a6fa0396bd7f0aa0b5199d Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 29 Nov 2024 15:37:14 +0100 Subject: [PATCH 5/8] support native transfers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Tomás Rojas --- typescript/solver/solvers/compact/filler.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/typescript/solver/solvers/compact/filler.ts b/typescript/solver/solvers/compact/filler.ts index 76d91d8d..f1c982a6 100644 --- a/typescript/solver/solvers/compact/filler.ts +++ b/typescript/solver/solvers/compact/filler.ts @@ -2,6 +2,7 @@ import { type MultiProvider } from "@hyperlane-xyz/sdk"; import { type Result } from "@hyperlane-xyz/utils"; import { BigNumber } from "@ethersproject/bignumber"; +import { AddressZero } from "@ethersproject/constants"; import { HyperlaneArbiter__factory } from "../../typechain/factories/compact/contracts/HyperlaneArbiter__factory.js"; import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; import type { Compact, CompactMetadata } from "./types.js"; @@ -107,9 +108,14 @@ async function prepareIntent( const areTargetFundsAvailable = await Promise.all( Object.entries(requiredAmountsByTarget).map( async ([target, requiredAmount]) => { - const erc20 = Erc20__factory.connect(target, signer); + let balance: BigNumber; + if (target === AddressZero) { + balance = await signer.getBalance(); + } else { + const erc20 = Erc20__factory.connect(target, signer); + balance = await erc20.balanceOf(fillerAddress); + } - const balance = await erc20.balanceOf(fillerAddress); return balance.gte(requiredAmount); }, ), @@ -125,8 +131,11 @@ async function prepareIntent( await Promise.all( Object.entries(requiredAmountsByTarget).map( async ([target, requiredAmount]) => { - const erc20 = Erc20__factory.connect(target, signer); + if (target === AddressZero) { + return; + } + const erc20 = Erc20__factory.connect(target, signer); const tx = await erc20.approve(arbiter.address, requiredAmount); await tx.wait(); }, From 4edc16cde9c1ca34e2f327df7bcdb6e34971ff16 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 29 Nov 2024 15:45:43 +0100 Subject: [PATCH 6/8] wip: support multiple compacts --- typescript/solver/index.ts | 19 ++++++++++++------- typescript/solver/solvers/compact/listener.ts | 10 ++++++---- typescript/solver/solvers/index.ts | 2 ++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/typescript/solver/index.ts b/typescript/solver/index.ts index 330aaeb6..a59ce830 100644 --- a/typescript/solver/index.ts +++ b/typescript/solver/index.ts @@ -14,16 +14,21 @@ const main = () => { const multiProvider = getMultiProvider(); // TODO: implement a way to choose different listeners and fillers - const ecoListener = solvers["eco"].listener.create(); - const ecoFiller = solvers["eco"].filler.create(multiProvider); + // const ecoListener = solvers["eco"].listener.create(); + // const ecoFiller = solvers["eco"].filler.create(multiProvider); - ecoListener(ecoFiller); + // ecoListener(ecoFiller); - const hyperlane7683Listener = solvers["hyperlane7683"].listener.create(); - const hyperlane7683Filler = - solvers["hyperlane7683"].filler.create(multiProvider); + // const hyperlane7683Listener = solvers["hyperlane7683"].listener.create(); + // const hyperlane7683Filler = + // solvers["hyperlane7683"].filler.create(multiProvider); - hyperlane7683Listener(hyperlane7683Filler); + // hyperlane7683Listener(hyperlane7683Filler); + + const compactListener = solvers["compact"].listener.create(); + const compactFiller = solvers["compact"].filler.create(multiProvider); + + compactListener(compactFiller); }; main(); diff --git a/typescript/solver/solvers/compact/listener.ts b/typescript/solver/solvers/compact/listener.ts index 7c99c325..8babfd68 100644 --- a/typescript/solver/solvers/compact/listener.ts +++ b/typescript/solver/solvers/compact/listener.ts @@ -31,10 +31,12 @@ function poll( throw new Error(`HTTP error! Status: ${response.status}`); } + // This is reading all the non-filled compacts const { - data: { compact: _compact }, + data: { compacts: _compacts } } = await response.json(); - const compact = { + + const compacts = _compacts.map((_compact: any) => ({ hash: _compact.hash, claimChain: _compact.claimChain, compact: { @@ -55,9 +57,9 @@ function poll( allocatorSignature: _compact.allocatorSignature, sponsorSignature: _compact.sponsorSignature, filled: _compact.filled, - }; + })); - handler(compact as TResolve); + compacts.forEach((compact) => handler(compact as TResolve)); setTimeout(poller, interval); }; diff --git a/typescript/solver/solvers/index.ts b/typescript/solver/solvers/index.ts index 4c1ad5c7..472b1046 100644 --- a/typescript/solver/solvers/index.ts +++ b/typescript/solver/solvers/index.ts @@ -1,2 +1,4 @@ +export * as compact from "./compact/index.js"; export * as eco from "./eco/index.js"; export * as hyperlane7683 from "./hyperlane7683/index.js"; + From 3bad8fce415ebfd84ae42f3d3482b8e44290257d Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 29 Nov 2024 21:03:21 +0100 Subject: [PATCH 7/8] make the filler fill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Tomás Rojas Co-Authored-By: Lisandro Corbalan --- typescript/solver/solvers/compact/filler.ts | 26 +++++++------------ typescript/solver/solvers/compact/listener.ts | 6 ++++- typescript/solver/solvers/compact/types.ts | 1 + typescript/solver/solvers/compact/utils.ts | 17 +++++++----- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/typescript/solver/solvers/compact/filler.ts b/typescript/solver/solvers/compact/filler.ts index f1c982a6..e53c6e87 100644 --- a/typescript/solver/solvers/compact/filler.ts +++ b/typescript/solver/solvers/compact/filler.ts @@ -14,7 +14,7 @@ import { } from "./utils.js"; export const create = (multiProvider: MultiProvider) => { - const { solverName } = setup(); + const { solverName, arbiters } = setup(); return async function compact(intent: Compact) { const origin = await retrieveOriginInfo(intent, multiProvider); @@ -27,12 +27,7 @@ export const create = (multiProvider: MultiProvider) => { target: target.join(", "), }); - const result = await prepareIntent( - intent, - adapters, - multiProvider, - solverName, - ); + const result = await prepareIntent(intent, arbiters, multiProvider, solverName); if (!result.success) { log.error( @@ -43,8 +38,7 @@ export const create = (multiProvider: MultiProvider) => { await fill( intent, - result.data.adapter, - intentSource, + result.data.arbiter, multiProvider, solverName, ); @@ -163,17 +157,15 @@ async function fill( }); const _chainId = intent.intent.chainId; - + const filler = multiProvider.getSigner(_chainId); - const arbiter = HyperlaneArbiter__factory.connect( - arbiterInfo.address, - filler, - ); + const arbiter = HyperlaneArbiter__factory.connect(arbiterInfo.address, filler); const compact = JSON.stringify(intent); - const apiUrl = `https://the-compact-allocator-api.vercel.app/api/quote?compact=${compact}`; + const baseUrl = 'https://the-compact-allocator-api.vercel.app/api'; + const apiUrl = `${baseUrl}/quote?compact=${compact}`; const response = await fetch(apiUrl); - const data = await response.json(); + const { data } = await response.json(); const value = BigNumber.from(data.fee).add(intent.intent.amount); @@ -187,6 +179,8 @@ async function fill( ); const receipt = await tx.wait(); + const setFilledUrl = `${baseUrl}/compacts/${intent.id}/setFilled`; + await fetch(setFilledUrl, { method: "POST" }); log.info({ msg: "Filled Intent", diff --git a/typescript/solver/solvers/compact/listener.ts b/typescript/solver/solvers/compact/listener.ts index 8babfd68..0171c373 100644 --- a/typescript/solver/solvers/compact/listener.ts +++ b/typescript/solver/solvers/compact/listener.ts @@ -37,6 +37,7 @@ function poll( } = await response.json(); const compacts = _compacts.map((_compact: any) => ({ + id: _compact.id, hash: _compact.hash, claimChain: _compact.claimChain, compact: { @@ -59,7 +60,10 @@ function poll( filled: _compact.filled, })); - compacts.forEach((compact) => handler(compact as TResolve)); + + for await (const compact of compacts) { + await handler(compact as TResolve); + } setTimeout(poller, interval); }; diff --git a/typescript/solver/solvers/compact/types.ts b/typescript/solver/solvers/compact/types.ts index 06ab5103..40311e51 100644 --- a/typescript/solver/solvers/compact/types.ts +++ b/typescript/solver/solvers/compact/types.ts @@ -8,6 +8,7 @@ export type CompactMetadata = { }; export type Compact = { + id: number; hash: string; claimChain: number; compact: { diff --git a/typescript/solver/solvers/compact/utils.ts b/typescript/solver/solvers/compact/utils.ts index 260a1fc6..f30bd486 100644 --- a/typescript/solver/solvers/compact/utils.ts +++ b/typescript/solver/solvers/compact/utils.ts @@ -1,12 +1,13 @@ +import { AddressZero } from "@ethersproject/constants"; import { formatUnits } from "@ethersproject/units"; import type { MultiProvider } from "@hyperlane-xyz/sdk"; import { createLogger } from "../../logger.js"; -import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; import { HyperlaneArbiter__factory, TheCompact__factory, -} from "../../typechain/factories/compact/contracts"; +} from "../../typechain/factories/compact/contracts/index.js"; +import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; import { getMetadata } from "../utils.js"; import type { Compact, CompactMetadata } from "./types.js"; @@ -32,10 +33,13 @@ export async function retrieveOriginInfo( provider, ); const [tokenAddress] = await compact.getLockDetails(intent.compact.id); + + const isNative = tokenAddress === AddressZero; + const erc20 = Erc20__factory.connect(tokenAddress, provider); const [decimals, symbol] = await Promise.all([ - erc20.decimals(), - erc20.symbol(), + isNative ? 18 : erc20.decimals(), + isNative ? 'ETH' : erc20.symbol(), ]); const amount = intent.compact.amount; @@ -53,9 +57,10 @@ export async function retrieveTargetInfo( )!; const provider = multiProvider.getProvider(intent.intent.chainId); const erc20 = Erc20__factory.connect(intent.intent.token, provider); + const isNative = intent.intent.token === AddressZero; const [decimals, symbol] = await Promise.all([ - erc20.decimals(), - erc20.symbol(), + isNative ? 18 : erc20.decimals(), + isNative ? 'ETH' : erc20.symbol(), ]); const amount = intent.intent.amount; From 4d50411d2d0de756235f5e08f21e96a64c31a8bb Mon Sep 17 00:00:00 2001 From: Lisandro Corbalan Date: Wed, 11 Dec 2024 17:12:05 -0300 Subject: [PATCH 8/8] adapt The Compact solver to new config schema Co-Authored-By: fernandomg --- typescript/solver/.env.example | 1 + .../solvers/compact/config/allowBlockLists.ts | 32 ++++++++++ .../solver/solvers/compact/config/index.ts | 6 ++ .../solver/solvers/compact/config/metadata.ts | 23 ++++++++ typescript/solver/solvers/compact/filler.ts | 58 +++++++++---------- typescript/solver/solvers/compact/listener.ts | 46 ++++++--------- .../solver/solvers/compact/metadata.yaml | 11 ---- typescript/solver/solvers/compact/types.ts | 24 +++++--- typescript/solver/solvers/compact/utils.ts | 13 ++--- 9 files changed, 128 insertions(+), 86 deletions(-) create mode 100644 typescript/solver/solvers/compact/config/allowBlockLists.ts create mode 100644 typescript/solver/solvers/compact/config/index.ts create mode 100644 typescript/solver/solvers/compact/config/metadata.ts delete mode 100644 typescript/solver/solvers/compact/metadata.yaml diff --git a/typescript/solver/.env.example b/typescript/solver/.env.example index 99e2503c..6c3cd5da 100644 --- a/typescript/solver/.env.example +++ b/typescript/solver/.env.example @@ -1,2 +1,3 @@ PRIVATE_KEY= MNEMONIC= +COMPACT_API_KEY= diff --git a/typescript/solver/solvers/compact/config/allowBlockLists.ts b/typescript/solver/solvers/compact/config/allowBlockLists.ts new file mode 100644 index 00000000..7959392a --- /dev/null +++ b/typescript/solver/solvers/compact/config/allowBlockLists.ts @@ -0,0 +1,32 @@ +import { + AllowBlockLists, + AllowBlockListsSchema, +} from "../../../config/types.js"; + +// Example config +// [ +// { +// senderAddress: "*", +// destinationDomain: ["1"], +// recipientAddress: "*" +// }, +// { +// senderAddress: ["0xca7f632e91B592178D83A70B404f398c0a51581F"], +// destinationDomain: ["42220", "43114"], +// recipientAddress: "*" +// }, +// { +// senderAddress: "*", +// destinationDomain: ["42161", "420"], +// recipientAddress: ["0xca7f632e91B592178D83A70B404f398c0a51581F"] +// } +// ] + +const allowBlockLists: AllowBlockLists = { + allowList: [], + blockList: [], +}; + +AllowBlockListsSchema.parse(allowBlockLists); + +export default allowBlockLists; diff --git a/typescript/solver/solvers/compact/config/index.ts b/typescript/solver/solvers/compact/config/index.ts new file mode 100644 index 00000000..e8b8b0e9 --- /dev/null +++ b/typescript/solver/solvers/compact/config/index.ts @@ -0,0 +1,6 @@ +import allowBlockLists from "./allowBlockLists.js"; +import metadata from "./metadata.js"; + +const COMPACT_API_KEY = process.env.COMPACT_API_KEY; + +export { allowBlockLists, metadata, COMPACT_API_KEY }; diff --git a/typescript/solver/solvers/compact/config/metadata.ts b/typescript/solver/solvers/compact/config/metadata.ts new file mode 100644 index 00000000..f8cb2045 --- /dev/null +++ b/typescript/solver/solvers/compact/config/metadata.ts @@ -0,0 +1,23 @@ +import { type CompactMetadata, CompactMetadataSchema } from "../types.js"; + +const metadata: CompactMetadata = { + protocolName: "The Compact", + arbiters: [ + { + address: "0x088470910056221862d18fF2e65ffaeC96ec6dA4", + chainName: "ethereum" + }, + { + address: "0x57F0638d4fba79DB978c4eE1B73d469ea21014b2", + chainName: "optimism" + }, + { + address: "0x43b60b47764B6460c96349A1B414214BBa7F22c9", + chainName: "base" + } + ] +}; + +CompactMetadataSchema.parse(metadata); + +export default metadata; diff --git a/typescript/solver/solvers/compact/filler.ts b/typescript/solver/solvers/compact/filler.ts index e53c6e87..2abf0704 100644 --- a/typescript/solver/solvers/compact/filler.ts +++ b/typescript/solver/solvers/compact/filler.ts @@ -8,13 +8,16 @@ import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__facto import type { Compact, CompactMetadata } from "./types.js"; import { log, - metadata, retrieveOriginInfo, retrieveTargetInfo, } from "./utils.js"; +import { + chainIds +} from "../../config/index.js"; +import { metadata , COMPACT_API_KEY } from "./config/index.js"; export const create = (multiProvider: MultiProvider) => { - const { solverName, arbiters } = setup(); + const { protocolName, arbiters } = setup(); return async function compact(intent: Compact) { const origin = await retrieveOriginInfo(intent, multiProvider); @@ -22,16 +25,16 @@ export const create = (multiProvider: MultiProvider) => { log.info({ msg: "Intent Indexed", - intent: `${solverName}-${intent.hash}`, + intent: `${protocolName}-${intent.hash}`, origin: origin.join(", "), target: target.join(", "), }); - const result = await prepareIntent(intent, arbiters, multiProvider, solverName); + const result = await prepareIntent(intent, arbiters, multiProvider, protocolName); if (!result.success) { log.error( - `${solverName} Failed evaluating filling Intent: ${result.error}`, + `${protocolName} Failed evaluating filling Intent: ${result.error}`, ); return; } @@ -40,27 +43,14 @@ export const create = (multiProvider: MultiProvider) => { intent, result.data.arbiter, multiProvider, - solverName, + protocolName, ); - // await withdrawRewards(intent, intentSource, multiProvider, solverName); + // await withdrawRewards(intent, intentSource, multiProvider, protocolName); }; }; function setup() { - if (!metadata.solverName) { - metadata.solverName = "UNKNOWN_SOLVER"; - } - - if ( - !metadata.arbiters.every( - ({ address, chainId, chainName }) => - !!address && !!chainId && !!chainName, - ) - ) { - throw new Error("Arbiter address must be provided"); - } - return metadata; } @@ -70,17 +60,19 @@ async function prepareIntent( intent: Compact, arbiters: CompactMetadata["arbiters"], multiProvider: MultiProvider, - solverName: string, -): Promise> { + protocolName: string, +): Promise> { log.info({ msg: "Evaluating filling Intent", - intent: `${solverName}-${intent.hash}`, + intent: `${protocolName}-${intent.hash}`, }); try { const destinationChainId = intent.intent.chainId; const arbiter = arbiters.find( - ({ chainId }) => chainId === destinationChainId, + ({ chainName }) => chainIds[chainName] === destinationChainId, ); if (!arbiter) { @@ -120,7 +112,7 @@ async function prepareIntent( } log.debug( - `${solverName} - Approving tokens: ${intent.hash}, for ${arbiter.address}`, + `${protocolName} - Approving tokens: ${intent.hash}, for ${arbiter.address}`, ); await Promise.all( Object.entries(requiredAmountsByTarget).map( @@ -149,23 +141,25 @@ async function fill( intent: Compact, arbiterInfo: CompactMetadata["arbiters"][number], multiProvider: MultiProvider, - solverName: string, + protocolName: string, ): Promise { log.info({ msg: "Filling Intent", - intent: `${solverName}-${intent.hash}`, + intent: `${protocolName}-${intent.hash}`, }); const _chainId = intent.intent.chainId; - + const filler = multiProvider.getSigner(_chainId); const arbiter = HyperlaneArbiter__factory.connect(arbiterInfo.address, filler); + if (!COMPACT_API_KEY) throw new Error("COMPACT_API_KEY is not set"); + const compact = JSON.stringify(intent); const baseUrl = 'https://the-compact-allocator-api.vercel.app/api'; const apiUrl = `${baseUrl}/quote?compact=${compact}`; - const response = await fetch(apiUrl); - const { data } = await response.json(); + const response = await fetch(apiUrl, {method: "GET", headers: {"X-API-KEY": COMPACT_API_KEY}}); + const { data } = await response.json() as any; const value = BigNumber.from(data.fee).add(intent.intent.amount); @@ -180,11 +174,11 @@ async function fill( const receipt = await tx.wait(); const setFilledUrl = `${baseUrl}/compacts/${intent.id}/setFilled`; - await fetch(setFilledUrl, { method: "POST" }); + await fetch(setFilledUrl, { method: "POST", headers: {"X-API-KEY": COMPACT_API_KEY} }); log.info({ msg: "Filled Intent", - intent: `${solverName}-${intent.hash}`, + intent: `${protocolName}-${intent.hash}`, txDetails: receipt.transactionHash, txHash: receipt.transactionHash, }); diff --git a/typescript/solver/solvers/compact/listener.ts b/typescript/solver/solvers/compact/listener.ts index 0171c373..160903bd 100644 --- a/typescript/solver/solvers/compact/listener.ts +++ b/typescript/solver/solvers/compact/listener.ts @@ -1,4 +1,9 @@ import type { Compact } from "./types.js"; +import { allowBlockLists, COMPACT_API_KEY } from "./config/index.js"; +import { + chainIdsToName, + isAllowedIntent, +} from "../../config/index.js"; export const create = () => { return function (handler: (args: Compact) => void) { @@ -25,7 +30,8 @@ function poll( const poller = async () => { console.log("Polling..."); - const response = await fetch(url); + if (!COMPACT_API_KEY) throw new Error("COMPACT_API_KEY is not set"); + const response = await fetch(url, {method: "GET", headers: {"X-API-KEY": COMPACT_API_KEY}}); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); @@ -33,33 +39,17 @@ function poll( // This is reading all the non-filled compacts const { - data: { compacts: _compacts } - } = await response.json(); - - const compacts = _compacts.map((_compact: any) => ({ - id: _compact.id, - hash: _compact.hash, - claimChain: _compact.claimChain, - compact: { - arbiter: _compact.compact_arbiter, - sponsor: _compact.compact_sponsor, - nonce: _compact.compact_nonce, - expires: _compact.compact_expires, - id: _compact.compact_id, - amount: _compact.compact_amount, - }, - intent: { - token: _compact.intent_token, - amount: _compact.intent_amount, - fee: _compact.intent_fee, - chainId: _compact.intent_chainId, - recipient: _compact.intent_recipient, - }, - allocatorSignature: _compact.allocatorSignature, - sponsorSignature: _compact.sponsorSignature, - filled: _compact.filled, - })); - + data: { compacts } + } = await response.json() as { data: { compacts: Compact[] } }; + + // This is filtering the compacts to only include the ones that are allowed + compacts.filter((compact: Compact) => + isAllowedIntent(allowBlockLists, { + senderAddress: compact.compact.sponsor, + destinationDomain: chainIdsToName[compact.intent.chainId.toString()], + recipientAddress: compact.intent.recipient, + }) + ); for await (const compact of compacts) { await handler(compact as TResolve); diff --git a/typescript/solver/solvers/compact/metadata.yaml b/typescript/solver/solvers/compact/metadata.yaml deleted file mode 100644 index 0073c708..00000000 --- a/typescript/solver/solvers/compact/metadata.yaml +++ /dev/null @@ -1,11 +0,0 @@ -solverName: "The Compact" -arbiters: - - address: "0x088470910056221862d18fF2e65ffaeC96ec6dA4" - chainId: 1 - chainName: "ethereum" - - address: "0x57F0638d4fba79DB978c4eE1B73d469ea21014b2" - chainId: 10 - chainName: "optimism" - - address: "0x43b60b47764B6460c96349A1B414214BBa7F22c9" - chainId: 8453 - chainName: "base" diff --git a/typescript/solver/solvers/compact/types.ts b/typescript/solver/solvers/compact/types.ts index 40311e51..1c844409 100644 --- a/typescript/solver/solvers/compact/types.ts +++ b/typescript/solver/solvers/compact/types.ts @@ -1,11 +1,19 @@ -export type CompactMetadata = { - solverName: string; - arbiters: Array<{ - address: string; - chainId: number; - chainName?: string; - }>; -}; +import z from "zod"; +import { chainNames } from "../../config/index.js"; + +export const CompactMetadataSchema = z.object({ + protocolName: z.string(), + arbiters: z.array( + z.object({ + address: z.string(), + chainName: z.string().refine((name) => chainNames.includes(name), { + message: "Invalid chainName", + }), + }), + ), +}); + +export type CompactMetadata = z.infer; export type Compact = { id: number; diff --git a/typescript/solver/solvers/compact/utils.ts b/typescript/solver/solvers/compact/utils.ts index f30bd486..43a99676 100644 --- a/typescript/solver/solvers/compact/utils.ts +++ b/typescript/solver/solvers/compact/utils.ts @@ -8,13 +8,12 @@ import { TheCompact__factory, } from "../../typechain/factories/compact/contracts/index.js"; import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js"; +import { metadata } from "./config/index.js"; +import { chainIds } from "../../config/index.js"; -import { getMetadata } from "../utils.js"; -import type { Compact, CompactMetadata } from "./types.js"; +import type { Compact } from "./types.js"; -export const metadata = getMetadata(import.meta.dirname); - -export const log = createLogger(metadata.solverName); +export const log = createLogger(metadata.protocolName); export async function retrieveOriginInfo( intent: Compact, @@ -22,7 +21,7 @@ export async function retrieveOriginInfo( ): Promise> { const provider = multiProvider.getProvider(intent.claimChain); const arbiterData = metadata.arbiters.find( - (a) => a.chainId == intent.claimChain, + (a) => chainIds[a.chainName] == intent.claimChain, )!; const arbiter = HyperlaneArbiter__factory.connect( arbiterData.address, @@ -53,7 +52,7 @@ export async function retrieveTargetInfo( multiProvider: MultiProvider, ): Promise> { const arbiterData = metadata.arbiters.find( - (a) => a.chainId == intent.intent.chainId, + (a) => chainIds[a.chainName] == intent.intent.chainId, )!; const provider = multiProvider.getProvider(intent.intent.chainId); const erc20 = Erc20__factory.connect(intent.intent.token, provider);