From ddc6f0870358295e583663e4a7d91e906fc41d0f Mon Sep 17 00:00:00 2001 From: Alex Kuzmin <6849426+alxkzmn@users.noreply.github.com> Date: Fri, 1 Sep 2023 11:21:04 +0800 Subject: [PATCH] Refactor smart contract (#141) * Refactor smart contract * Code review fixes * Add onlyOwner modifier * Code review refactorings --- backend/build.rs | 22 +- backend/src/apis/fetch.rs | 4 +- .../contracts/abi/ERC20BalanceRetriever.json | 1 - .../contracts/abi/ETHBalanceRetriever.json | 1 - .../src/contracts/abi/EVMAddressVerifier.json | 1 - backend/src/contracts/abi/MockERC20.json | 1 - backend/src/contracts/abi/Summa.json | 2 +- backend/src/contracts/deployments.json | 2 +- .../generated/erc20_balance_retriever.rs | 1695 -- .../generated/eth_balance_retriever.rs | 1379 -- .../generated/evm_address_verifier.rs | 3067 ---- backend/src/contracts/generated/mod.rs | 4 - .../src/contracts/generated/summa_contract.rs | 14090 +++++++--------- .../{generated => mock}/mock_erc20.rs | 0 backend/src/contracts/mock/mod.rs | 1 + backend/src/contracts/mod.rs | 1 + backend/src/contracts/signer.rs | 13 +- backend/src/contracts/tests.rs | 147 +- contracts/scripts/deploy.ts | 4 - contracts/src/ERC20BalanceRetriever.sol | 26 - contracts/src/ETHBalanceRetriever.sol | 24 - contracts/src/EVMAddressVerifier.sol | 24 - contracts/src/Summa.sol | 194 +- .../interfaces/IAddressOwnershipVerifier.sol | 22 - .../src/interfaces/IBalanceRetriever.sol | 25 - contracts/src/mock/InvalidAddressVerifier.sol | 24 - .../src/mock/InvalidBalanceRetriever.sol | 18 - contracts/src/mock/MockERC20.sol | 14 - contracts/test/Summa.ts | 418 +- 29 files changed, 6709 insertions(+), 14515 deletions(-) delete mode 100644 backend/src/contracts/abi/ERC20BalanceRetriever.json delete mode 100644 backend/src/contracts/abi/ETHBalanceRetriever.json delete mode 100644 backend/src/contracts/abi/EVMAddressVerifier.json delete mode 100644 backend/src/contracts/abi/MockERC20.json delete mode 100644 backend/src/contracts/generated/erc20_balance_retriever.rs delete mode 100644 backend/src/contracts/generated/eth_balance_retriever.rs delete mode 100644 backend/src/contracts/generated/evm_address_verifier.rs rename backend/src/contracts/{generated => mock}/mock_erc20.rs (100%) create mode 100644 backend/src/contracts/mock/mod.rs delete mode 100644 contracts/src/ERC20BalanceRetriever.sol delete mode 100644 contracts/src/ETHBalanceRetriever.sol delete mode 100644 contracts/src/EVMAddressVerifier.sol delete mode 100644 contracts/src/interfaces/IAddressOwnershipVerifier.sol delete mode 100644 contracts/src/interfaces/IBalanceRetriever.sol delete mode 100644 contracts/src/mock/InvalidAddressVerifier.sol delete mode 100644 contracts/src/mock/InvalidBalanceRetriever.sol delete mode 100644 contracts/src/mock/MockERC20.sol diff --git a/backend/build.rs b/backend/build.rs index a4f57b54..26caeecb 100644 --- a/backend/build.rs +++ b/backend/build.rs @@ -2,27 +2,7 @@ use ethers::prelude::Abigen; use std::{fs::OpenOptions, io::Write, path::PathBuf}; fn main() { - let contracts = vec![ - ( - "src/contracts/generated/erc20_balance_retriever.rs", - "ERC20BalanceRetriever", - "ERC20BalanceRetriever", - ), - ( - "src/contracts/generated/eth_balance_retriever.rs", - "ETHBalanceRetriever", - "ETHBalanceRetriever", - ), - ( - "src/contracts/generated/evm_address_verifier.rs", - "EVMAddressVerifier", - "EVMAddressVerifier", - ), - ( - "src/contracts/generated/mock_erc20.rs", - "MockERC20", - "MockERC20", - ), + let contracts = [ ( "src/contracts/generated/summa_contract.rs", "Summa", diff --git a/backend/src/apis/fetch.rs b/backend/src/apis/fetch.rs index 48ee5048..90178296 100644 --- a/backend/src/apis/fetch.rs +++ b/backend/src/apis/fetch.rs @@ -41,7 +41,7 @@ pub async fn fetch_asset_sums<'a, M: Middleware + 'a>( for contract in &token_contracts { for addr in exchange_addresses.clone() { let token_balance = contract.get_token_balance(addr).call().await.unwrap(); - sum_token_balance = sum_token_balance + token_balance; + sum_token_balance += token_balance; } result.push(sum_token_balance) } @@ -53,7 +53,7 @@ pub async fn fetch_asset_sums<'a, M: Middleware + 'a>( mod tests { use super::*; - use crate::contracts::generated::mock_erc20::MockERC20; + use crate::contracts::mock::mock_erc20::MockERC20; use crate::contracts::tests::initialize_anvil; #[tokio::test] diff --git a/backend/src/contracts/abi/ERC20BalanceRetriever.json b/backend/src/contracts/abi/ERC20BalanceRetriever.json deleted file mode 100644 index baf1b033..00000000 --- a/backend/src/contracts/abi/ERC20BalanceRetriever.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"ERC20BalanceRetriever","sourceName":"src/ERC20BalanceRetriever.sol","abi":[{"inputs":[{"internalType":"bytes","name":"_address","type":"bytes"},{"internalType":"bytes","name":"args","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getAddressBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAssetType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b506102c2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063260c4cc61461003b578063896317b814610060575b600080fd5b61004e6100493660046101d6565b610086565b60405190815260200160405180910390f35b7f8ae85d849167ff996c04040c44924fd364217285e4cad818292c7ac37c0a345b61004e565b6000808380602001905181019061009d9190610243565b9050806001600160a01b03166370a08231868060200190518101906100c29190610243565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a9190610273565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015a57600080fd5b813567ffffffffffffffff8082111561017557610175610133565b604051601f8301601f19908116603f0116810190828211818310171561019d5761019d610133565b816040528381528660208588010111156101b657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156101eb57600080fd5b833567ffffffffffffffff8082111561020357600080fd5b61020f87838801610149565b9450602086013591508082111561022557600080fd5b5061023286828701610149565b925050604084013590509250925092565b60006020828403121561025557600080fd5b81516001600160a01b038116811461026c57600080fd5b9392505050565b60006020828403121561028557600080fd5b505191905056fea264697066735822122037d96d032b634c68843b702ca1dea5b61aa2bf9c24f536ce38eb466294e258e064736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063260c4cc61461003b578063896317b814610060575b600080fd5b61004e6100493660046101d6565b610086565b60405190815260200160405180910390f35b7f8ae85d849167ff996c04040c44924fd364217285e4cad818292c7ac37c0a345b61004e565b6000808380602001905181019061009d9190610243565b9050806001600160a01b03166370a08231868060200190518101906100c29190610243565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a9190610273565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015a57600080fd5b813567ffffffffffffffff8082111561017557610175610133565b604051601f8301601f19908116603f0116810190828211818310171561019d5761019d610133565b816040528381528660208588010111156101b657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156101eb57600080fd5b833567ffffffffffffffff8082111561020357600080fd5b61020f87838801610149565b9450602086013591508082111561022557600080fd5b5061023286828701610149565b925050604084013590509250925092565b60006020828403121561025557600080fd5b81516001600160a01b038116811461026c57600080fd5b9392505050565b60006020828403121561028557600080fd5b505191905056fea264697066735822122037d96d032b634c68843b702ca1dea5b61aa2bf9c24f536ce38eb466294e258e064736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/ETHBalanceRetriever.json b/backend/src/contracts/abi/ETHBalanceRetriever.json deleted file mode 100644 index fdd0f191..00000000 --- a/backend/src/contracts/abi/ETHBalanceRetriever.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"ETHBalanceRetriever","sourceName":"src/ETHBalanceRetriever.sol","abi":[{"inputs":[{"internalType":"bytes","name":"_address","type":"bytes"},{"internalType":"bytes","name":"args","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getAddressBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAssetType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50610224806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063260c4cc61461003b578063896317b814610060575b600080fd5b61004e610049366004610151565b610086565b60405190815260200160405180910390f35b7faaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff461004e565b60008380602001905181019061009c91906101be565b6001600160a01b031631949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100d557600080fd5b813567ffffffffffffffff808211156100f0576100f06100ae565b604051601f8301601f19908116603f01168101908282118183101715610118576101186100ae565b8160405283815286602085880101111561013157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561016657600080fd5b833567ffffffffffffffff8082111561017e57600080fd5b61018a878388016100c4565b945060208601359150808211156101a057600080fd5b506101ad868287016100c4565b925050604084013590509250925092565b6000602082840312156101d057600080fd5b81516001600160a01b03811681146101e757600080fd5b939250505056fea2646970667358221220c10176593ea4838ad2b27beeb3819db35957264f3e519491dc024448962d95a264736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063260c4cc61461003b578063896317b814610060575b600080fd5b61004e610049366004610151565b610086565b60405190815260200160405180910390f35b7faaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff461004e565b60008380602001905181019061009c91906101be565b6001600160a01b031631949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100d557600080fd5b813567ffffffffffffffff808211156100f0576100f06100ae565b604051601f8301601f19908116603f01168101908282118183101715610118576101186100ae565b8160405283815286602085880101111561013157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561016657600080fd5b833567ffffffffffffffff8082111561017e57600080fd5b61018a878388016100c4565b945060208601359150808211156101a057600080fd5b506101ad868287016100c4565b925050604084013590509250925092565b6000602082840312156101d057600080fd5b81516001600160a01b03811681146101e757600080fd5b939250505056fea2646970667358221220c10176593ea4838ad2b27beeb3819db35957264f3e519491dc024448962d95a264736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/EVMAddressVerifier.json b/backend/src/contracts/abi/EVMAddressVerifier.json deleted file mode 100644 index fc9835b9..00000000 --- a/backend/src/contracts/abi/EVMAddressVerifier.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"EVMAddressVerifier","sourceName":"src/EVMAddressVerifier.sol","abi":[{"inputs":[],"name":"getAddressType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"cexAddress","type":"bytes"},{"internalType":"bytes","name":"addressOwnershipProof","type":"bytes"}],"name":"verifyAddressOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50610571806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806329acc2d51461003b578063f9f207ef14610063575b600080fd5b61004e610049366004610491565b610091565b60405190151581526020015b60405180910390f35b6040517f9c73caa427dcc7a3ba321dd9ec93943758502b982786658421fd1e094bf2b5f3815260200161005a565b600080838060200190518101906100a891906104f5565b9050600061015684610150604051602001610107906020808252602a908201527f53756d6d612070726f6f66206f6620736f6c76656e637920666f722043727970604082015269746f45786368616e676560b01b606082015260800190565b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9061016f565b6001600160a01b03928316921691909114949350505050565b600080600061017e8585610193565b9150915061018b816101d8565b509392505050565b60008082516041036101c95760208301516040840151606085015160001a6101bd8782858561032a565b945094505050506101d1565b506000905060025b9250929050565b60008160048111156101ec576101ec610525565b036101f45750565b600181600481111561020857610208610525565b0361025a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561026e5761026e610525565b036102bb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610251565b60038160048111156102cf576102cf610525565b036103275760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610251565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561036157506000905060036103e5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156103b5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166103de576000600192509250506103e5565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261041557600080fd5b813567ffffffffffffffff80821115610430576104306103ee565b604051601f8301601f19908116603f01168101908282118183101715610458576104586103ee565b8160405283815286602085880101111561047157600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156104a457600080fd5b823567ffffffffffffffff808211156104bc57600080fd5b6104c886838701610404565b935060208501359150808211156104de57600080fd5b506104eb85828601610404565b9150509250929050565b60006020828403121561050757600080fd5b81516001600160a01b038116811461051e57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212209b3d2826cea761b7220b1270d1a84672fc2e70e4c247c282cdc8bbd20de43a4464736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c806329acc2d51461003b578063f9f207ef14610063575b600080fd5b61004e610049366004610491565b610091565b60405190151581526020015b60405180910390f35b6040517f9c73caa427dcc7a3ba321dd9ec93943758502b982786658421fd1e094bf2b5f3815260200161005a565b600080838060200190518101906100a891906104f5565b9050600061015684610150604051602001610107906020808252602a908201527f53756d6d612070726f6f66206f6620736f6c76656e637920666f722043727970604082015269746f45786368616e676560b01b606082015260800190565b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9061016f565b6001600160a01b03928316921691909114949350505050565b600080600061017e8585610193565b9150915061018b816101d8565b509392505050565b60008082516041036101c95760208301516040840151606085015160001a6101bd8782858561032a565b945094505050506101d1565b506000905060025b9250929050565b60008160048111156101ec576101ec610525565b036101f45750565b600181600481111561020857610208610525565b0361025a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561026e5761026e610525565b036102bb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610251565b60038160048111156102cf576102cf610525565b036103275760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610251565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561036157506000905060036103e5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156103b5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166103de576000600192509250506103e5565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261041557600080fd5b813567ffffffffffffffff80821115610430576104306103ee565b604051601f8301601f19908116603f01168101908282118183101715610458576104586103ee565b8160405283815286602085880101111561047157600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156104a457600080fd5b823567ffffffffffffffff808211156104bc57600080fd5b6104c886838701610404565b935060208501359150808211156104de57600080fd5b506104eb85828601610404565b9150509250929050565b60006020828403121561050757600080fd5b81516001600160a01b038116811461051e57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212209b3d2826cea761b7220b1270d1a84672fc2e70e4c247c282cdc8bbd20de43a4464736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/MockERC20.json b/backend/src/contracts/abi/MockERC20.json deleted file mode 100644 index 4328407e..00000000 --- a/backend/src/contracts/abi/MockERC20.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"MockERC20","sourceName":"src/mock/MockERC20.sol","abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x60806040523480156200001157600080fd5b506040518060400160405280600981526020016804d6f636b45524332360bc1b815250604051806040016040528060038152602001624d544b60e81b81525081600390816200006191906200018e565b5060046200007082826200018e565b5050506200008d620000876200009360201b60201c565b62000097565b6200025a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011457607f821691505b6020821081036200013557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018957600081815260208120601f850160051c81016020861015620001645750805b601f850160051c820191505b81811015620001855782815560010162000170565b5050505b505050565b81516001600160401b03811115620001aa57620001aa620000e9565b620001c281620001bb8454620000ff565b846200013b565b602080601f831160018114620001fa5760008415620001e15750858301515b600019600386901b1c1916600185901b17855562000185565b600085815260208120601f198616915b828110156200022b578886015182559484019460019091019084016200020a565b50858210156200024a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610af7806200026a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d7146101eb578063a9059cbb146101fe578063dd62ed3e14610211578063f2fde38b1461022457600080fd5b806370a0823114610197578063715018a6146101c05780638da5cb5b146101c857806395d89b41146101e357600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461016f57806340c10f191461018257600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b610102610237565b60405161010f9190610941565b60405180910390f35b61012b6101263660046109ab565b6102c9565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b3660046109d5565b6102e3565b6040516012815260200161010f565b61012b61017d3660046109ab565b610307565b6101956101903660046109ab565b610329565b005b61013f6101a5366004610a11565b6001600160a01b031660009081526020819052604090205490565b61019561033f565b6005546040516001600160a01b03909116815260200161010f565b610102610353565b61012b6101f93660046109ab565b610362565b61012b61020c3660046109ab565b6103e2565b61013f61021f366004610a33565b6103f0565b610195610232366004610a11565b61041b565b60606003805461024690610a66565b80601f016020809104026020016040519081016040528092919081815260200182805461027290610a66565b80156102bf5780601f10610294576101008083540402835291602001916102bf565b820191906000526020600020905b8154815290600101906020018083116102a257829003601f168201915b5050505050905090565b6000336102d7818585610494565b60019150505b92915050565b6000336102f18582856105b8565b6102fc858585610632565b506001949350505050565b6000336102d781858561031a83836103f0565b6103249190610aa0565b610494565b6103316107d6565b61033b8282610830565b5050565b6103476107d6565b61035160006108ef565b565b60606004805461024690610a66565b6000338161037082866103f0565b9050838110156103d55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102fc8286868403610494565b6000336102d7818585610632565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104236107d6565b6001600160a01b0381166104885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cc565b610491816108ef565b50565b6001600160a01b0383166104f65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103cc565b6001600160a01b0382166105575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103cc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105c484846103f0565b9050600019811461062c578181101561061f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103cc565b61062c8484848403610494565b50505050565b6001600160a01b0383166106965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103cc565b6001600160a01b0382166106f85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103cc565b6001600160a01b038316600090815260208190526040902054818110156107705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103cc565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361062c565b6005546001600160a01b031633146103515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cc565b6001600160a01b0382166108865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103cc565b80600260008282546108989190610aa0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561096e57858101830151858201604001528201610952565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109a657600080fd5b919050565b600080604083850312156109be57600080fd5b6109c78361098f565b946020939093013593505050565b6000806000606084860312156109ea57600080fd5b6109f38461098f565b9250610a016020850161098f565b9150604084013590509250925092565b600060208284031215610a2357600080fd5b610a2c8261098f565b9392505050565b60008060408385031215610a4657600080fd5b610a4f8361098f565b9150610a5d6020840161098f565b90509250929050565b600181811c90821680610a7a57607f821691505b602082108103610a9a57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102dd57634e487b7160e01b600052601160045260246000fdfea2646970667358221220fddb856e495c0093a64ef4ff83f6047af24abca374d110219a1b6e7b22a32f8a64736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d7146101eb578063a9059cbb146101fe578063dd62ed3e14610211578063f2fde38b1461022457600080fd5b806370a0823114610197578063715018a6146101c05780638da5cb5b146101c857806395d89b41146101e357600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461016f57806340c10f191461018257600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b610102610237565b60405161010f9190610941565b60405180910390f35b61012b6101263660046109ab565b6102c9565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b3660046109d5565b6102e3565b6040516012815260200161010f565b61012b61017d3660046109ab565b610307565b6101956101903660046109ab565b610329565b005b61013f6101a5366004610a11565b6001600160a01b031660009081526020819052604090205490565b61019561033f565b6005546040516001600160a01b03909116815260200161010f565b610102610353565b61012b6101f93660046109ab565b610362565b61012b61020c3660046109ab565b6103e2565b61013f61021f366004610a33565b6103f0565b610195610232366004610a11565b61041b565b60606003805461024690610a66565b80601f016020809104026020016040519081016040528092919081815260200182805461027290610a66565b80156102bf5780601f10610294576101008083540402835291602001916102bf565b820191906000526020600020905b8154815290600101906020018083116102a257829003601f168201915b5050505050905090565b6000336102d7818585610494565b60019150505b92915050565b6000336102f18582856105b8565b6102fc858585610632565b506001949350505050565b6000336102d781858561031a83836103f0565b6103249190610aa0565b610494565b6103316107d6565b61033b8282610830565b5050565b6103476107d6565b61035160006108ef565b565b60606004805461024690610a66565b6000338161037082866103f0565b9050838110156103d55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102fc8286868403610494565b6000336102d7818585610632565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104236107d6565b6001600160a01b0381166104885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cc565b610491816108ef565b50565b6001600160a01b0383166104f65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103cc565b6001600160a01b0382166105575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103cc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105c484846103f0565b9050600019811461062c578181101561061f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103cc565b61062c8484848403610494565b50505050565b6001600160a01b0383166106965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103cc565b6001600160a01b0382166106f85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103cc565b6001600160a01b038316600090815260208190526040902054818110156107705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103cc565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361062c565b6005546001600160a01b031633146103515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cc565b6001600160a01b0382166108865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103cc565b80600260008282546108989190610aa0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561096e57858101830151858201604001528201610952565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109a657600080fd5b919050565b600080604083850312156109be57600080fd5b6109c78361098f565b946020939093013593505050565b6000806000606084860312156109ea57600080fd5b6109f38461098f565b9250610a016020850161098f565b9150604084013590509250925092565b600060208284031215610a2357600080fd5b610a2c8261098f565b9392505050565b60008060408385031215610a4657600080fd5b610a4f8361098f565b9150610a5d6020840161098f565b90509250929050565b600181811c90821680610a7a57607f821691505b602082108103610a9a57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102dd57634e487b7160e01b600052601160045260246000fdfea2646970667358221220fddb856e495c0093a64ef4ff83f6047af24abca374d110219a1b6e7b22a32f8a64736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/Summa.json b/backend/src/contracts/abi/Summa.json index 849236a7..a377c505 100644 --- a/backend/src/contracts/abi/Summa.json +++ b/backend/src/contracts/abi/Summa.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"contract IVerifier","name":"_verifier","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"addressType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"verifier","type":"address"}],"name":"AddressVerifierSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"assetType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"balanceRetriever","type":"address"}],"name":"BalanceRetrieverSet","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"bytes32","name":"addressType","type":"bytes32"},{"internalType":"bytes","name":"cexAddress","type":"bytes"},{"internalType":"bytes","name":"ownershipProof","type":"bytes"}],"indexed":false,"internalType":"struct Summa.OwnedAddress[]","name":"addresses","type":"tuple[]"}],"name":"ExchangeAddressesSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"mstRoot","type":"uint256"}],"name":"ProofOfSolvencySubmitted","type":"event"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"balanceRetriever","outputs":[{"internalType":"contract IBalanceRetriever","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"cexAddressVerifier","outputs":[{"internalType":"contract IAddressOwnershipVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"confirmedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"_verifier","type":"address"}],"name":"setAddressOwnershipVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"retriever","type":"address"}],"name":"setBalanceRetriever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"addressType","type":"bytes32"},{"internalType":"bytes","name":"cexAddress","type":"bytes"},{"internalType":"bytes","name":"ownershipProof","type":"bytes"}],"internalType":"struct Summa.OwnedAddress[]","name":"_cexAddresses","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"assetType","type":"bytes32"},{"internalType":"uint256","name":"amountToProve","type":"uint256"},{"internalType":"bytes[]","name":"addresses","type":"bytes[]"},{"internalType":"bytes","name":"balanceRetrieverArgs","type":"bytes"}],"internalType":"struct Summa.OwnedAsset[]","name":"assets","type":"tuple[]"},{"internalType":"uint256","name":"mstRoot","type":"uint256"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitProofOfSolvency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"}],"name":"verifyZkProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x60a060405234801561001057600080fd5b5060405161170638038061170683398101604081905261002f91610099565b61003833610049565b6001600160a01b03166080526100c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ab57600080fd5b81516001600160a01b03811681146100c257600080fd5b9392505050565b6080516116226100e46000396000610cd601526116226000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b146101575780638f13e25214610168578063989f8de71461017b578063e2175807146101a4578063e691ad33146101b7578063f2fde38b146101ca57600080fd5b80631d6a4326146100ae57806333439d65146100f457806335b59431146101275780635cc04bad1461013c578063715018a61461014f575b600080fd5b6100d76100bc366004610e7a565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610117610102366004610e7a565b60016020526000908152604090205460ff1681565b60405190151581526020016100eb565b61013a610135366004610e93565b6101dd565b005b61013a61014a366004610e93565b610359565b61013a6104c5565b6000546001600160a01b03166100d7565b61013a610176366004610fe5565b6104d9565b6100d7610189366004610e7a565b6002602052600090815260409020546001600160a01b031681565b61013a6101b23660046110ff565b6107a8565b6101176101c536600461130d565b610cbc565b61013a6101d8366004610e93565b610d57565b6101e5610dd0565b6001600160a01b0381166102405760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642061646472657373207665726966696572000000000000000060448201526064015b60405180910390fd5b60008190506000816001600160a01b031663f9f207ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a991906113c7565b9050806102ef5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642061646472657373207479706560601b6044820152606401610237565b60008181526003602090815260409182902080546001600160a01b0319166001600160a01b03868116919091179091559151918516825282917f5aa7d41ef19bf812183efb0c4caf427f7a24c0b7065881737f4b8765fa8fd50b91015b60405180910390a2505050565b610361610dd0565b6001600160a01b0381166103b75760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642062616c616e636520726574726965766572000000000000006044820152606401610237565b60008190506000816001600160a01b031663896317b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042091906113c7565b9050806104645760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206173736574207479706560701b6044820152606401610237565b60008181526002602090815260409182902080546001600160a01b0319166001600160a01b03868116919091179091559151918516825282917fedff21464e461253ec0b1c3d54a768bab94189d09435e2e3f39f8750b0a1574f910161034c565b6104cd610dd0565b6104d76000610e2a565b565b60005b815181101561076d5760008282815181106104f9576104f96113e0565b6020908102919091018101518101518051908201206000818152600190925260409091205490915060ff16156105715760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610237565b60008181526001602081905260408220805460ff19169091179055835160039082908690869081106105a5576105a56113e0565b602090810291909101810151518252810191909152604001600020546001600160a01b0316036106315760405162461bcd60e51b815260206004820152603160248201527f41646472657373207665726966696572206e6f742073657420666f7220746869604482015270732074797065206f66206164647265737360781b6064820152608401610237565b60036000848481518110610647576106476113e0565b602002602001015160000151815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166329acc2d5848481518110610695576106956113e0565b6020026020010151602001518585815181106106b3576106b36113e0565b6020026020010151604001516040518363ffffffff1660e01b81526004016106dc92919061143c565b602060405180830381865afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d919061146a565b61075a5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606401610237565b5080610765816114a2565b9150506104dc565b507fd822ca44e30c46963cf5f7fd90caeea843d64be7b31fe761b53078abf982f21b8160405161079d91906114bb565b60405180910390a150565b600084516001600160401b038111156107c3576107c3610ec3565b6040519080825280602002602001820160405280156107ec578160200160208202803683370190505b50905060005b8551811015610b665760005b868281518110610810576108106113e0565b60200260200101516040015151811015610ab5576001600088848151811061083a5761083a6113e0565b6020026020010151604001518381518110610857576108576113e0565b60209081029190910181015180519082012082528101919091526040016000205460ff166108c75760405162461bcd60e51b815260206004820152601e60248201527f41646472657373206f776e657273686970206e6f7420766572696669656400006044820152606401610237565b60006001600160a01b0316600260008985815181106108e8576108e86113e0565b602090810291909101810151518252810191909152604001600020546001600160a01b0316036109735760405162461bcd60e51b815260206004820152603060248201527f42616c616e636520726574726965766572206e6f742073657420666f7220746860448201526f1a5cc81d1e5c19481bd988185cdcd95d60821b6064820152608401610237565b60026000888481518110610989576109896113e0565b602002602001015160000151815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663260c4cc68884815181106109d7576109d76113e0565b60200260200101516040015183815181106109f4576109f46113e0565b6020026020010151898581518110610a0e57610a0e6113e0565b602002602001015160600151876040518463ffffffff1660e01b8152600401610a399392919061154c565b602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a91906113c7565b838381518110610a8c57610a8c6113e0565b60200260200101818151610aa09190611582565b90525080610aad816114a2565b9150506107fe565b50818181518110610ac857610ac86113e0565b6020026020010151868281518110610ae257610ae26113e0565b6020026020010151602001511115610b545760405162461bcd60e51b815260206004820152602f60248201527f41637475616c2062616c616e6365206973206c657373207468616e207468652060448201526e616d6f756e7420746f2070726f766560881b6064820152608401610237565b80610b5e816114a2565b9150506107f2565b50600085516001610b779190611582565b6001600160401b03811115610b8e57610b8e610ec3565b604051908082528060200260200182016040528015610bb7578160200160208202803683370190505b5090508481600081518110610bce57610bce6113e0565b60200260200101818152505060005b8651811015610c3f57868181518110610bf857610bf86113e0565b60200260200101516020015182826001610c129190611582565b81518110610c2257610c226113e0565b602090810291909101015280610c37816114a2565b915050610bdd565b50610c4a8482610cbc565b610c895760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103d3590383937b7b360811b6044820152606401610237565b60405185907f08367c9e7de6aba412334c7e8a02be4c57a63f268945497c9d693772c7f3969390600090a2505050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610d0d9085908790600401611595565b602060405180830381865afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061146a565b90505b92915050565b610d5f610dd0565b6001600160a01b038116610dc45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610237565b610dcd81610e2a565b50565b6000546001600160a01b031633146104d75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610237565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e8c57600080fd5b5035919050565b600060208284031215610ea557600080fd5b81356001600160a01b0381168114610ebc57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715610efb57610efb610ec3565b60405290565b604051608081016001600160401b0381118282101715610efb57610efb610ec3565b604051601f8201601f191681016001600160401b0381118282101715610f4b57610f4b610ec3565b604052919050565b60006001600160401b03821115610f6c57610f6c610ec3565b5060051b60200190565b600082601f830112610f8757600080fd5b81356001600160401b03811115610fa057610fa0610ec3565b610fb3601f8201601f1916602001610f23565b818152846020838601011115610fc857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215610ff857600080fd5b82356001600160401b038082111561100f57600080fd5b818501915085601f83011261102357600080fd5b813561103661103182610f53565b610f23565b81815260059190911b8301840190848101908883111561105557600080fd5b8585015b838110156110f2578035858111156110715760008081fd5b86016060818c03601f19018113156110895760008081fd5b611091610ed9565b898301358152604080840135898111156110ab5760008081fd5b6110b98f8d83880101610f76565b838d0152509183013591888311156110d15760008081fd5b6110df8e8c85870101610f76565b9082015285525050918601918601611059565b5098975050505050505050565b6000806000806080858703121561111557600080fd5b6001600160401b038535111561112a57600080fd5b85601f86358701011261113c57600080fd5b61114c6110318635870135610f53565b8535860180358083526020808401939260059290921b9091010188101561117257600080fd5b602087358801015b87358801803560051b016020018110156112ca576001600160401b03813511156111a357600080fd5b873588018135016080818b03601f190112156111be57600080fd5b6111c6610f01565b60208201358152604082013560208201526001600160401b03606083013511156111ef57600080fd5b606082013582018b603f82011261120557600080fd5b6112156110316020830135610f53565b602082810135808352908201919060051b83016040018e101561123757600080fd5b604083015b6040602085013560051b850101811015611283576001600160401b038135111561126557600080fd5b6112758f60408335870101610f76565b83526020928301920161123c565b50604084015250506001600160401b03608083013511156112a357600080fd5b6112b68b60206080850135850101610f76565b60608201528452506020928301920161117a565b50945050602085013592506001600160401b03604086013511156112ed57600080fd5b6112fd8660408701358701610f76565b9396929550929360600135925050565b6000806040838503121561132057600080fd5b82356001600160401b038082111561133757600080fd5b61134386838701610f76565b935060209150818501358181111561135a57600080fd5b85019050601f8101861361136d57600080fd5b803561137b61103182610f53565b81815260059190911b8201830190838101908883111561139a57600080fd5b928401925b828410156113b85783358252928401929084019061139f565b80955050505050509250929050565b6000602082840312156113d957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b8181101561141c57602081850181015186830182015201611400565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600061144f60408301856113f6565b828103602084015261146181856113f6565b95945050505050565b60006020828403121561147c57600080fd5b81518015158114610ebc57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016114b4576114b461148c565b5060010190565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561153e57603f19898403018552815160608151855288820151818a870152611510828701826113f6565b9150508782015191508481038886015261152a81836113f6565b9689019694505050908601906001016114e2565b509098975050505050505050565b60608152600061155f60608301866113f6565b828103602084015261157181866113f6565b915050826040830152949350505050565b80820180821115610d5157610d5161148c565b604080825283519082018190526000906020906060840190828701845b828110156115ce578151845292840192908401906001016115b2565b505050838103828501526115e281866113f6565b969550505050505056fea2646970667358221220ab7b251b0ff87ba445ae36d37ae106f0f2a30a1fea392efb0274ba2bfda4650164736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b146101575780638f13e25214610168578063989f8de71461017b578063e2175807146101a4578063e691ad33146101b7578063f2fde38b146101ca57600080fd5b80631d6a4326146100ae57806333439d65146100f457806335b59431146101275780635cc04bad1461013c578063715018a61461014f575b600080fd5b6100d76100bc366004610e7a565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610117610102366004610e7a565b60016020526000908152604090205460ff1681565b60405190151581526020016100eb565b61013a610135366004610e93565b6101dd565b005b61013a61014a366004610e93565b610359565b61013a6104c5565b6000546001600160a01b03166100d7565b61013a610176366004610fe5565b6104d9565b6100d7610189366004610e7a565b6002602052600090815260409020546001600160a01b031681565b61013a6101b23660046110ff565b6107a8565b6101176101c536600461130d565b610cbc565b61013a6101d8366004610e93565b610d57565b6101e5610dd0565b6001600160a01b0381166102405760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642061646472657373207665726966696572000000000000000060448201526064015b60405180910390fd5b60008190506000816001600160a01b031663f9f207ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a991906113c7565b9050806102ef5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642061646472657373207479706560601b6044820152606401610237565b60008181526003602090815260409182902080546001600160a01b0319166001600160a01b03868116919091179091559151918516825282917f5aa7d41ef19bf812183efb0c4caf427f7a24c0b7065881737f4b8765fa8fd50b91015b60405180910390a2505050565b610361610dd0565b6001600160a01b0381166103b75760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642062616c616e636520726574726965766572000000000000006044820152606401610237565b60008190506000816001600160a01b031663896317b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042091906113c7565b9050806104645760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206173736574207479706560701b6044820152606401610237565b60008181526002602090815260409182902080546001600160a01b0319166001600160a01b03868116919091179091559151918516825282917fedff21464e461253ec0b1c3d54a768bab94189d09435e2e3f39f8750b0a1574f910161034c565b6104cd610dd0565b6104d76000610e2a565b565b60005b815181101561076d5760008282815181106104f9576104f96113e0565b6020908102919091018101518101518051908201206000818152600190925260409091205490915060ff16156105715760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610237565b60008181526001602081905260408220805460ff19169091179055835160039082908690869081106105a5576105a56113e0565b602090810291909101810151518252810191909152604001600020546001600160a01b0316036106315760405162461bcd60e51b815260206004820152603160248201527f41646472657373207665726966696572206e6f742073657420666f7220746869604482015270732074797065206f66206164647265737360781b6064820152608401610237565b60036000848481518110610647576106476113e0565b602002602001015160000151815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166329acc2d5848481518110610695576106956113e0565b6020026020010151602001518585815181106106b3576106b36113e0565b6020026020010151604001516040518363ffffffff1660e01b81526004016106dc92919061143c565b602060405180830381865afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d919061146a565b61075a5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606401610237565b5080610765816114a2565b9150506104dc565b507fd822ca44e30c46963cf5f7fd90caeea843d64be7b31fe761b53078abf982f21b8160405161079d91906114bb565b60405180910390a150565b600084516001600160401b038111156107c3576107c3610ec3565b6040519080825280602002602001820160405280156107ec578160200160208202803683370190505b50905060005b8551811015610b665760005b868281518110610810576108106113e0565b60200260200101516040015151811015610ab5576001600088848151811061083a5761083a6113e0565b6020026020010151604001518381518110610857576108576113e0565b60209081029190910181015180519082012082528101919091526040016000205460ff166108c75760405162461bcd60e51b815260206004820152601e60248201527f41646472657373206f776e657273686970206e6f7420766572696669656400006044820152606401610237565b60006001600160a01b0316600260008985815181106108e8576108e86113e0565b602090810291909101810151518252810191909152604001600020546001600160a01b0316036109735760405162461bcd60e51b815260206004820152603060248201527f42616c616e636520726574726965766572206e6f742073657420666f7220746860448201526f1a5cc81d1e5c19481bd988185cdcd95d60821b6064820152608401610237565b60026000888481518110610989576109896113e0565b602002602001015160000151815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663260c4cc68884815181106109d7576109d76113e0565b60200260200101516040015183815181106109f4576109f46113e0565b6020026020010151898581518110610a0e57610a0e6113e0565b602002602001015160600151876040518463ffffffff1660e01b8152600401610a399392919061154c565b602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a91906113c7565b838381518110610a8c57610a8c6113e0565b60200260200101818151610aa09190611582565b90525080610aad816114a2565b9150506107fe565b50818181518110610ac857610ac86113e0565b6020026020010151868281518110610ae257610ae26113e0565b6020026020010151602001511115610b545760405162461bcd60e51b815260206004820152602f60248201527f41637475616c2062616c616e6365206973206c657373207468616e207468652060448201526e616d6f756e7420746f2070726f766560881b6064820152608401610237565b80610b5e816114a2565b9150506107f2565b50600085516001610b779190611582565b6001600160401b03811115610b8e57610b8e610ec3565b604051908082528060200260200182016040528015610bb7578160200160208202803683370190505b5090508481600081518110610bce57610bce6113e0565b60200260200101818152505060005b8651811015610c3f57868181518110610bf857610bf86113e0565b60200260200101516020015182826001610c129190611582565b81518110610c2257610c226113e0565b602090810291909101015280610c37816114a2565b915050610bdd565b50610c4a8482610cbc565b610c895760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103d3590383937b7b360811b6044820152606401610237565b60405185907f08367c9e7de6aba412334c7e8a02be4c57a63f268945497c9d693772c7f3969390600090a2505050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610d0d9085908790600401611595565b602060405180830381865afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061146a565b90505b92915050565b610d5f610dd0565b6001600160a01b038116610dc45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610237565b610dcd81610e2a565b50565b6000546001600160a01b031633146104d75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610237565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e8c57600080fd5b5035919050565b600060208284031215610ea557600080fd5b81356001600160a01b0381168114610ebc57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715610efb57610efb610ec3565b60405290565b604051608081016001600160401b0381118282101715610efb57610efb610ec3565b604051601f8201601f191681016001600160401b0381118282101715610f4b57610f4b610ec3565b604052919050565b60006001600160401b03821115610f6c57610f6c610ec3565b5060051b60200190565b600082601f830112610f8757600080fd5b81356001600160401b03811115610fa057610fa0610ec3565b610fb3601f8201601f1916602001610f23565b818152846020838601011115610fc857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215610ff857600080fd5b82356001600160401b038082111561100f57600080fd5b818501915085601f83011261102357600080fd5b813561103661103182610f53565b610f23565b81815260059190911b8301840190848101908883111561105557600080fd5b8585015b838110156110f2578035858111156110715760008081fd5b86016060818c03601f19018113156110895760008081fd5b611091610ed9565b898301358152604080840135898111156110ab5760008081fd5b6110b98f8d83880101610f76565b838d0152509183013591888311156110d15760008081fd5b6110df8e8c85870101610f76565b9082015285525050918601918601611059565b5098975050505050505050565b6000806000806080858703121561111557600080fd5b6001600160401b038535111561112a57600080fd5b85601f86358701011261113c57600080fd5b61114c6110318635870135610f53565b8535860180358083526020808401939260059290921b9091010188101561117257600080fd5b602087358801015b87358801803560051b016020018110156112ca576001600160401b03813511156111a357600080fd5b873588018135016080818b03601f190112156111be57600080fd5b6111c6610f01565b60208201358152604082013560208201526001600160401b03606083013511156111ef57600080fd5b606082013582018b603f82011261120557600080fd5b6112156110316020830135610f53565b602082810135808352908201919060051b83016040018e101561123757600080fd5b604083015b6040602085013560051b850101811015611283576001600160401b038135111561126557600080fd5b6112758f60408335870101610f76565b83526020928301920161123c565b50604084015250506001600160401b03608083013511156112a357600080fd5b6112b68b60206080850135850101610f76565b60608201528452506020928301920161117a565b50945050602085013592506001600160401b03604086013511156112ed57600080fd5b6112fd8660408701358701610f76565b9396929550929360600135925050565b6000806040838503121561132057600080fd5b82356001600160401b038082111561133757600080fd5b61134386838701610f76565b935060209150818501358181111561135a57600080fd5b85019050601f8101861361136d57600080fd5b803561137b61103182610f53565b81815260059190911b8201830190838101908883111561139a57600080fd5b928401925b828410156113b85783358252928401929084019061139f565b80955050505050509250929050565b6000602082840312156113d957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b8181101561141c57602081850181015186830182015201611400565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600061144f60408301856113f6565b828103602084015261146181856113f6565b95945050505050565b60006020828403121561147c57600080fd5b81518015158114610ebc57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016114b4576114b461148c565b5060010190565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561153e57603f19898403018552815160608151855288820151818a870152611510828701826113f6565b9150508782015191508481038886015261152a81836113f6565b9689019694505050908601906001016114e2565b509098975050505050505050565b60608152600061155f60608301866113f6565b828103602084015261157181866113f6565b915050826040830152949350505050565b80820180821115610d5157610d5161148c565b604080825283519082018190526000906020906060840190828701845b828110156115ce578151845292840192908401906001016115b2565b505050838103828501526115e281866113f6565b969550505050505056fea2646970667358221220ab7b251b0ff87ba445ae36d37ae106f0f2a30a1fea392efb0274ba2bfda4650164736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file +{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"contract IVerifier","name":"_verifier","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"indexed":false,"internalType":"struct Summa.AddressOwnershipProof[]","name":"addressOwnershipProofs","type":"tuple[]"}],"name":"AddressOwnershipProofSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"}],"name":"SolvencyProofSubmitted","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressOwnershipProofs","outputs":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"ownershipProofByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof[]","name":"_addressOwnershipProofs","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitProofOfSolvency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"}],"name":"verifyZkProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x60a060405234801561001057600080fd5b506040516114de3803806114de83398101604081905261002f91610099565b61003833610049565b6001600160a01b03166080526100c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ab57600080fd5b81516001600160a01b03811681146100c257600080fd5b9392505050565b6080516113fa6100e4600039600061092901526113fa6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a3c4bcf81161005b578063a3c4bcf8146100f8578063c7ddca0e1461011b578063e691ad331461012e578063f2fde38b1461015157600080fd5b806323eb94a01461008d578063413a9f2d146100c0578063715018a6146100d55780638da5cb5b146100dd575b600080fd5b6100ad61009b366004610acd565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100d36100ce366004610c0d565b610164565b005b6100d36103ea565b6000546040516001600160a01b0390911681526020016100b7565b61010b610106366004610acd565b6103fe565b6040516100b79493929190610da7565b6100d3610129366004610dff565b61065e565b61014161013c366004610f59565b610908565b60405190151581526020016100b7565b6100d361015f366004611014565b6109aa565b61016c610a23565b6001546000036101e25760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b6000835160016101f2919061105a565b67ffffffffffffffff81111561020a5761020a610ae6565b604051908082528060200260200182016040528015610233578160200160208202803683370190505b509050848160008151811061024a5761024a61106d565b60200260200101818152505060005b8451811015610345578481815181106102745761027461106d565b602002602001015160200151516000141580156102b0575084818151811061029e5761029e61106d565b60200260200101516000015151600014155b6102ec5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b60448201526064016101d9565b8481815181106102fe576102fe61106d565b60200260200101516040015182826001610318919061105a565b815181106103285761032861106d565b60209081029190910101528061033d81611083565b915050610259565b506103508382610908565b61038f5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b60448201526064016101d9565b817f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff5826000815181106103c4576103c461106d565b6020026020010151866040516103db92919061109c565b60405180910390a25050505050565b6103f2610a23565b6103fc6000610a7d565b565b6001818154811061040e57600080fd5b906000526020600020906004020160009150905080600001805461043190611133565b80601f016020809104026020016040519081016040528092919081815260200182805461045d90611133565b80156104aa5780601f1061047f576101008083540402835291602001916104aa565b820191906000526020600020905b81548152906001019060200180831161048d57829003601f168201915b5050505050908060010180546104bf90611133565b80601f01602080910402602001604051908101604052809291908181526020018280546104eb90611133565b80156105385780601f1061050d57610100808354040283529160200191610538565b820191906000526020600020905b81548152906001019060200180831161051b57829003601f168201915b50505050509080600201805461054d90611133565b80601f016020809104026020016040519081016040528092919081815260200182805461057990611133565b80156105c65780601f1061059b576101008083540402835291602001916105c6565b820191906000526020600020905b8154815290600101906020018083116105a957829003601f168201915b5050505050908060030180546105db90611133565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611133565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905084565b610666610a23565b60005b81518110156108cd5760008282815181106106865761068661106d565b6020026020010151600001516040516020016106a2919061116d565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915080156107185760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c7265616479207665726966696564000000000000000060448201526064016101d9565b61072383600161105a565b60008381526002602052604090205583516001908590859081106107495761074961106d565b6020908102919091018101518254600181018455600093845291909220825160049092020190819061077b90826111cf565b506020820151600182019061079090826111cf565b50604082015160028201906107a590826111cf565b50606082015160038201906107ba90826111cf565b5050508383815181106107cf576107cf61106d565b6020026020010151600001515160001415801561080b57508383815181106107f9576107f961106d565b60200260200101516020015151600014155b801561083657508383815181106108245761082461106d565b60200260200101516040015151600014155b8015610861575083838151811061084f5761084f61106d565b60200260200101516060015151600014155b6108b85760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b60648201526084016101d9565b505080806108c590611083565b915050610669565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516108fd919061128f565b60405180910390a150565b6000610912610a23565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610960908590879060040161134b565b602060405180830381865afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a191906113a2565b90505b92915050565b6109b2610a23565b6001600160a01b038116610a175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101d9565b610a2081610a7d565b50565b6000546001600160a01b031633146103fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610adf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610b1f57610b1f610ae6565b60405290565b6040516080810167ffffffffffffffff81118282101715610b1f57610b1f610ae6565b604051601f8201601f1916810167ffffffffffffffff81118282101715610b7157610b71610ae6565b604052919050565b600067ffffffffffffffff821115610b9357610b93610ae6565b5060051b60200190565b600082601f830112610bae57600080fd5b813567ffffffffffffffff811115610bc857610bc8610ae6565b610bdb601f8201601f1916602001610b48565b818152846020838601011115610bf057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610c2357600080fd5b84359350602085013567ffffffffffffffff80821115610c4257600080fd5b818701915087601f830112610c5657600080fd5b610c68610c638335610b79565b610b48565b82358082526020808301929160051b8501018a811115610c8757600080fd5b602085015b81811015610d29578481351115610ca257600080fd5b803586016060818e03601f19011215610cba57600080fd5b610cc2610afc565b602082013587811115610cd457600080fd5b610ce38f602083860101610b9d565b825250604082013587811115610cf857600080fd5b610d078f602083860101610b9d565b6020838101919091526060939093013560408301525085529384019301610c8c565b5090965050506040870135915080821115610d4357600080fd5b50610d5087828801610b9d565b949793965093946060013593505050565b6000815180845260005b81811015610d8757602081850181015186830182015201610d6b565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610dba6080830187610d61565b8281036020840152610dcc8187610d61565b90508281036040840152610de08186610d61565b90508281036060840152610df48185610d61565b979650505050505050565b60006020808385031215610e1257600080fd5b823567ffffffffffffffff80821115610e2a57600080fd5b818501915085601f830112610e3e57600080fd5b8135610e4c610c6382610b79565b81815260059190911b83018401908481019088831115610e6b57600080fd5b8585015b83811015610f4c57803585811115610e8657600080fd5b86016080818c03601f19011215610e9d5760008081fd5b610ea5610b25565b8882013587811115610eb75760008081fd5b610ec58d8b83860101610b9d565b82525060408083013588811115610edc5760008081fd5b610eea8e8c83870101610b9d565b8b8401525060608084013589811115610f035760008081fd5b610f118f8d83880101610b9d565b83850152506080840135915088821115610f2b5760008081fd5b610f398e8c84870101610b9d565b9083015250845250918601918601610e6f565b5098975050505050505050565b60008060408385031215610f6c57600080fd5b823567ffffffffffffffff80821115610f8457600080fd5b610f9086838701610b9d565b9350602091508185013581811115610fa757600080fd5b85019050601f81018613610fba57600080fd5b8035610fc8610c6382610b79565b81815260059190911b82018301908381019088831115610fe757600080fd5b928401925b8284101561100557833582529284019290840190610fec565b80955050505050509250929050565b60006020828403121561102657600080fd5b81356001600160a01b038116811461103d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156109a4576109a4611044565b634e487b7160e01b600052603260045260246000fd5b60006001820161109557611095611044565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b8381101561112357898303605f19018552815180518885526110ee89860182610d61565b905087820151858203898701526111058282610d61565b928b0151958b019590955250948601949250908501906001016110ca565b50909a9950505050505050505050565b600181811c9082168061114757607f821691505b60208210810361116757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006109a16020830184610d61565b601f8211156111ca57600081815260208120601f850160051c810160208610156111a75750805b601f850160051c820191505b818110156111c6578281556001016111b3565b5050505b505050565b815167ffffffffffffffff8111156111e9576111e9610ae6565b6111fd816111f78454611133565b84611180565b602080601f831160018114611232576000841561121a5750858301515b600019600386901b1c1916600185901b1785556111c6565b600085815260208120601f198616915b8281101561126157888601518255948401946001909101908401611242565b508582101561127f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561133d57603f198984030185528151608081518186526112dc82870182610d61565b915050888201518582038a8701526112f48282610d61565b915050878201518582038987015261130c8282610d61565b915050606080830151925085820381870152506113298183610d61565b9689019694505050908601906001016112b6565b509098975050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561138457815184529284019290840190600101611368565b505050838103828501526113988186610d61565b9695505050505050565b6000602082840312156113b457600080fd5b8151801515811461103d57600080fdfea2646970667358221220cc9dfa8f3cf3ae556baea19ab18adc851c627ec21cbf91de48a59ef0b51103d064736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a3c4bcf81161005b578063a3c4bcf8146100f8578063c7ddca0e1461011b578063e691ad331461012e578063f2fde38b1461015157600080fd5b806323eb94a01461008d578063413a9f2d146100c0578063715018a6146100d55780638da5cb5b146100dd575b600080fd5b6100ad61009b366004610acd565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100d36100ce366004610c0d565b610164565b005b6100d36103ea565b6000546040516001600160a01b0390911681526020016100b7565b61010b610106366004610acd565b6103fe565b6040516100b79493929190610da7565b6100d3610129366004610dff565b61065e565b61014161013c366004610f59565b610908565b60405190151581526020016100b7565b6100d361015f366004611014565b6109aa565b61016c610a23565b6001546000036101e25760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b6000835160016101f2919061105a565b67ffffffffffffffff81111561020a5761020a610ae6565b604051908082528060200260200182016040528015610233578160200160208202803683370190505b509050848160008151811061024a5761024a61106d565b60200260200101818152505060005b8451811015610345578481815181106102745761027461106d565b602002602001015160200151516000141580156102b0575084818151811061029e5761029e61106d565b60200260200101516000015151600014155b6102ec5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b60448201526064016101d9565b8481815181106102fe576102fe61106d565b60200260200101516040015182826001610318919061105a565b815181106103285761032861106d565b60209081029190910101528061033d81611083565b915050610259565b506103508382610908565b61038f5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b60448201526064016101d9565b817f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff5826000815181106103c4576103c461106d565b6020026020010151866040516103db92919061109c565b60405180910390a25050505050565b6103f2610a23565b6103fc6000610a7d565b565b6001818154811061040e57600080fd5b906000526020600020906004020160009150905080600001805461043190611133565b80601f016020809104026020016040519081016040528092919081815260200182805461045d90611133565b80156104aa5780601f1061047f576101008083540402835291602001916104aa565b820191906000526020600020905b81548152906001019060200180831161048d57829003601f168201915b5050505050908060010180546104bf90611133565b80601f01602080910402602001604051908101604052809291908181526020018280546104eb90611133565b80156105385780601f1061050d57610100808354040283529160200191610538565b820191906000526020600020905b81548152906001019060200180831161051b57829003601f168201915b50505050509080600201805461054d90611133565b80601f016020809104026020016040519081016040528092919081815260200182805461057990611133565b80156105c65780601f1061059b576101008083540402835291602001916105c6565b820191906000526020600020905b8154815290600101906020018083116105a957829003601f168201915b5050505050908060030180546105db90611133565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611133565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905084565b610666610a23565b60005b81518110156108cd5760008282815181106106865761068661106d565b6020026020010151600001516040516020016106a2919061116d565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915080156107185760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c7265616479207665726966696564000000000000000060448201526064016101d9565b61072383600161105a565b60008381526002602052604090205583516001908590859081106107495761074961106d565b6020908102919091018101518254600181018455600093845291909220825160049092020190819061077b90826111cf565b506020820151600182019061079090826111cf565b50604082015160028201906107a590826111cf565b50606082015160038201906107ba90826111cf565b5050508383815181106107cf576107cf61106d565b6020026020010151600001515160001415801561080b57508383815181106107f9576107f961106d565b60200260200101516020015151600014155b801561083657508383815181106108245761082461106d565b60200260200101516040015151600014155b8015610861575083838151811061084f5761084f61106d565b60200260200101516060015151600014155b6108b85760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b60648201526084016101d9565b505080806108c590611083565b915050610669565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516108fd919061128f565b60405180910390a150565b6000610912610a23565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610960908590879060040161134b565b602060405180830381865afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a191906113a2565b90505b92915050565b6109b2610a23565b6001600160a01b038116610a175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101d9565b610a2081610a7d565b50565b6000546001600160a01b031633146103fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610adf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610b1f57610b1f610ae6565b60405290565b6040516080810167ffffffffffffffff81118282101715610b1f57610b1f610ae6565b604051601f8201601f1916810167ffffffffffffffff81118282101715610b7157610b71610ae6565b604052919050565b600067ffffffffffffffff821115610b9357610b93610ae6565b5060051b60200190565b600082601f830112610bae57600080fd5b813567ffffffffffffffff811115610bc857610bc8610ae6565b610bdb601f8201601f1916602001610b48565b818152846020838601011115610bf057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610c2357600080fd5b84359350602085013567ffffffffffffffff80821115610c4257600080fd5b818701915087601f830112610c5657600080fd5b610c68610c638335610b79565b610b48565b82358082526020808301929160051b8501018a811115610c8757600080fd5b602085015b81811015610d29578481351115610ca257600080fd5b803586016060818e03601f19011215610cba57600080fd5b610cc2610afc565b602082013587811115610cd457600080fd5b610ce38f602083860101610b9d565b825250604082013587811115610cf857600080fd5b610d078f602083860101610b9d565b6020838101919091526060939093013560408301525085529384019301610c8c565b5090965050506040870135915080821115610d4357600080fd5b50610d5087828801610b9d565b949793965093946060013593505050565b6000815180845260005b81811015610d8757602081850181015186830182015201610d6b565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610dba6080830187610d61565b8281036020840152610dcc8187610d61565b90508281036040840152610de08186610d61565b90508281036060840152610df48185610d61565b979650505050505050565b60006020808385031215610e1257600080fd5b823567ffffffffffffffff80821115610e2a57600080fd5b818501915085601f830112610e3e57600080fd5b8135610e4c610c6382610b79565b81815260059190911b83018401908481019088831115610e6b57600080fd5b8585015b83811015610f4c57803585811115610e8657600080fd5b86016080818c03601f19011215610e9d5760008081fd5b610ea5610b25565b8882013587811115610eb75760008081fd5b610ec58d8b83860101610b9d565b82525060408083013588811115610edc5760008081fd5b610eea8e8c83870101610b9d565b8b8401525060608084013589811115610f035760008081fd5b610f118f8d83880101610b9d565b83850152506080840135915088821115610f2b5760008081fd5b610f398e8c84870101610b9d565b9083015250845250918601918601610e6f565b5098975050505050505050565b60008060408385031215610f6c57600080fd5b823567ffffffffffffffff80821115610f8457600080fd5b610f9086838701610b9d565b9350602091508185013581811115610fa757600080fd5b85019050601f81018613610fba57600080fd5b8035610fc8610c6382610b79565b81815260059190911b82018301908381019088831115610fe757600080fd5b928401925b8284101561100557833582529284019290840190610fec565b80955050505050509250929050565b60006020828403121561102657600080fd5b81356001600160a01b038116811461103d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156109a4576109a4611044565b634e487b7160e01b600052603260045260246000fd5b60006001820161109557611095611044565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b8381101561112357898303605f19018552815180518885526110ee89860182610d61565b905087820151858203898701526111058282610d61565b928b0151958b019590955250948601949250908501906001016110ca565b50909a9950505050505050505050565b600181811c9082168061114757607f821691505b60208210810361116757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006109a16020830184610d61565b601f8211156111ca57600081815260208120601f850160051c810160208610156111a75750805b601f850160051c820191505b818110156111c6578281556001016111b3565b5050505b505050565b815167ffffffffffffffff8111156111e9576111e9610ae6565b6111fd816111f78454611133565b84611180565b602080601f831160018114611232576000841561121a5750858301515b600019600386901b1c1916600185901b1785556111c6565b600085815260208120601f198616915b8281101561126157888601518255948401946001909101908401611242565b508582101561127f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561133d57603f198984030185528151608081518186526112dc82870182610d61565b915050888201518582038a8701526112f48282610d61565b915050878201518582038987015261130c8282610d61565b915050606080830151925085820381870152506113298183610d61565b9689019694505050908601906001016112b6565b509098975050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561138457815184529284019290840190600101611368565b505050838103828501526113988186610d61565b9695505050505050565b6000602082840312156113b457600080fd5b8151801515811461103d57600080fdfea2646970667358221220cc9dfa8f3cf3ae556baea19ab18adc851c627ec21cbf91de48a59ef0b51103d064736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/deployments.json b/backend/src/contracts/deployments.json index fe03b021..bb516bb3 100644 --- a/backend/src/contracts/deployments.json +++ b/backend/src/contracts/deployments.json @@ -1 +1 @@ -{"31337":{"address":"0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9"}} \ No newline at end of file +{ "31337": { "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" } } diff --git a/backend/src/contracts/generated/erc20_balance_retriever.rs b/backend/src/contracts/generated/erc20_balance_retriever.rs deleted file mode 100644 index 9caef087..00000000 --- a/backend/src/contracts/generated/erc20_balance_retriever.rs +++ /dev/null @@ -1,1695 +0,0 @@ -pub use erc20_balance_retriever::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod erc20_balance_retriever { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_address\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"args\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getAddressBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"getAssetType\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static ERC20BALANCERETRIEVER_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 2, - 194, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 54, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 38, - 12, - 76, - 198, - 20, - 97, - 0, - 59, - 87, - 128, - 99, - 137, - 99, - 23, - 184, - 20, - 97, - 0, - 96, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 78, - 97, - 0, - 73, - 54, - 96, - 4, - 97, - 1, - 214, - 86, - 91, - 97, - 0, - 134, - 86, - 91, - 96, - 64, - 81, - 144, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 127, - 138, - 232, - 93, - 132, - 145, - 103, - 255, - 153, - 108, - 4, - 4, - 12, - 68, - 146, - 79, - 211, - 100, - 33, - 114, - 133, - 228, - 202, - 216, - 24, - 41, - 44, - 122, - 195, - 124, - 10, - 52, - 91, - 97, - 0, - 78, - 86, - 91, - 96, - 0, - 128, - 131, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 157, - 145, - 144, - 97, - 2, - 67, - 86, - 91, - 144, - 80, - 128, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 99, - 112, - 160, - 130, - 49, - 134, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 194, - 145, - 144, - 97, - 2, - 67, - 86, - 91, - 96, - 64, - 81, - 96, - 1, - 96, - 1, - 96, - 224, - 27, - 3, - 25, - 96, - 224, - 132, - 144, - 27, - 22, - 129, - 82, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 144, - 145, - 22, - 96, - 4, - 130, - 1, - 82, - 96, - 36, - 1, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 1, - 6, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 1, - 42, - 145, - 144, - 97, - 2, - 115, - 86, - 91, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 1, - 90, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 1, - 117, - 87, - 97, - 1, - 117, - 97, - 1, - 51, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 131, - 1, - 96, - 31, - 25, - 144, - 129, - 22, - 96, - 63, - 1, - 22, - 129, - 1, - 144, - 130, - 130, - 17, - 129, - 131, - 16, - 23, - 21, - 97, - 1, - 157, - 87, - 97, - 1, - 157, - 97, - 1, - 51, - 86, - 91, - 129, - 96, - 64, - 82, - 131, - 129, - 82, - 134, - 96, - 32, - 133, - 136, - 1, - 1, - 17, - 21, - 97, - 1, - 182, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 96, - 32, - 135, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 96, - 32, - 133, - 131, - 1, - 1, - 82, - 128, - 148, - 80, - 80, - 80, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 132, - 134, - 3, - 18, - 21, - 97, - 1, - 235, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 2, - 3, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 2, - 15, - 135, - 131, - 136, - 1, - 97, - 1, - 73, - 86, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 2, - 37, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 2, - 50, - 134, - 130, - 135, - 1, - 97, - 1, - 73, - 86, - 91, - 146, - 80, - 80, - 96, - 64, - 132, - 1, - 53, - 144, - 80, - 146, - 80, - 146, - 80, - 146, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 2, - 85, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 2, - 108, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 2, - 133, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 81, - 145, - 144, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 55, - 217, - 109, - 3, - 43, - 99, - 76, - 104, - 132, - 59, - 112, - 44, - 161, - 222, - 165, - 182, - 26, - 162, - 191, - 156, - 36, - 245, - 54, - 206, - 56, - 235, - 70, - 98, - 148, - 226, - 88, - 224, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static ERC20BALANCERETRIEVER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 54, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 38, - 12, - 76, - 198, - 20, - 97, - 0, - 59, - 87, - 128, - 99, - 137, - 99, - 23, - 184, - 20, - 97, - 0, - 96, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 78, - 97, - 0, - 73, - 54, - 96, - 4, - 97, - 1, - 214, - 86, - 91, - 97, - 0, - 134, - 86, - 91, - 96, - 64, - 81, - 144, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 127, - 138, - 232, - 93, - 132, - 145, - 103, - 255, - 153, - 108, - 4, - 4, - 12, - 68, - 146, - 79, - 211, - 100, - 33, - 114, - 133, - 228, - 202, - 216, - 24, - 41, - 44, - 122, - 195, - 124, - 10, - 52, - 91, - 97, - 0, - 78, - 86, - 91, - 96, - 0, - 128, - 131, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 157, - 145, - 144, - 97, - 2, - 67, - 86, - 91, - 144, - 80, - 128, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 99, - 112, - 160, - 130, - 49, - 134, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 194, - 145, - 144, - 97, - 2, - 67, - 86, - 91, - 96, - 64, - 81, - 96, - 1, - 96, - 1, - 96, - 224, - 27, - 3, - 25, - 96, - 224, - 132, - 144, - 27, - 22, - 129, - 82, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 144, - 145, - 22, - 96, - 4, - 130, - 1, - 82, - 96, - 36, - 1, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 1, - 6, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 1, - 42, - 145, - 144, - 97, - 2, - 115, - 86, - 91, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 1, - 90, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 1, - 117, - 87, - 97, - 1, - 117, - 97, - 1, - 51, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 131, - 1, - 96, - 31, - 25, - 144, - 129, - 22, - 96, - 63, - 1, - 22, - 129, - 1, - 144, - 130, - 130, - 17, - 129, - 131, - 16, - 23, - 21, - 97, - 1, - 157, - 87, - 97, - 1, - 157, - 97, - 1, - 51, - 86, - 91, - 129, - 96, - 64, - 82, - 131, - 129, - 82, - 134, - 96, - 32, - 133, - 136, - 1, - 1, - 17, - 21, - 97, - 1, - 182, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 96, - 32, - 135, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 96, - 32, - 133, - 131, - 1, - 1, - 82, - 128, - 148, - 80, - 80, - 80, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 132, - 134, - 3, - 18, - 21, - 97, - 1, - 235, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 2, - 3, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 2, - 15, - 135, - 131, - 136, - 1, - 97, - 1, - 73, - 86, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 2, - 37, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 2, - 50, - 134, - 130, - 135, - 1, - 97, - 1, - 73, - 86, - 91, - 146, - 80, - 80, - 96, - 64, - 132, - 1, - 53, - 144, - 80, - 146, - 80, - 146, - 80, - 146, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 2, - 85, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 2, - 108, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 2, - 133, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 81, - 145, - 144, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 55, - 217, - 109, - 3, - 43, - 99, - 76, - 104, - 132, - 59, - 112, - 44, - 161, - 222, - 165, - 182, - 26, - 162, - 191, - 156, - 36, - 245, - 54, - 206, - 56, - 235, - 70, - 98, - 148, - 226, - 88, - 224, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static ERC20BALANCERETRIEVER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct ERC20BalanceRetriever(::ethers::contract::Contract); - impl ::core::clone::Clone for ERC20BalanceRetriever { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for ERC20BalanceRetriever { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for ERC20BalanceRetriever { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for ERC20BalanceRetriever { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(ERC20BalanceRetriever)) - .field(&self.address()) - .finish() - } - } - impl ERC20BalanceRetriever { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - ERC20BALANCERETRIEVER_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - ERC20BALANCERETRIEVER_ABI.clone(), - ERC20BALANCERETRIEVER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `getAddressBalance` (0x260c4cc6) function - pub fn get_address_balance( - &self, - address: ::ethers::core::types::Bytes, - args: ::ethers::core::types::Bytes, - timestamp: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([38, 12, 76, 198], (address, args, timestamp)) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `getAssetType` (0x896317b8) function - pub fn get_asset_type( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([137, 99, 23, 184], ()) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for ERC20BalanceRetriever { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `getAddressBalance` function with signature `getAddressBalance(bytes,bytes,uint256)` and selector `0x260c4cc6` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "getAddressBalance", - abi = "getAddressBalance(bytes,bytes,uint256)" - )] - pub struct GetAddressBalanceCall { - pub address: ::ethers::core::types::Bytes, - pub args: ::ethers::core::types::Bytes, - pub timestamp: ::ethers::core::types::U256, - } - ///Container type for all input parameters for the `getAssetType` function with signature `getAssetType()` and selector `0x896317b8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "getAssetType", abi = "getAssetType()")] - pub struct GetAssetTypeCall; - ///Container type for all of the contract's call - #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum ERC20BalanceRetrieverCalls { - GetAddressBalance(GetAddressBalanceCall), - GetAssetType(GetAssetTypeCall), - } - impl ::ethers::core::abi::AbiDecode for ERC20BalanceRetrieverCalls { - fn decode( - data: impl AsRef<[u8]>, - ) -> ::core::result::Result { - let data = data.as_ref(); - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::GetAddressBalance(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::GetAssetType(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData.into()) - } - } - impl ::ethers::core::abi::AbiEncode for ERC20BalanceRetrieverCalls { - fn encode(self) -> Vec { - match self { - Self::GetAddressBalance(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::GetAssetType(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - } - } - } - impl ::core::fmt::Display for ERC20BalanceRetrieverCalls { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::GetAddressBalance(element) => ::core::fmt::Display::fmt(element, f), - Self::GetAssetType(element) => ::core::fmt::Display::fmt(element, f), - } - } - } - impl ::core::convert::From for ERC20BalanceRetrieverCalls { - fn from(value: GetAddressBalanceCall) -> Self { - Self::GetAddressBalance(value) - } - } - impl ::core::convert::From for ERC20BalanceRetrieverCalls { - fn from(value: GetAssetTypeCall) -> Self { - Self::GetAssetType(value) - } - } - ///Container type for all return fields from the `getAddressBalance` function with signature `getAddressBalance(bytes,bytes,uint256)` and selector `0x260c4cc6` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetAddressBalanceReturn(pub ::ethers::core::types::U256); - ///Container type for all return fields from the `getAssetType` function with signature `getAssetType()` and selector `0x896317b8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetAssetTypeReturn(pub [u8; 32]); -} diff --git a/backend/src/contracts/generated/eth_balance_retriever.rs b/backend/src/contracts/generated/eth_balance_retriever.rs deleted file mode 100644 index 02d00a10..00000000 --- a/backend/src/contracts/generated/eth_balance_retriever.rs +++ /dev/null @@ -1,1379 +0,0 @@ -pub use eth_balance_retriever::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod eth_balance_retriever { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_address\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"args\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getAddressBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"getAssetType\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static ETHBALANCERETRIEVER_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 2, - 36, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 54, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 38, - 12, - 76, - 198, - 20, - 97, - 0, - 59, - 87, - 128, - 99, - 137, - 99, - 23, - 184, - 20, - 97, - 0, - 96, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 78, - 97, - 0, - 73, - 54, - 96, - 4, - 97, - 1, - 81, - 86, - 91, - 97, - 0, - 134, - 86, - 91, - 96, - 64, - 81, - 144, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 127, - 170, - 174, - 190, - 186, - 56, - 16, - 177, - 230, - 183, - 7, - 129, - 241, - 75, - 45, - 114, - 193, - 203, - 137, - 192, - 178, - 179, - 32, - 196, - 59, - 182, - 127, - 247, - 159, - 86, - 47, - 95, - 244, - 97, - 0, - 78, - 86, - 91, - 96, - 0, - 131, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 156, - 145, - 144, - 97, - 1, - 190, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 49, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 0, - 213, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 0, - 240, - 87, - 97, - 0, - 240, - 97, - 0, - 174, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 131, - 1, - 96, - 31, - 25, - 144, - 129, - 22, - 96, - 63, - 1, - 22, - 129, - 1, - 144, - 130, - 130, - 17, - 129, - 131, - 16, - 23, - 21, - 97, - 1, - 24, - 87, - 97, - 1, - 24, - 97, - 0, - 174, - 86, - 91, - 129, - 96, - 64, - 82, - 131, - 129, - 82, - 134, - 96, - 32, - 133, - 136, - 1, - 1, - 17, - 21, - 97, - 1, - 49, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 96, - 32, - 135, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 96, - 32, - 133, - 131, - 1, - 1, - 82, - 128, - 148, - 80, - 80, - 80, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 132, - 134, - 3, - 18, - 21, - 97, - 1, - 102, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 1, - 126, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 1, - 138, - 135, - 131, - 136, - 1, - 97, - 0, - 196, - 86, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 1, - 160, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 1, - 173, - 134, - 130, - 135, - 1, - 97, - 0, - 196, - 86, - 91, - 146, - 80, - 80, - 96, - 64, - 132, - 1, - 53, - 144, - 80, - 146, - 80, - 146, - 80, - 146, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 1, - 208, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 1, - 231, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 193, - 1, - 118, - 89, - 62, - 164, - 131, - 138, - 210, - 178, - 123, - 238, - 179, - 129, - 157, - 179, - 89, - 87, - 38, - 79, - 62, - 81, - 148, - 145, - 220, - 2, - 68, - 72, - 150, - 45, - 149, - 162, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static ETHBALANCERETRIEVER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 54, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 38, - 12, - 76, - 198, - 20, - 97, - 0, - 59, - 87, - 128, - 99, - 137, - 99, - 23, - 184, - 20, - 97, - 0, - 96, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 78, - 97, - 0, - 73, - 54, - 96, - 4, - 97, - 1, - 81, - 86, - 91, - 97, - 0, - 134, - 86, - 91, - 96, - 64, - 81, - 144, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 127, - 170, - 174, - 190, - 186, - 56, - 16, - 177, - 230, - 183, - 7, - 129, - 241, - 75, - 45, - 114, - 193, - 203, - 137, - 192, - 178, - 179, - 32, - 196, - 59, - 182, - 127, - 247, - 159, - 86, - 47, - 95, - 244, - 97, - 0, - 78, - 86, - 91, - 96, - 0, - 131, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 156, - 145, - 144, - 97, - 1, - 190, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 49, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 0, - 213, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 0, - 240, - 87, - 97, - 0, - 240, - 97, - 0, - 174, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 131, - 1, - 96, - 31, - 25, - 144, - 129, - 22, - 96, - 63, - 1, - 22, - 129, - 1, - 144, - 130, - 130, - 17, - 129, - 131, - 16, - 23, - 21, - 97, - 1, - 24, - 87, - 97, - 1, - 24, - 97, - 0, - 174, - 86, - 91, - 129, - 96, - 64, - 82, - 131, - 129, - 82, - 134, - 96, - 32, - 133, - 136, - 1, - 1, - 17, - 21, - 97, - 1, - 49, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 96, - 32, - 135, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 96, - 32, - 133, - 131, - 1, - 1, - 82, - 128, - 148, - 80, - 80, - 80, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 132, - 134, - 3, - 18, - 21, - 97, - 1, - 102, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 1, - 126, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 1, - 138, - 135, - 131, - 136, - 1, - 97, - 0, - 196, - 86, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 1, - 160, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 1, - 173, - 134, - 130, - 135, - 1, - 97, - 0, - 196, - 86, - 91, - 146, - 80, - 80, - 96, - 64, - 132, - 1, - 53, - 144, - 80, - 146, - 80, - 146, - 80, - 146, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 1, - 208, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 1, - 231, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 193, - 1, - 118, - 89, - 62, - 164, - 131, - 138, - 210, - 178, - 123, - 238, - 179, - 129, - 157, - 179, - 89, - 87, - 38, - 79, - 62, - 81, - 148, - 145, - 220, - 2, - 68, - 72, - 150, - 45, - 149, - 162, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static ETHBALANCERETRIEVER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct ETHBalanceRetriever(::ethers::contract::Contract); - impl ::core::clone::Clone for ETHBalanceRetriever { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for ETHBalanceRetriever { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for ETHBalanceRetriever { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for ETHBalanceRetriever { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(ETHBalanceRetriever)) - .field(&self.address()) - .finish() - } - } - impl ETHBalanceRetriever { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - ETHBALANCERETRIEVER_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - ETHBALANCERETRIEVER_ABI.clone(), - ETHBALANCERETRIEVER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `getAddressBalance` (0x260c4cc6) function - pub fn get_address_balance( - &self, - address: ::ethers::core::types::Bytes, - args: ::ethers::core::types::Bytes, - timestamp: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([38, 12, 76, 198], (address, args, timestamp)) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `getAssetType` (0x896317b8) function - pub fn get_asset_type( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([137, 99, 23, 184], ()) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for ETHBalanceRetriever { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `getAddressBalance` function with signature `getAddressBalance(bytes,bytes,uint256)` and selector `0x260c4cc6` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "getAddressBalance", - abi = "getAddressBalance(bytes,bytes,uint256)" - )] - pub struct GetAddressBalanceCall { - pub address: ::ethers::core::types::Bytes, - pub args: ::ethers::core::types::Bytes, - pub timestamp: ::ethers::core::types::U256, - } - ///Container type for all input parameters for the `getAssetType` function with signature `getAssetType()` and selector `0x896317b8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "getAssetType", abi = "getAssetType()")] - pub struct GetAssetTypeCall; - ///Container type for all of the contract's call - #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum ETHBalanceRetrieverCalls { - GetAddressBalance(GetAddressBalanceCall), - GetAssetType(GetAssetTypeCall), - } - impl ::ethers::core::abi::AbiDecode for ETHBalanceRetrieverCalls { - fn decode( - data: impl AsRef<[u8]>, - ) -> ::core::result::Result { - let data = data.as_ref(); - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::GetAddressBalance(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::GetAssetType(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData.into()) - } - } - impl ::ethers::core::abi::AbiEncode for ETHBalanceRetrieverCalls { - fn encode(self) -> Vec { - match self { - Self::GetAddressBalance(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::GetAssetType(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - } - } - } - impl ::core::fmt::Display for ETHBalanceRetrieverCalls { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::GetAddressBalance(element) => ::core::fmt::Display::fmt(element, f), - Self::GetAssetType(element) => ::core::fmt::Display::fmt(element, f), - } - } - } - impl ::core::convert::From for ETHBalanceRetrieverCalls { - fn from(value: GetAddressBalanceCall) -> Self { - Self::GetAddressBalance(value) - } - } - impl ::core::convert::From for ETHBalanceRetrieverCalls { - fn from(value: GetAssetTypeCall) -> Self { - Self::GetAssetType(value) - } - } - ///Container type for all return fields from the `getAddressBalance` function with signature `getAddressBalance(bytes,bytes,uint256)` and selector `0x260c4cc6` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetAddressBalanceReturn(pub ::ethers::core::types::U256); - ///Container type for all return fields from the `getAssetType` function with signature `getAssetType()` and selector `0x896317b8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetAssetTypeReturn(pub [u8; 32]); -} diff --git a/backend/src/contracts/generated/evm_address_verifier.rs b/backend/src/contracts/generated/evm_address_verifier.rs deleted file mode 100644 index 205ff8fd..00000000 --- a/backend/src/contracts/generated/evm_address_verifier.rs +++ /dev/null @@ -1,3067 +0,0 @@ -pub use evm_address_verifier::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod evm_address_verifier { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"getAddressType\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"cexAddress\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"addressOwnershipProof\",\"type\":\"bytes\",\"components\":[]}],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"verifyAddressOwnership\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static EVMADDRESSVERIFIER_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 5, - 113, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 54, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 41, - 172, - 194, - 213, - 20, - 97, - 0, - 59, - 87, - 128, - 99, - 249, - 242, - 7, - 239, - 20, - 97, - 0, - 99, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 78, - 97, - 0, - 73, - 54, - 96, - 4, - 97, - 4, - 145, - 86, - 91, - 97, - 0, - 145, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 64, - 81, - 127, - 156, - 115, - 202, - 164, - 39, - 220, - 199, - 163, - 186, - 50, - 29, - 217, - 236, - 147, - 148, - 55, - 88, - 80, - 43, - 152, - 39, - 134, - 101, - 132, - 33, - 253, - 30, - 9, - 75, - 242, - 181, - 243, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 90, - 86, - 91, - 96, - 0, - 128, - 131, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 168, - 145, - 144, - 97, - 4, - 245, - 86, - 91, - 144, - 80, - 96, - 0, - 97, - 1, - 86, - 132, - 97, - 1, - 80, - 96, - 64, - 81, - 96, - 32, - 1, - 97, - 1, - 7, - 144, - 96, - 32, - 128, - 130, - 82, - 96, - 42, - 144, - 130, - 1, - 82, - 127, - 83, - 117, - 109, - 109, - 97, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 111, - 102, - 32, - 115, - 111, - 108, - 118, - 101, - 110, - 99, - 121, - 32, - 102, - 111, - 114, - 32, - 67, - 114, - 121, - 112, - 96, - 64, - 130, - 1, - 82, - 105, - 116, - 111, - 69, - 120, - 99, - 104, - 97, - 110, - 103, - 101, - 96, - 176, - 27, - 96, - 96, - 130, - 1, - 82, - 96, - 128, - 1, - 144, - 86, - 91, - 96, - 64, - 81, - 96, - 32, - 129, - 131, - 3, - 3, - 129, - 82, - 144, - 96, - 64, - 82, - 128, - 81, - 144, - 96, - 32, - 1, - 32, - 127, - 25, - 69, - 116, - 104, - 101, - 114, - 101, - 117, - 109, - 32, - 83, - 105, - 103, - 110, - 101, - 100, - 32, - 77, - 101, - 115, - 115, - 97, - 103, - 101, - 58, - 10, - 51, - 50, - 0, - 0, - 0, - 0, - 96, - 0, - 144, - 129, - 82, - 96, - 28, - 145, - 144, - 145, - 82, - 96, - 60, - 144, - 32, - 144, - 86, - 91, - 144, - 97, - 1, - 111, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 146, - 131, - 22, - 146, - 22, - 145, - 144, - 145, - 20, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 97, - 1, - 126, - 133, - 133, - 97, - 1, - 147, - 86, - 91, - 145, - 80, - 145, - 80, - 97, - 1, - 139, - 129, - 97, - 1, - 216, - 86, - 91, - 80, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 130, - 81, - 96, - 65, - 3, - 97, - 1, - 201, - 87, - 96, - 32, - 131, - 1, - 81, - 96, - 64, - 132, - 1, - 81, - 96, - 96, - 133, - 1, - 81, - 96, - 0, - 26, - 97, - 1, - 189, - 135, - 130, - 133, - 133, - 97, - 3, - 42, - 86, - 91, - 148, - 80, - 148, - 80, - 80, - 80, - 80, - 97, - 1, - 209, - 86, - 91, - 80, - 96, - 0, - 144, - 80, - 96, - 2, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 1, - 236, - 87, - 97, - 1, - 236, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 1, - 244, - 87, - 80, - 86, - 91, - 96, - 1, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 2, - 8, - 87, - 97, - 2, - 8, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 2, - 90, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 69, - 67, - 68, - 83, - 65, - 58, - 32, - 105, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 105, - 103, - 110, - 97, - 116, - 117, - 114, - 101, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 253, - 91, - 96, - 2, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 2, - 110, - 87, - 97, - 2, - 110, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 2, - 187, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 31, - 96, - 36, - 130, - 1, - 82, - 127, - 69, - 67, - 68, - 83, - 65, - 58, - 32, - 105, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 105, - 103, - 110, - 97, - 116, - 117, - 114, - 101, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 81, - 86, - 91, - 96, - 3, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 2, - 207, - 87, - 97, - 2, - 207, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 3, - 39, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 69, - 67, - 68, - 83, - 65, - 58, - 32, - 105, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 105, - 103, - 110, - 97, - 116, - 117, - 114, - 101, - 32, - 39, - 115, - 39, - 32, - 118, - 97, - 108, - 96, - 68, - 130, - 1, - 82, - 97, - 117, - 101, - 96, - 240, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 81, - 86, - 91, - 80, - 86, - 91, - 96, - 0, - 128, - 127, - 127, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 93, - 87, - 110, - 115, - 87, - 164, - 80, - 29, - 223, - 233, - 47, - 70, - 104, - 27, - 32, - 160, - 131, - 17, - 21, - 97, - 3, - 97, - 87, - 80, - 96, - 0, - 144, - 80, - 96, - 3, - 97, - 3, - 229, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 0, - 128, - 130, - 82, - 96, - 32, - 130, - 1, - 128, - 132, - 82, - 137, - 144, - 82, - 96, - 255, - 136, - 22, - 146, - 130, - 1, - 146, - 144, - 146, - 82, - 96, - 96, - 129, - 1, - 134, - 144, - 82, - 96, - 128, - 129, - 1, - 133, - 144, - 82, - 96, - 1, - 144, - 96, - 160, - 1, - 96, - 32, - 96, - 64, - 81, - 96, - 32, - 129, - 3, - 144, - 128, - 132, - 3, - 144, - 133, - 90, - 250, - 21, - 128, - 21, - 97, - 3, - 181, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 96, - 64, - 81, - 96, - 31, - 25, - 1, - 81, - 145, - 80, - 80, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 97, - 3, - 222, - 87, - 96, - 0, - 96, - 1, - 146, - 80, - 146, - 80, - 80, - 97, - 3, - 229, - 86, - 91, - 145, - 80, - 96, - 0, - 144, - 80, - 91, - 148, - 80, - 148, - 146, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 4, - 21, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 4, - 48, - 87, - 97, - 4, - 48, - 97, - 3, - 238, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 131, - 1, - 96, - 31, - 25, - 144, - 129, - 22, - 96, - 63, - 1, - 22, - 129, - 1, - 144, - 130, - 130, - 17, - 129, - 131, - 16, - 23, - 21, - 97, - 4, - 88, - 87, - 97, - 4, - 88, - 97, - 3, - 238, - 86, - 91, - 129, - 96, - 64, - 82, - 131, - 129, - 82, - 134, - 96, - 32, - 133, - 136, - 1, - 1, - 17, - 21, - 97, - 4, - 113, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 96, - 32, - 135, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 96, - 32, - 133, - 131, - 1, - 1, - 82, - 128, - 148, - 80, - 80, - 80, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 64, - 131, - 133, - 3, - 18, - 21, - 97, - 4, - 164, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 4, - 188, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 4, - 200, - 134, - 131, - 135, - 1, - 97, - 4, - 4, - 86, - 91, - 147, - 80, - 96, - 32, - 133, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 4, - 222, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 235, - 133, - 130, - 134, - 1, - 97, - 4, - 4, - 86, - 91, - 145, - 80, - 80, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 5, - 7, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 5, - 30, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 33, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 155, - 61, - 40, - 38, - 206, - 167, - 97, - 183, - 34, - 11, - 18, - 112, - 209, - 168, - 70, - 114, - 252, - 46, - 112, - 228, - 194, - 71, - 194, - 130, - 205, - 200, - 187, - 210, - 13, - 228, - 58, - 68, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static EVMADDRESSVERIFIER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 54, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 41, - 172, - 194, - 213, - 20, - 97, - 0, - 59, - 87, - 128, - 99, - 249, - 242, - 7, - 239, - 20, - 97, - 0, - 99, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 78, - 97, - 0, - 73, - 54, - 96, - 4, - 97, - 4, - 145, - 86, - 91, - 97, - 0, - 145, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 64, - 81, - 127, - 156, - 115, - 202, - 164, - 39, - 220, - 199, - 163, - 186, - 50, - 29, - 217, - 236, - 147, - 148, - 55, - 88, - 80, - 43, - 152, - 39, - 134, - 101, - 132, - 33, - 253, - 30, - 9, - 75, - 242, - 181, - 243, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 90, - 86, - 91, - 96, - 0, - 128, - 131, - 128, - 96, - 32, - 1, - 144, - 81, - 129, - 1, - 144, - 97, - 0, - 168, - 145, - 144, - 97, - 4, - 245, - 86, - 91, - 144, - 80, - 96, - 0, - 97, - 1, - 86, - 132, - 97, - 1, - 80, - 96, - 64, - 81, - 96, - 32, - 1, - 97, - 1, - 7, - 144, - 96, - 32, - 128, - 130, - 82, - 96, - 42, - 144, - 130, - 1, - 82, - 127, - 83, - 117, - 109, - 109, - 97, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 111, - 102, - 32, - 115, - 111, - 108, - 118, - 101, - 110, - 99, - 121, - 32, - 102, - 111, - 114, - 32, - 67, - 114, - 121, - 112, - 96, - 64, - 130, - 1, - 82, - 105, - 116, - 111, - 69, - 120, - 99, - 104, - 97, - 110, - 103, - 101, - 96, - 176, - 27, - 96, - 96, - 130, - 1, - 82, - 96, - 128, - 1, - 144, - 86, - 91, - 96, - 64, - 81, - 96, - 32, - 129, - 131, - 3, - 3, - 129, - 82, - 144, - 96, - 64, - 82, - 128, - 81, - 144, - 96, - 32, - 1, - 32, - 127, - 25, - 69, - 116, - 104, - 101, - 114, - 101, - 117, - 109, - 32, - 83, - 105, - 103, - 110, - 101, - 100, - 32, - 77, - 101, - 115, - 115, - 97, - 103, - 101, - 58, - 10, - 51, - 50, - 0, - 0, - 0, - 0, - 96, - 0, - 144, - 129, - 82, - 96, - 28, - 145, - 144, - 145, - 82, - 96, - 60, - 144, - 32, - 144, - 86, - 91, - 144, - 97, - 1, - 111, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 146, - 131, - 22, - 146, - 22, - 145, - 144, - 145, - 20, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 97, - 1, - 126, - 133, - 133, - 97, - 1, - 147, - 86, - 91, - 145, - 80, - 145, - 80, - 97, - 1, - 139, - 129, - 97, - 1, - 216, - 86, - 91, - 80, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 130, - 81, - 96, - 65, - 3, - 97, - 1, - 201, - 87, - 96, - 32, - 131, - 1, - 81, - 96, - 64, - 132, - 1, - 81, - 96, - 96, - 133, - 1, - 81, - 96, - 0, - 26, - 97, - 1, - 189, - 135, - 130, - 133, - 133, - 97, - 3, - 42, - 86, - 91, - 148, - 80, - 148, - 80, - 80, - 80, - 80, - 97, - 1, - 209, - 86, - 91, - 80, - 96, - 0, - 144, - 80, - 96, - 2, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 1, - 236, - 87, - 97, - 1, - 236, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 1, - 244, - 87, - 80, - 86, - 91, - 96, - 1, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 2, - 8, - 87, - 97, - 2, - 8, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 2, - 90, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 69, - 67, - 68, - 83, - 65, - 58, - 32, - 105, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 105, - 103, - 110, - 97, - 116, - 117, - 114, - 101, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 253, - 91, - 96, - 2, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 2, - 110, - 87, - 97, - 2, - 110, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 2, - 187, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 31, - 96, - 36, - 130, - 1, - 82, - 127, - 69, - 67, - 68, - 83, - 65, - 58, - 32, - 105, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 105, - 103, - 110, - 97, - 116, - 117, - 114, - 101, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 81, - 86, - 91, - 96, - 3, - 129, - 96, - 4, - 129, - 17, - 21, - 97, - 2, - 207, - 87, - 97, - 2, - 207, - 97, - 5, - 37, - 86, - 91, - 3, - 97, - 3, - 39, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 69, - 67, - 68, - 83, - 65, - 58, - 32, - 105, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 105, - 103, - 110, - 97, - 116, - 117, - 114, - 101, - 32, - 39, - 115, - 39, - 32, - 118, - 97, - 108, - 96, - 68, - 130, - 1, - 82, - 97, - 117, - 101, - 96, - 240, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 81, - 86, - 91, - 80, - 86, - 91, - 96, - 0, - 128, - 127, - 127, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 93, - 87, - 110, - 115, - 87, - 164, - 80, - 29, - 223, - 233, - 47, - 70, - 104, - 27, - 32, - 160, - 131, - 17, - 21, - 97, - 3, - 97, - 87, - 80, - 96, - 0, - 144, - 80, - 96, - 3, - 97, - 3, - 229, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 0, - 128, - 130, - 82, - 96, - 32, - 130, - 1, - 128, - 132, - 82, - 137, - 144, - 82, - 96, - 255, - 136, - 22, - 146, - 130, - 1, - 146, - 144, - 146, - 82, - 96, - 96, - 129, - 1, - 134, - 144, - 82, - 96, - 128, - 129, - 1, - 133, - 144, - 82, - 96, - 1, - 144, - 96, - 160, - 1, - 96, - 32, - 96, - 64, - 81, - 96, - 32, - 129, - 3, - 144, - 128, - 132, - 3, - 144, - 133, - 90, - 250, - 21, - 128, - 21, - 97, - 3, - 181, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 96, - 64, - 81, - 96, - 31, - 25, - 1, - 81, - 145, - 80, - 80, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 97, - 3, - 222, - 87, - 96, - 0, - 96, - 1, - 146, - 80, - 146, - 80, - 80, - 97, - 3, - 229, - 86, - 91, - 145, - 80, - 96, - 0, - 144, - 80, - 91, - 148, - 80, - 148, - 146, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 4, - 21, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 4, - 48, - 87, - 97, - 4, - 48, - 97, - 3, - 238, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 131, - 1, - 96, - 31, - 25, - 144, - 129, - 22, - 96, - 63, - 1, - 22, - 129, - 1, - 144, - 130, - 130, - 17, - 129, - 131, - 16, - 23, - 21, - 97, - 4, - 88, - 87, - 97, - 4, - 88, - 97, - 3, - 238, - 86, - 91, - 129, - 96, - 64, - 82, - 131, - 129, - 82, - 134, - 96, - 32, - 133, - 136, - 1, - 1, - 17, - 21, - 97, - 4, - 113, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 96, - 32, - 135, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 96, - 32, - 133, - 131, - 1, - 1, - 82, - 128, - 148, - 80, - 80, - 80, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 64, - 131, - 133, - 3, - 18, - 21, - 97, - 4, - 164, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 4, - 188, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 4, - 200, - 134, - 131, - 135, - 1, - 97, - 4, - 4, - 86, - 91, - 147, - 80, - 96, - 32, - 133, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 4, - 222, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 235, - 133, - 130, - 134, - 1, - 97, - 4, - 4, - 86, - 91, - 145, - 80, - 80, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 5, - 7, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 5, - 30, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 33, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 155, - 61, - 40, - 38, - 206, - 167, - 97, - 183, - 34, - 11, - 18, - 112, - 209, - 168, - 70, - 114, - 252, - 46, - 112, - 228, - 194, - 71, - 194, - 130, - 205, - 200, - 187, - 210, - 13, - 228, - 58, - 68, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static EVMADDRESSVERIFIER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct EVMAddressVerifier(::ethers::contract::Contract); - impl ::core::clone::Clone for EVMAddressVerifier { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for EVMAddressVerifier { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for EVMAddressVerifier { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for EVMAddressVerifier { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(EVMAddressVerifier)).field(&self.address()).finish() - } - } - impl EVMAddressVerifier { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - EVMADDRESSVERIFIER_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - EVMADDRESSVERIFIER_ABI.clone(), - EVMADDRESSVERIFIER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `getAddressType` (0xf9f207ef) function - pub fn get_address_type( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([249, 242, 7, 239], ()) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `verifyAddressOwnership` (0x29acc2d5) function - pub fn verify_address_ownership( - &self, - cex_address: ::ethers::core::types::Bytes, - address_ownership_proof: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([41, 172, 194, 213], (cex_address, address_ownership_proof)) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for EVMAddressVerifier { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `getAddressType` function with signature `getAddressType()` and selector `0xf9f207ef` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "getAddressType", abi = "getAddressType()")] - pub struct GetAddressTypeCall; - ///Container type for all input parameters for the `verifyAddressOwnership` function with signature `verifyAddressOwnership(bytes,bytes)` and selector `0x29acc2d5` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "verifyAddressOwnership", - abi = "verifyAddressOwnership(bytes,bytes)" - )] - pub struct VerifyAddressOwnershipCall { - pub cex_address: ::ethers::core::types::Bytes, - pub address_ownership_proof: ::ethers::core::types::Bytes, - } - ///Container type for all of the contract's call - #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum EVMAddressVerifierCalls { - GetAddressType(GetAddressTypeCall), - VerifyAddressOwnership(VerifyAddressOwnershipCall), - } - impl ::ethers::core::abi::AbiDecode for EVMAddressVerifierCalls { - fn decode( - data: impl AsRef<[u8]>, - ) -> ::core::result::Result { - let data = data.as_ref(); - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::GetAddressType(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::VerifyAddressOwnership(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData.into()) - } - } - impl ::ethers::core::abi::AbiEncode for EVMAddressVerifierCalls { - fn encode(self) -> Vec { - match self { - Self::GetAddressType(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::VerifyAddressOwnership(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - } - } - } - impl ::core::fmt::Display for EVMAddressVerifierCalls { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::GetAddressType(element) => ::core::fmt::Display::fmt(element, f), - Self::VerifyAddressOwnership(element) => { - ::core::fmt::Display::fmt(element, f) - } - } - } - } - impl ::core::convert::From for EVMAddressVerifierCalls { - fn from(value: GetAddressTypeCall) -> Self { - Self::GetAddressType(value) - } - } - impl ::core::convert::From for EVMAddressVerifierCalls { - fn from(value: VerifyAddressOwnershipCall) -> Self { - Self::VerifyAddressOwnership(value) - } - } - ///Container type for all return fields from the `getAddressType` function with signature `getAddressType()` and selector `0xf9f207ef` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetAddressTypeReturn(pub [u8; 32]); - ///Container type for all return fields from the `verifyAddressOwnership` function with signature `verifyAddressOwnership(bytes,bytes)` and selector `0x29acc2d5` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyAddressOwnershipReturn(pub bool); -} diff --git a/backend/src/contracts/generated/mod.rs b/backend/src/contracts/generated/mod.rs index df2e95fe..116b51ed 100644 --- a/backend/src/contracts/generated/mod.rs +++ b/backend/src/contracts/generated/mod.rs @@ -1,6 +1,2 @@ -pub mod erc20_balance_retriever; -pub mod eth_balance_retriever; -pub mod evm_address_verifier; -pub mod mock_erc20; pub mod summa_contract; pub mod verifier; \ No newline at end of file diff --git a/backend/src/contracts/generated/summa_contract.rs b/backend/src/contracts/generated/summa_contract.rs index 70c81480..80e3a932 100644 --- a/backend/src/contracts/generated/summa_contract.rs +++ b/backend/src/contracts/generated/summa_contract.rs @@ -11,7 +11,7 @@ pub use summa::*; )] pub mod summa { #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"contract IVerifier\",\"name\":\"_verifier\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"addressType\",\"type\":\"bytes32\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\",\"components\":[],\"indexed\":false}],\"type\":\"event\",\"name\":\"AddressVerifierSet\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assetType\",\"type\":\"bytes32\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"balanceRetriever\",\"type\":\"address\",\"components\":[],\"indexed\":false}],\"type\":\"event\",\"name\":\"BalanceRetrieverSet\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"struct Summa.OwnedAddress[]\",\"name\":\"addresses\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bytes32\",\"name\":\"addressType\",\"type\":\"bytes32\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"cexAddress\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"ownershipProof\",\"type\":\"bytes\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"ExchangeAddressesSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[],\"indexed\":true}],\"type\":\"event\",\"name\":\"ProofOfSolvencySubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceRetriever\",\"outputs\":[{\"internalType\":\"contract IBalanceRetriever\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cexAddressVerifier\",\"outputs\":[{\"internalType\":\"contract IAddressOwnershipVerifier\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"confirmedAddress\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setAddressOwnershipVerifier\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"retriever\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setBalanceRetriever\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.OwnedAddress[]\",\"name\":\"_cexAddresses\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bytes32\",\"name\":\"addressType\",\"type\":\"bytes32\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"cexAddress\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"ownershipProof\",\"type\":\"bytes\",\"components\":[]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfAddressOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.OwnedAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bytes32\",\"name\":\"assetType\",\"type\":\"bytes32\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"amountToProve\",\"type\":\"uint256\",\"components\":[]},{\"internalType\":\"bytes[]\",\"name\":\"addresses\",\"type\":\"bytes[]\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"balanceRetrieverArgs\",\"type\":\"bytes\",\"components\":[]}]},{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfSolvency\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"publicInputs\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyZkProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; + const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"contract IVerifier\",\"name\":\"_verifier\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"AddressOwnershipProofSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[],\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[],\"indexed\":false},{\"internalType\":\"struct Summa.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"assetName\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"SolvencyProofSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"addressOwnershipProofs\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"ownershipProofByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"_addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfAddressOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[]},{\"internalType\":\"struct Summa.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"assetName\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"components\":[]}]},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfSolvency\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"publicInputs\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyZkProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; ///The parsed JSON ABI of the contract. pub static SUMMA_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(|| ::ethers::core::utils::__serde_json::from_str(__ABI).expect("ABI is always valid")); @@ -39,14 +39,14 @@ pub mod summa { 64, 81, 97, - 23, - 6, + 20, + 222, 56, 3, 128, 97, - 23, - 6, + 20, + 222, 131, 57, 129, @@ -223,8 +223,8 @@ pub mod summa { 128, 81, 97, - 22, - 34, + 19, + 250, 97, 0, 228, @@ -234,13 +234,13 @@ pub mod summa { 96, 0, 97, - 12, - 214, + 9, + 41, 1, 82, 97, - 22, - 34, + 19, + 250, 96, 0, 243, @@ -269,7 +269,7 @@ pub mod summa { 16, 97, 0, - 169, + 136, 87, 96, 0, @@ -279,58 +279,36 @@ pub mod summa { 28, 128, 99, - 141, - 165, - 203, - 91, + 163, + 196, + 188, + 248, 17, 97, 0, - 113, - 87, - 128, - 99, - 141, - 165, - 203, 91, - 20, - 97, - 1, - 87, - 87, - 128, - 99, - 143, - 19, - 226, - 82, - 20, - 97, - 1, - 104, 87, 128, 99, - 152, - 159, - 141, - 231, + 163, + 196, + 188, + 248, 20, 97, - 1, - 123, + 0, + 248, 87, 128, 99, - 226, - 23, - 88, - 7, + 199, + 221, + 202, + 14, 20, 97, 1, - 164, + 27, 87, 128, 99, @@ -341,7 +319,7 @@ pub mod summa { 20, 97, 1, - 183, + 46, 87, 128, 99, @@ -352,7 +330,7 @@ pub mod summa { 20, 97, 1, - 202, + 81, 87, 96, 0, @@ -361,47 +339,25 @@ pub mod summa { 91, 128, 99, - 29, - 106, - 67, - 38, + 35, + 235, + 148, + 160, 20, 97, 0, - 174, + 141, 87, 128, 99, - 51, - 67, - 157, - 101, + 65, + 58, + 159, + 45, 20, 97, 0, - 244, - 87, - 128, - 99, - 53, - 181, - 148, - 49, - 20, - 97, - 1, - 39, - 87, - 128, - 99, - 92, 192, - 75, - 173, - 20, - 97, - 1, - 60, 87, 128, 99, @@ -411,8 +367,19 @@ pub mod summa { 166, 20, 97, - 1, - 79, + 0, + 213, + 87, + 128, + 99, + 141, + 165, + 203, + 91, + 20, + 97, + 0, + 221, 87, 91, 96, @@ -422,20 +389,20 @@ pub mod summa { 91, 97, 0, - 215, + 173, 97, 0, - 188, + 155, 54, 96, 4, 97, - 14, - 122, + 10, + 205, 86, 91, 96, - 3, + 2, 96, 32, 82, @@ -449,32 +416,13 @@ pub mod summa { 144, 32, 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, 129, 86, 91, 96, 64, 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, 144, - 145, - 22, 129, 82, 96, @@ -491,46 +439,51 @@ pub mod summa { 243, 91, 97, - 1, - 23, + 0, + 211, 97, - 1, - 2, + 0, + 206, 54, 96, 4, 97, - 14, - 122, + 12, + 13, 86, 91, - 96, + 97, 1, - 96, - 32, - 82, - 96, + 100, + 86, + 91, 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 84, - 96, - 255, - 22, - 129, + 91, + 97, + 0, + 211, + 97, + 3, + 234, 86, 91, 96, + 0, + 84, + 96, 64, 81, + 96, + 1, + 96, + 1, + 96, + 160, + 27, + 3, 144, - 21, - 21, + 145, + 22, 129, 82, 96, @@ -538,212 +491,134 @@ pub mod summa { 1, 97, 0, - 235, + 183, 86, 91, 97, 1, - 58, + 11, 97, 1, - 53, + 6, 54, 96, 4, 97, - 14, - 147, + 10, + 205, 86, 91, 97, - 1, - 221, + 3, + 254, 86, 91, + 96, + 64, + 81, + 97, 0, + 183, + 148, + 147, + 146, + 145, + 144, + 97, + 13, + 167, + 86, 91, 97, - 1, - 58, + 0, + 211, 97, 1, - 74, + 41, 54, 96, 4, 97, - 14, - 147, + 13, + 255, 86, 91, 97, - 3, - 89, + 6, + 94, 86, 91, 97, 1, - 58, - 97, - 4, - 197, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 97, - 0, - 215, - 86, - 91, + 65, 97, 1, - 58, - 97, - 1, - 118, + 60, 54, 96, 4, 97, 15, - 229, - 86, - 91, - 97, - 4, - 217, + 89, 86, 91, 97, - 0, - 215, - 97, - 1, - 137, - 54, - 96, - 4, - 97, - 14, - 122, + 9, + 8, 86, 91, 96, - 2, - 96, - 32, - 82, - 96, - 0, + 64, + 81, 144, + 21, + 21, 129, 82, 96, - 64, - 144, 32, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 129, - 86, - 91, - 97, - 1, - 58, - 97, - 1, - 178, - 54, - 96, - 4, - 97, - 16, - 255, - 86, - 91, - 97, - 7, - 168, - 86, - 91, - 97, 1, - 23, - 97, - 1, - 197, - 54, - 96, - 4, - 97, - 19, - 13, - 86, - 91, 97, - 12, - 188, + 0, + 183, 86, 91, 97, - 1, - 58, + 0, + 211, 97, 1, - 216, + 95, 54, 96, 4, 97, - 14, - 147, + 16, + 20, 86, 91, 97, - 13, - 87, + 9, + 170, 86, 91, 97, 1, - 229, + 108, 97, - 13, - 208, + 10, + 35, 86, 91, 96, 1, + 84, 96, - 1, - 96, - 160, - 27, + 0, 3, - 129, - 22, 97, - 2, - 64, + 1, + 226, 87, 96, 64, @@ -765,52 +640,83 @@ pub mod summa { 1, 82, 96, - 24, + 54, 96, 36, 130, 1, 82, 127, - 73, - 110, - 118, + 84, + 104, + 101, + 32, + 67, + 69, + 88, + 32, + 104, 97, - 108, + 115, + 32, + 110, + 111, + 116, + 32, + 115, + 117, + 98, + 109, 105, + 116, + 116, + 101, 100, 32, 97, + 110, + 121, + 32, + 97, 100, + 96, + 68, + 130, + 1, + 82, + 117, 100, 114, 101, 115, 115, 32, - 118, + 111, + 119, + 110, 101, 114, + 115, + 104, 105, - 102, - 105, - 101, + 112, + 32, + 112, 114, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 111, + 111, + 102, + 115, 96, - 68, + 80, + 27, + 96, + 100, 130, 1, 82, 96, - 100, + 132, 1, 91, 96, @@ -824,115 +730,213 @@ pub mod summa { 91, 96, 0, - 129, - 144, - 80, - 96, - 0, - 129, + 131, + 81, 96, 1, - 96, + 97, 1, - 96, - 160, - 27, - 3, - 22, - 99, - 249, 242, - 7, - 239, - 96, - 64, - 81, - 129, - 99, + 145, + 144, + 97, + 16, + 90, + 86, + 91, + 103, + 255, + 255, + 255, + 255, 255, 255, 255, 255, - 22, - 96, - 224, - 27, - 129, - 82, - 96, - 4, - 1, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, 129, - 134, - 90, - 250, + 17, 21, + 97, + 2, + 10, + 87, + 97, + 2, + 10, + 97, + 10, + 230, + 86, + 91, + 96, + 64, + 81, + 144, + 128, + 130, + 82, + 128, + 96, + 32, + 2, + 96, + 32, + 1, + 130, + 1, + 96, + 64, + 82, 128, 21, 97, 2, - 133, + 51, 87, - 61, + 129, 96, - 0, - 128, - 62, - 61, + 32, + 1, 96, - 0, - 253, + 32, + 130, + 2, + 128, + 54, + 131, + 55, + 1, + 144, + 80, 91, 80, + 144, 80, + 132, + 129, + 96, + 0, + 129, + 81, + 129, + 16, + 97, + 2, + 74, + 87, + 97, + 2, + 74, + 97, + 16, + 109, + 86, + 91, + 96, + 32, + 2, + 96, + 32, + 1, + 1, + 129, + 129, + 82, 80, 80, 96, - 64, + 0, + 91, + 132, 81, - 61, + 129, + 16, + 21, + 97, + 3, + 69, + 87, + 132, + 129, + 129, + 81, + 129, + 16, + 97, + 2, + 116, + 87, + 97, + 2, + 116, + 97, + 16, + 109, + 86, + 91, 96, - 31, - 25, + 32, + 2, 96, - 31, - 130, + 32, 1, - 22, - 130, 1, - 128, + 81, 96, - 64, - 82, + 32, + 1, + 81, + 81, + 96, + 0, + 20, + 21, + 128, + 21, + 97, + 2, + 176, + 87, 80, + 132, 129, - 1, - 144, + 129, + 81, + 129, + 16, 97, 2, - 169, - 145, - 144, + 158, + 87, 97, - 19, - 199, + 2, + 158, + 97, + 16, + 109, 86, 91, - 144, - 80, - 128, + 96, + 32, + 2, + 96, + 32, + 1, + 1, + 81, + 96, + 0, + 1, + 81, + 81, + 96, + 0, + 20, + 21, + 91, 97, 2, - 239, + 236, 87, 96, 64, @@ -954,35 +958,28 @@ pub mod summa { 1, 82, 96, - 20, + 13, 96, 36, 130, 1, 82, - 115, - 73, - 110, - 118, - 97, 108, - 105, - 100, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 116, - 121, - 112, - 101, - 96, + 18, + 91, + 157, + 152, + 91, + 26, + 89, + 8, + 24, + 92, + 220, + 217, + 93, 96, + 154, 27, 96, 68, @@ -993,137 +990,113 @@ pub mod summa { 100, 1, 97, - 2, - 55, + 1, + 217, 86, 91, - 96, - 0, + 132, 129, 129, - 82, + 81, + 129, + 16, + 97, + 2, + 254, + 87, + 97, + 2, + 254, + 97, + 16, + 109, + 86, + 91, 96, - 3, + 32, + 2, 96, 32, - 144, - 129, - 82, + 1, + 1, + 81, 96, 64, - 145, - 130, - 144, - 32, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 22, - 96, 1, + 81, + 130, + 130, 96, 1, - 96, - 160, - 27, + 97, 3, - 134, - 129, - 22, + 24, 145, 144, - 145, - 23, + 97, + 16, + 90, + 86, + 91, + 129, + 81, + 129, + 16, + 97, + 3, + 40, + 87, + 97, + 3, + 40, + 97, + 16, + 109, + 86, + 91, + 96, + 32, 144, + 129, + 2, 145, - 85, - 145, - 81, + 144, 145, - 133, - 22, - 130, + 1, + 1, 82, - 130, - 145, - 127, - 90, - 167, - 212, - 30, - 241, - 155, - 248, - 18, - 24, - 62, - 251, - 12, - 76, - 175, - 66, - 127, - 122, - 36, - 192, - 183, - 6, - 88, + 128, + 97, + 3, + 61, 129, - 115, - 127, - 75, - 135, - 101, - 250, - 143, - 213, - 11, - 145, - 1, + 97, + 16, + 131, + 86, 91, - 96, - 64, - 81, - 128, 145, - 3, - 144, - 162, - 80, 80, 80, + 97, + 2, + 89, 86, 91, + 80, 97, 3, + 80, + 131, + 130, 97, - 97, - 13, - 208, + 9, + 8, 86, 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, 97, 3, - 183, + 143, 87, 96, 64, @@ -1145,45 +1118,32 @@ pub mod summa { 1, 82, 96, - 25, + 16, 96, 36, 130, 1, 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 98, - 97, - 108, - 97, - 110, - 99, - 101, - 32, - 114, - 101, - 116, - 114, - 105, - 101, - 118, - 101, - 114, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 111, + 36, + 183, + 59, + 48, + 182, + 52, + 178, + 16, + 45, + 37, + 144, + 56, + 57, + 55, + 183, + 179, + 96, + 129, + 27, 96, 68, 130, @@ -1193,664 +1153,767 @@ pub mod summa { 100, 1, 97, - 2, - 55, + 1, + 217, 86, 91, - 96, - 0, 129, - 144, - 80, + 127, + 4, + 115, + 88, + 28, + 60, + 244, + 55, + 175, + 197, + 34, + 7, + 216, + 140, + 225, + 84, + 26, + 251, + 199, + 206, + 159, + 219, + 131, + 180, + 212, + 211, + 183, + 33, + 75, + 238, + 213, + 111, + 245, + 130, 96, 0, 129, + 81, + 129, + 16, + 97, + 3, + 196, + 87, + 97, + 3, + 196, + 97, + 16, + 109, + 86, + 91, 96, - 1, + 32, + 2, 96, + 32, 1, - 96, - 160, - 27, - 3, - 22, - 99, - 137, - 99, - 23, - 184, + 1, + 81, + 134, 96, 64, 81, - 129, - 99, - 255, - 255, - 255, - 255, - 22, - 96, - 224, - 27, - 129, - 82, - 96, - 4, - 1, - 96, - 32, + 97, + 3, + 219, + 146, + 145, + 144, + 97, + 16, + 156, + 86, + 91, 96, 64, 81, 128, - 131, + 145, 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, + 144, + 162, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 97, + 3, + 242, + 97, + 10, + 35, + 86, + 91, 97, 3, 252, - 87, - 61, 96, 0, - 128, - 62, - 61, + 97, + 10, + 125, + 86, + 91, + 86, + 91, + 96, + 1, + 129, + 129, + 84, + 129, + 16, + 97, + 4, + 14, + 87, 96, 0, + 128, 253, 91, - 80, - 80, - 80, - 80, + 144, 96, - 64, - 81, - 61, + 0, + 82, 96, - 31, - 25, + 32, 96, - 31, - 130, - 1, - 22, - 130, + 0, + 32, + 144, + 96, + 4, + 2, 1, - 128, 96, - 64, - 82, + 0, + 145, 80, - 129, - 1, 144, + 80, + 128, + 96, + 0, + 1, + 128, + 84, 97, 4, - 32, - 145, + 49, 144, 97, - 19, - 199, + 17, + 51, 86, 91, - 144, - 80, 128, - 97, + 96, + 31, + 1, + 96, + 32, + 128, + 145, 4, - 100, - 87, + 2, + 96, + 32, + 1, 96, 64, 81, - 98, - 70, - 27, - 205, + 144, + 129, + 1, 96, - 229, - 27, + 64, + 82, + 128, + 146, + 145, + 144, + 129, 129, 82, 96, 32, - 96, - 4, - 130, 1, - 82, - 96, - 18, - 96, - 36, 130, - 1, - 82, - 113, - 73, - 110, - 118, + 128, + 84, 97, - 108, - 105, - 100, - 32, + 4, + 93, + 144, 97, - 115, - 115, - 101, - 116, - 32, - 116, - 121, - 112, - 101, - 96, - 112, - 27, + 17, + 51, + 86, + 91, + 128, + 21, + 97, + 4, + 170, + 87, + 128, 96, - 68, - 130, + 31, + 16, + 97, + 4, + 127, + 87, + 97, 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, 82, + 145, 96, - 100, + 32, 1, + 145, 97, - 2, - 55, + 4, + 170, 86, 91, + 130, + 1, + 145, + 144, 96, 0, - 129, - 129, 82, 96, - 2, + 32, 96, + 0, 32, 144, + 91, + 129, + 84, 129, 82, - 96, - 64, - 145, - 130, 144, - 32, - 128, - 84, 96, 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 22, - 96, 1, + 144, 96, + 32, 1, - 96, - 160, - 27, + 128, + 131, + 17, + 97, + 4, + 141, + 87, + 130, + 144, 3, - 134, - 129, + 96, + 31, 22, + 130, + 1, 145, + 91, + 80, + 80, + 80, + 80, + 80, 144, - 145, - 23, + 128, + 96, + 1, + 1, + 128, + 84, + 97, + 4, + 191, 144, + 97, + 17, + 51, + 86, + 91, + 128, + 96, + 31, + 1, + 96, + 32, + 128, 145, - 85, - 145, + 4, + 2, + 96, + 32, + 1, + 96, + 64, 81, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, 145, - 133, - 22, - 130, + 144, + 129, + 129, 82, + 96, + 32, + 1, 130, - 145, - 127, - 237, - 255, - 33, - 70, - 78, - 70, - 18, - 83, - 236, - 11, - 28, - 61, + 128, 84, - 167, - 104, - 186, - 185, - 65, - 137, - 208, - 148, - 53, - 226, - 227, - 243, - 159, - 135, - 80, - 176, - 161, - 87, - 79, - 145, - 1, 97, - 3, - 76, + 4, + 235, + 144, + 97, + 17, + 51, 86, 91, + 128, + 21, 97, - 4, - 205, + 5, + 56, + 87, + 128, + 96, + 31, + 16, 97, + 5, 13, - 208, - 86, - 91, + 87, 97, + 1, + 0, + 128, + 131, + 84, 4, - 215, + 2, + 131, + 82, + 145, 96, - 0, + 32, + 1, + 145, 97, - 14, - 42, - 86, - 91, + 5, + 56, 86, 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, + 96, + 32, 96, 0, + 32, + 144, 91, 129, - 81, + 84, 129, - 16, - 21, + 82, + 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, + 131, + 17, 97, - 7, - 109, + 5, + 27, 87, - 96, - 0, 130, + 144, + 3, + 96, + 31, + 22, 130, - 129, - 81, - 129, - 16, - 97, - 4, - 249, - 87, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 144, + 128, + 96, + 2, + 1, + 128, + 84, 97, - 4, - 249, + 5, + 77, + 144, 97, - 19, - 224, + 17, + 51, 86, 91, + 128, + 96, + 31, + 1, 96, 32, - 144, - 129, - 2, - 145, - 144, + 128, 145, + 4, + 2, + 96, + 32, 1, - 129, - 1, + 96, + 64, 81, + 144, 129, 1, - 81, + 96, + 64, + 82, 128, - 81, + 146, + 145, 144, - 130, - 1, - 32, - 96, - 0, 129, 129, 82, 96, + 32, 1, - 144, - 146, - 82, - 96, - 64, - 144, - 145, - 32, + 130, + 128, 84, + 97, + 5, + 121, 144, - 145, - 80, - 96, - 255, - 22, + 97, + 17, + 51, + 86, + 91, + 128, 21, 97, 5, - 113, + 198, 87, + 128, 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, + 31, + 16, 97, - 108, - 114, - 101, + 5, + 155, + 87, 97, - 100, - 121, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 100, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, 82, + 145, 96, - 100, + 32, 1, + 145, 97, - 2, - 55, + 5, + 198, 86, 91, + 130, + 1, + 145, + 144, 96, 0, - 129, - 129, 82, 96, - 1, + 32, 96, + 0, 32, - 129, 144, + 91, + 129, + 84, + 129, 82, + 144, + 96, + 1, + 1, + 144, 96, - 64, - 130, 32, + 1, 128, - 84, + 131, + 17, + 97, + 5, + 169, + 87, + 130, + 144, + 3, 96, - 255, - 25, + 31, 22, - 144, + 130, + 1, 145, - 23, + 91, + 80, + 80, + 80, + 80, + 80, 144, - 85, - 131, - 81, + 128, 96, 3, - 144, - 130, - 144, - 134, - 144, - 134, - 144, - 129, - 16, - 97, - 5, - 165, - 87, + 1, + 128, + 84, 97, 5, - 165, + 219, + 144, 97, - 19, - 224, + 17, + 51, 86, 91, + 128, + 96, + 31, + 1, 96, 32, - 144, - 129, - 2, - 145, - 144, + 128, 145, + 4, + 2, + 96, + 32, 1, - 129, - 1, - 81, + 96, + 64, 81, - 130, - 82, + 144, 129, 1, + 96, + 64, + 82, + 128, + 146, 145, 144, - 145, + 129, + 129, 82, 96, - 64, - 1, - 96, - 0, 32, + 1, + 130, + 128, + 84, + 97, + 6, + 7, + 144, + 97, + 17, + 51, + 86, + 91, + 128, + 21, + 97, + 6, 84, + 87, + 128, 96, + 31, + 16, + 97, + 6, + 41, + 87, + 97, 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, 96, + 32, 1, - 96, - 160, - 27, - 3, - 22, - 3, + 145, 97, 6, - 49, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, + 84, + 86, + 91, + 130, + 1, + 145, + 144, 96, - 229, - 27, - 129, + 0, 82, 96, 32, 96, - 4, - 130, - 1, + 0, + 32, + 144, + 91, + 129, + 84, + 129, 82, + 144, 96, - 49, - 96, - 36, - 130, 1, - 82, - 127, - 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 114, - 32, - 110, - 111, - 116, - 32, - 115, - 101, - 116, - 32, - 102, - 111, - 114, - 32, - 116, - 104, - 105, - 96, - 68, - 130, 1, - 82, - 112, - 115, - 32, - 116, - 121, - 112, - 101, - 32, - 111, - 102, + 144, + 96, 32, + 1, + 128, + 131, + 17, 97, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 120, - 27, + 6, + 55, + 87, + 130, + 144, + 3, 96, - 100, + 31, + 22, 130, 1, - 82, - 96, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 144, + 80, 132, - 1, + 86, + 91, 97, - 2, - 55, + 6, + 102, + 97, + 10, + 35, 86, 91, 96, - 3, + 0, + 91, + 129, + 81, + 129, + 16, + 21, + 97, + 8, + 205, + 87, 96, 0, - 132, - 132, + 130, + 130, 129, 81, 129, 16, 97, 6, - 71, + 134, 87, 97, 6, - 71, + 134, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -1865,449 +1928,406 @@ pub mod summa { 0, 1, 81, - 129, - 82, + 96, + 64, + 81, 96, 32, 1, + 97, + 6, + 162, + 145, 144, + 97, + 17, + 109, + 86, + 91, + 96, + 64, + 128, + 81, + 96, + 31, + 25, + 129, + 132, + 3, + 1, + 129, + 82, + 145, 129, 82, + 129, + 81, 96, 32, + 146, + 131, 1, - 96, - 0, 32, 96, 0, + 129, + 129, + 82, + 96, + 2, 144, + 147, + 82, + 145, + 32, 84, 144, + 145, + 80, + 128, + 21, 97, - 1, - 0, - 10, - 144, - 4, - 96, - 1, - 96, - 1, + 7, + 24, + 87, 96, - 160, + 64, + 81, + 98, + 70, 27, - 3, - 22, - 96, - 1, - 96, - 1, + 205, 96, - 160, + 229, 27, - 3, - 22, - 99, - 41, - 172, - 194, - 213, - 132, - 132, - 129, - 81, 129, - 16, - 97, - 6, - 149, - 87, - 97, - 6, - 149, - 97, - 19, - 224, - 86, - 91, + 82, 96, 32, - 2, 96, - 32, - 1, + 4, + 130, 1, - 81, + 82, 96, - 32, + 24, + 96, + 36, + 130, 1, - 81, - 133, - 133, + 82, + 127, + 65, + 100, + 100, + 114, + 101, + 115, + 115, + 32, + 97, + 108, + 114, + 101, + 97, + 100, + 121, + 32, + 118, + 101, + 114, + 105, + 102, + 105, + 101, + 100, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 96, + 68, + 130, + 1, + 82, + 96, + 100, + 1, + 97, + 1, + 217, + 86, + 91, + 97, + 7, + 35, + 131, + 96, + 1, + 97, + 16, + 90, + 86, + 91, + 96, + 0, + 131, 129, + 82, + 96, + 2, + 96, + 32, + 82, + 96, + 64, + 144, + 32, + 85, + 131, 81, + 96, + 1, + 144, + 133, + 144, + 133, + 144, 129, 16, 97, - 6, - 179, + 7, + 73, 87, 97, - 6, - 179, + 7, + 73, 97, - 19, - 224, + 16, + 109, 86, 91, 96, 32, + 144, + 129, 2, - 96, - 32, + 145, + 144, + 145, 1, + 129, 1, 81, + 130, + 84, 96, - 64, 1, - 81, - 96, - 64, - 81, - 131, - 99, - 255, - 255, - 255, - 255, - 22, - 96, - 224, - 27, 129, + 1, + 132, + 85, + 96, + 0, + 147, + 132, 82, + 145, + 144, + 146, + 32, + 130, + 81, 96, 4, + 144, + 146, + 2, 1, + 144, + 129, + 144, 97, - 6, - 220, - 146, - 145, + 7, + 123, 144, + 130, 97, - 20, - 60, + 17, + 207, 86, 91, + 80, 96, 32, - 96, - 64, + 130, + 1, 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 6, - 249, - 87, - 61, 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, + 1, + 130, + 1, + 144, + 97, + 7, + 144, + 144, + 130, + 97, + 17, + 207, + 86, 91, 80, - 80, - 80, - 80, 96, 64, + 130, + 1, 81, - 61, - 96, - 31, - 25, 96, - 31, + 2, 130, 1, - 22, + 144, + 97, + 7, + 165, + 144, + 130, + 97, + 17, + 207, + 86, + 91, + 80, + 96, + 96, 130, 1, - 128, + 81, 96, - 64, - 82, - 80, - 129, + 3, + 130, 1, 144, 97, 7, - 29, - 145, + 186, 144, + 130, 97, - 20, - 106, + 17, + 207, 86, 91, + 80, + 80, + 80, + 131, + 131, + 129, + 81, + 129, + 16, 97, 7, - 90, + 207, 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, + 97, + 7, + 207, + 97, + 16, + 109, + 86, + 91, 96, 32, + 2, 96, - 4, - 130, + 32, 1, - 82, - 96, - 14, - 96, - 36, - 130, 1, - 82, - 109, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 57, - 180, - 179, - 183, - 50, - 185, - 96, - 145, - 27, + 81, 96, - 68, - 130, + 0, 1, - 82, + 81, + 81, 96, - 100, - 1, - 97, - 2, - 55, - 86, - 91, - 80, - 128, - 97, - 7, - 101, - 129, - 97, + 0, 20, - 162, - 86, - 91, - 145, - 80, - 80, + 21, + 128, + 21, 97, - 4, - 220, - 86, - 91, + 8, + 11, + 87, 80, - 127, - 216, - 34, - 202, - 68, - 227, - 12, - 70, - 150, - 60, - 245, - 247, - 253, - 144, - 202, - 238, - 168, - 67, - 214, - 75, - 231, - 179, - 31, - 231, - 97, - 181, - 48, - 120, - 171, - 249, - 130, - 242, - 27, + 131, + 131, 129, - 96, - 64, - 81, - 97, - 7, - 157, - 145, - 144, - 97, - 20, - 187, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 161, - 80, - 86, - 91, - 96, - 0, - 132, 81, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, 129, - 17, - 21, + 16, 97, 7, - 195, + 249, 87, 97, 7, - 195, + 249, 97, - 14, - 195, + 16, + 109, 86, 91, 96, - 64, - 81, - 144, - 128, - 130, - 82, - 128, - 96, 32, 2, 96, 32, 1, - 130, - 1, - 96, - 64, - 82, - 128, - 21, - 97, - 7, - 236, - 87, - 129, - 96, - 32, 1, + 81, 96, 32, - 130, - 2, - 128, - 54, - 131, - 55, 1, - 144, - 80, - 91, - 80, - 144, - 80, + 81, + 81, 96, 0, + 20, + 21, 91, - 133, - 81, - 129, - 16, + 128, 21, 97, - 11, - 102, + 8, + 54, 87, - 96, - 0, - 91, - 134, - 130, + 80, + 131, + 131, 129, 81, 129, 16, 97, 8, - 16, + 36, 87, 97, 8, - 16, + 36, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -2323,33 +2343,34 @@ pub mod summa { 1, 81, 81, - 129, - 16, + 96, + 0, + 20, + 21, + 91, + 128, 21, 97, - 10, - 181, + 8, + 97, 87, - 96, - 1, - 96, - 0, - 136, - 132, + 80, + 131, + 131, 129, 81, 129, 16, 97, 8, - 58, + 79, 87, 97, 8, - 58, + 79, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -2361,65 +2382,18 @@ pub mod summa { 1, 81, 96, - 64, + 96, 1, 81, - 131, - 129, 81, - 129, - 16, - 97, - 8, - 87, - 87, + 96, + 0, + 20, + 21, + 91, 97, 8, - 87, - 97, - 19, - 224, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 129, - 1, - 81, - 128, - 81, - 144, - 130, - 1, - 32, - 130, - 82, - 129, - 1, - 145, - 144, - 145, - 82, - 96, - 64, - 1, - 96, - 0, - 32, - 84, - 96, - 255, - 22, - 97, - 8, - 199, + 184, 87, 96, 64, @@ -2441,14 +2415,31 @@ pub mod summa { 1, 82, 96, - 30, + 34, 96, 36, 130, 1, 82, 127, - 65, + 73, + 110, + 118, + 97, + 108, + 105, + 100, + 32, + 112, + 114, + 111, + 111, + 102, + 32, + 111, + 102, + 32, + 97, 100, 100, 114, @@ -2463,267 +2454,280 @@ pub mod summa { 114, 115, 104, - 105, - 112, - 32, - 110, - 111, - 116, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 100, - 0, - 0, 96, 68, 130, 1, 82, - 96, - 100, - 1, 97, - 2, - 55, - 86, - 91, + 6, + 151, 96, - 0, + 244, + 27, 96, + 100, + 130, 1, + 82, 96, + 132, 1, + 97, + 1, + 217, + 86, + 91, + 80, + 80, + 128, + 128, + 97, + 8, + 197, + 144, + 97, + 16, + 131, + 86, + 91, + 145, + 80, + 80, + 97, + 6, + 105, + 86, + 91, + 80, + 127, + 56, + 35, + 21, + 212, + 213, + 106, 96, - 160, - 27, - 3, - 22, - 96, - 2, - 96, - 0, + 53, + 225, 137, + 155, + 255, + 231, + 125, + 155, + 236, + 239, + 175, + 95, + 38, + 80, + 228, + 50, + 59, + 39, 133, + 72, + 87, + 160, + 69, + 70, + 88, 129, + 96, + 64, 81, - 129, - 16, - 97, - 8, - 232, - 87, 97, 8, - 232, + 253, + 145, + 144, 97, - 19, - 224, + 18, + 143, 86, 91, 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 129, - 1, - 81, + 64, 81, - 130, - 82, - 129, - 1, + 128, 145, + 3, 144, - 145, - 82, - 96, - 64, - 1, + 161, + 80, + 86, + 91, 96, 0, - 32, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 3, 97, 9, - 115, - 87, + 18, + 97, + 10, + 35, + 86, + 91, 96, 64, 81, - 98, - 70, - 27, - 205, + 99, + 11, + 210, + 5, + 169, 96, - 229, + 228, 27, 129, 82, 96, - 32, - 96, - 4, - 130, 1, - 82, 96, - 48, - 96, - 36, - 130, 1, - 82, + 96, + 160, + 27, + 3, 127, - 66, - 97, - 108, - 97, - 110, - 99, - 101, - 32, - 114, - 101, - 116, - 114, - 105, - 101, - 118, - 101, - 114, - 32, - 110, - 111, - 116, - 32, - 115, - 101, - 116, - 32, - 102, - 111, - 114, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22, + 144, + 99, + 189, 32, - 116, - 104, - 96, - 68, - 130, - 1, - 82, - 111, - 26, - 92, - 200, - 29, - 30, - 92, - 25, - 72, - 27, - 217, - 136, - 24, - 92, - 220, - 217, - 93, - 96, - 130, - 27, + 90, + 144, + 144, + 97, + 9, 96, - 100, - 130, - 1, - 82, + 144, + 133, + 144, + 135, + 144, 96, - 132, + 4, 1, 97, - 2, - 55, + 19, + 75, 86, 91, 96, - 2, + 32, 96, - 0, - 136, - 132, - 129, + 64, 81, + 128, + 131, + 3, 129, - 16, + 134, + 90, + 250, + 21, + 128, + 21, 97, 9, - 137, + 125, 87, - 97, - 9, - 137, - 97, - 19, - 224, - 86, + 61, + 96, + 0, + 128, + 62, + 61, + 96, + 0, + 253, 91, + 80, + 80, + 80, + 80, 96, - 32, - 2, + 64, + 81, + 61, 96, - 32, + 31, + 25, + 96, + 31, + 130, 1, + 22, + 130, 1, - 81, + 128, 96, - 0, - 1, - 81, - 129, + 64, 82, - 96, - 32, - 1, - 144, + 80, 129, - 82, - 96, - 32, 1, - 96, - 0, - 32, - 96, - 0, 144, - 84, + 97, + 9, + 161, + 145, 144, 97, - 1, - 0, - 10, + 19, + 162, + 86, + 91, 144, - 4, + 80, + 91, + 146, + 145, + 80, + 80, + 86, + 91, + 97, + 9, + 178, + 97, + 10, + 35, + 86, + 91, 96, 1, 96, @@ -2732,1668 +2736,1554 @@ pub mod summa { 160, 27, 3, + 129, 22, + 97, + 10, + 23, + 87, 96, - 1, - 96, - 1, + 64, + 81, + 98, + 70, + 27, + 205, 96, - 160, + 229, 27, - 3, - 22, - 99, - 38, - 12, - 76, - 198, - 136, - 132, - 129, - 81, 129, - 16, - 97, - 9, - 215, - 87, - 97, - 9, - 215, - 97, - 19, - 224, - 86, - 91, + 82, 96, 32, - 2, 96, - 32, - 1, + 4, + 130, 1, - 81, + 82, 96, - 64, + 38, + 96, + 36, + 130, 1, - 81, - 131, - 129, - 81, - 129, - 16, - 97, - 9, - 244, - 87, + 82, + 127, + 79, + 119, + 110, 97, - 9, - 244, + 98, + 108, + 101, + 58, + 32, + 110, + 101, + 119, + 32, + 111, + 119, + 110, + 101, + 114, + 32, + 105, + 115, + 32, + 116, + 104, + 101, + 32, + 122, + 101, + 114, + 111, + 32, 97, - 19, - 224, - 86, - 91, 96, - 32, - 2, + 68, + 130, + 1, + 82, + 101, + 100, + 100, + 114, + 101, + 115, + 115, 96, - 32, + 208, + 27, + 96, + 100, + 130, 1, + 82, + 96, + 132, 1, - 81, - 137, - 133, - 129, - 81, - 129, - 16, 97, - 10, - 14, - 87, + 1, + 217, + 86, + 91, 97, 10, - 14, + 32, + 129, 97, - 19, - 224, + 10, + 125, + 86, + 91, + 80, 86, 91, 96, - 32, - 2, + 0, + 84, 96, - 32, 1, - 1, - 81, - 96, 96, 1, - 81, - 135, + 96, + 160, + 27, + 3, + 22, + 51, + 20, + 97, + 3, + 252, + 87, 96, 64, 81, - 132, - 99, - 255, - 255, - 255, - 255, - 22, + 98, + 70, + 27, + 205, 96, - 224, + 229, 27, 129, 82, 96, + 32, + 96, 4, + 130, 1, - 97, - 10, - 57, - 147, - 146, - 145, + 129, 144, - 97, - 21, - 76, - 86, - 91, + 82, 96, + 36, + 130, + 1, + 82, + 127, + 79, + 119, + 110, + 97, + 98, + 108, + 101, + 58, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 105, + 115, + 32, + 110, + 111, + 116, + 32, + 116, + 104, + 101, 32, + 111, + 119, + 110, + 101, + 114, 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, + 68, + 130, + 1, + 82, + 96, + 100, + 1, 97, - 10, + 1, + 217, 86, - 87, - 61, + 91, 96, 0, 128, - 62, - 61, + 84, 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, + 1, 96, - 64, - 81, - 61, + 1, 96, - 31, - 25, + 160, + 27, + 3, + 131, + 129, + 22, 96, - 31, - 130, 1, - 22, - 130, + 96, 1, - 128, 96, - 64, - 82, - 80, + 160, + 27, + 3, + 25, + 131, + 22, 129, - 1, - 144, - 97, - 10, - 122, + 23, + 132, + 85, + 96, + 64, + 81, 145, 144, - 97, - 19, - 199, - 86, - 91, - 131, + 146, + 22, + 146, 131, - 129, - 81, - 129, - 16, - 97, - 10, - 140, - 87, - 97, - 10, - 140, - 97, + 145, + 127, + 139, + 224, + 7, + 156, + 83, + 22, + 89, + 20, 19, + 68, + 205, + 31, + 208, + 164, + 242, + 132, + 25, + 73, + 127, + 151, + 34, + 163, + 218, + 175, + 227, + 180, + 24, + 111, + 107, + 100, + 87, 224, + 145, + 144, + 163, + 80, + 80, 86, 91, 96, - 32, - 2, + 0, 96, 32, - 1, - 1, - 129, - 129, - 81, - 97, - 10, - 160, - 145, - 144, - 97, - 21, 130, - 86, - 91, - 144, - 82, - 80, - 128, + 132, + 3, + 18, + 21, 97, 10, - 173, - 129, - 97, - 20, - 162, - 86, + 223, + 87, + 96, + 0, + 128, + 253, 91, - 145, 80, + 53, + 145, + 144, 80, - 97, - 7, - 254, 86, 91, - 80, - 129, - 129, - 129, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 65, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, + 96, + 64, 81, + 96, + 96, + 129, + 1, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, + 17, + 130, + 130, 16, + 23, + 21, 97, - 10, - 200, + 11, + 31, 87, 97, - 10, - 200, + 11, + 31, 97, - 19, - 224, + 10, + 230, 86, 91, 96, - 32, - 2, + 64, + 82, + 144, + 86, + 91, 96, - 32, - 1, - 1, + 64, 81, - 134, - 130, + 96, + 128, 129, - 81, + 1, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, + 17, + 130, + 130, 16, + 23, + 21, 97, - 10, - 226, + 11, + 31, 87, 97, - 10, - 226, + 11, + 31, 97, - 19, - 224, + 10, + 230, 86, 91, 96, - 32, - 2, + 64, + 81, 96, - 32, - 1, + 31, + 130, 1, - 81, 96, - 32, + 31, + 25, + 22, + 129, 1, - 81, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, 17, + 130, + 130, + 16, + 23, 21, 97, 11, - 84, + 113, 87, + 97, + 11, + 113, + 97, + 10, + 230, + 86, + 91, 96, 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, 82, + 145, + 144, + 80, + 86, + 91, 96, - 32, - 96, - 4, + 0, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 130, - 1, - 82, - 96, - 47, - 96, - 36, - 130, - 1, - 82, - 127, - 65, - 99, - 116, - 117, - 97, - 108, - 32, - 98, - 97, - 108, - 97, - 110, - 99, - 101, - 32, - 105, - 115, - 32, - 108, - 101, - 115, - 115, - 32, - 116, - 104, - 97, - 110, - 32, - 116, - 104, - 101, - 32, - 96, - 68, - 130, - 1, - 82, - 110, - 97, - 109, - 111, - 117, - 110, - 116, - 32, - 116, - 111, - 32, - 112, - 114, - 111, - 118, - 101, - 96, - 136, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 55, - 86, - 91, - 128, + 17, + 21, 97, 11, - 94, - 129, + 147, + 87, 97, - 20, - 162, - 86, - 91, - 145, - 80, - 80, + 11, + 147, 97, - 7, - 242, + 10, + 230, 86, 91, 80, 96, - 0, - 133, - 81, + 5, + 27, 96, + 32, 1, - 97, - 11, - 119, - 145, 144, - 97, - 21, - 130, 86, 91, 96, - 1, + 0, + 130, 96, + 31, + 131, 1, + 18, + 97, + 11, + 174, + 87, 96, - 64, - 27, - 3, + 0, + 128, + 253, + 91, + 129, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, 17, 21, 97, 11, - 142, + 200, 87, 97, 11, - 142, + 200, 97, - 14, - 195, + 10, + 230, 86, 91, + 97, + 11, + 219, 96, - 64, - 81, - 144, - 128, + 31, 130, - 82, - 128, + 1, + 96, + 31, + 25, + 22, 96, 32, - 2, + 1, + 97, + 11, + 72, + 86, + 91, + 129, + 129, + 82, + 132, 96, 32, + 131, + 134, 1, - 130, 1, - 96, - 64, - 82, - 128, + 17, 21, 97, 11, - 183, + 240, 87, + 96, + 0, + 128, + 253, + 91, 129, 96, 32, + 133, 1, 96, 32, - 130, - 2, - 128, - 54, 131, - 55, 1, - 144, - 80, - 91, - 80, - 144, - 80, - 132, - 129, + 55, 96, 0, + 145, 129, - 81, - 129, - 16, - 97, - 11, - 206, - 87, - 97, - 11, - 206, - 97, - 19, - 224, - 86, - 91, - 96, - 32, - 2, + 1, 96, 32, 1, - 1, - 129, - 129, + 145, + 144, + 145, 82, + 147, + 146, + 80, 80, 80, + 86, + 91, 96, 0, - 91, - 134, - 81, - 129, - 16, + 128, + 96, + 0, + 128, + 96, + 128, + 133, + 135, + 3, + 18, 21, 97, 12, - 63, + 35, 87, - 134, - 129, - 129, - 81, - 129, - 16, - 97, - 11, - 248, - 87, - 97, - 11, - 248, - 97, - 19, - 224, - 86, - 91, 96, - 32, - 2, + 0, + 128, + 253, + 91, + 132, + 53, + 147, + 80, 96, 32, + 133, 1, - 1, - 81, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, + 130, + 17, + 21, + 97, + 12, + 66, + 87, 96, - 32, + 0, + 128, + 253, + 91, + 129, + 135, 1, - 81, - 130, - 130, + 145, + 80, + 135, 96, + 31, + 131, 1, - 97, - 12, 18, - 145, - 144, 97, - 21, - 130, + 12, 86, + 87, + 96, + 0, + 128, + 253, 91, - 129, - 81, - 129, - 16, 97, 12, - 34, - 87, + 104, 97, 12, - 34, + 99, + 131, + 53, 97, - 19, - 224, + 11, + 121, + 86, + 91, + 97, + 11, + 72, 86, 91, + 130, + 53, + 128, + 130, + 82, 96, 32, - 144, - 129, - 2, - 145, - 144, + 128, + 131, + 1, + 146, 145, + 96, + 5, + 27, + 133, 1, 1, - 82, - 128, - 97, - 12, - 55, + 138, 129, + 17, + 21, 97, - 20, - 162, - 86, + 12, + 135, + 87, + 96, + 0, + 128, + 253, 91, - 145, - 80, - 80, - 97, - 11, - 221, - 86, + 96, + 32, + 133, + 1, 91, - 80, + 129, + 129, + 16, + 21, 97, - 12, - 74, + 13, + 41, + 87, 132, - 130, - 97, - 12, - 188, - 86, - 91, + 129, + 53, + 17, + 21, 97, 12, - 137, + 162, 87, 96, - 64, - 81, - 98, - 70, - 27, - 205, + 0, + 128, + 253, + 91, + 128, + 53, + 134, + 1, 96, - 229, - 27, - 129, - 82, 96, - 32, + 129, + 142, + 3, 96, - 4, - 130, + 31, + 25, 1, - 82, + 18, + 21, + 97, + 12, + 186, + 87, 96, - 16, + 0, + 128, + 253, + 91, + 97, + 12, + 194, + 97, + 10, + 252, + 86, + 91, 96, - 36, + 32, 130, 1, - 82, - 111, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 61, 53, - 144, - 56, - 57, - 55, - 183, - 179, - 96, + 135, 129, - 27, + 17, + 21, + 97, + 12, + 212, + 87, 96, - 68, - 130, - 1, - 82, + 0, + 128, + 253, + 91, + 97, + 12, + 227, + 143, 96, - 100, + 32, + 131, + 134, + 1, 1, 97, - 2, - 55, + 11, + 157, 86, 91, + 130, + 82, + 80, 96, 64, - 81, - 133, - 144, - 127, - 8, - 54, - 124, - 158, - 125, - 230, - 171, - 164, - 18, - 51, - 76, - 126, - 138, - 2, - 190, - 76, + 130, + 1, + 53, + 135, + 129, + 17, + 21, + 97, + 12, + 248, 87, - 166, - 63, - 38, - 137, - 69, - 73, - 124, - 157, - 105, - 55, - 114, - 199, - 243, - 150, - 147, - 144, 96, 0, - 144, - 162, - 80, - 80, - 80, - 80, - 80, - 80, - 86, + 128, + 253, 91, + 97, + 13, + 7, + 143, 96, - 64, - 81, - 99, + 32, + 131, + 134, + 1, + 1, + 97, 11, - 210, - 5, - 169, + 157, + 86, + 91, 96, - 228, - 27, + 32, + 131, 129, + 1, + 145, + 144, + 145, 82, 96, - 0, - 144, 96, + 147, + 144, + 147, 1, + 53, 96, + 64, + 131, 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 189, - 32, - 90, - 144, - 144, - 97, - 13, - 13, - 144, + 82, + 80, 133, - 144, - 135, - 144, - 96, - 4, + 82, + 147, + 132, + 1, + 147, 1, 97, - 21, - 149, + 12, + 140, 86, 91, - 96, - 32, + 80, + 144, + 150, + 80, + 80, + 80, 96, 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, + 135, + 1, + 53, + 145, + 80, 128, + 130, + 17, 21, 97, 13, - 42, + 67, 87, - 61, 96, 0, 128, - 62, - 61, - 96, - 0, 253, 91, 80, + 97, + 13, + 80, + 135, + 130, + 136, + 1, + 97, + 11, + 157, + 86, + 91, + 148, + 151, + 147, + 150, + 80, + 147, + 148, + 96, + 96, + 1, + 53, + 147, 80, 80, 80, + 86, + 91, 96, - 64, + 0, + 129, 81, - 61, + 128, + 132, + 82, 96, - 31, - 25, + 0, + 91, + 129, + 129, + 16, + 21, + 97, + 13, + 135, + 87, 96, - 31, - 130, + 32, + 129, + 133, + 1, + 129, + 1, + 81, + 134, + 131, 1, - 22, 130, 1, - 128, - 96, - 64, 82, - 80, - 129, 1, - 144, 97, 13, - 78, - 145, - 144, - 97, - 20, - 106, + 107, 86, 91, - 144, 80, - 91, - 146, - 145, + 96, + 0, + 96, + 32, + 130, + 134, + 1, + 1, + 82, + 96, + 32, + 96, + 31, + 25, + 96, + 31, + 131, + 1, + 22, + 133, + 1, + 1, + 145, + 80, + 80, + 146, + 145, 80, 80, 86, 91, + 96, + 128, + 129, + 82, + 96, + 0, 97, 13, - 95, + 186, + 96, + 128, + 131, + 1, + 135, 97, 13, - 208, + 97, 86, 91, + 130, + 129, + 3, 96, + 32, + 132, 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, + 82, 97, 13, - 196, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, + 204, 129, - 82, - 96, - 32, - 96, - 4, + 135, + 97, + 13, + 97, + 86, + 91, + 144, + 80, 130, - 1, - 82, - 96, - 38, + 129, + 3, 96, - 36, - 130, + 64, + 132, 1, 82, - 127, - 79, - 119, - 110, 97, - 98, - 108, - 101, - 58, - 32, - 110, - 101, - 119, - 32, - 111, - 119, - 110, - 101, - 114, - 32, - 105, - 115, - 32, - 116, - 104, - 101, - 32, - 122, - 101, - 114, - 111, - 32, + 13, + 224, + 129, + 134, 97, - 96, - 68, + 13, + 97, + 86, + 91, + 144, + 80, 130, - 1, - 82, - 101, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 208, - 27, + 129, + 3, 96, - 100, - 130, - 1, - 82, 96, 132, 1, - 97, - 2, - 55, - 86, - 91, + 82, 97, 13, - 205, + 244, 129, + 133, + 97, + 13, 97, - 14, - 42, 86, 91, + 151, + 150, + 80, + 80, + 80, + 80, + 80, + 80, 80, 86, 91, 96, 0, - 84, - 96, - 1, 96, - 1, - 96, - 160, - 27, + 32, + 128, + 131, + 133, 3, - 22, - 51, - 20, + 18, + 21, 97, - 4, - 215, + 14, + 18, 87, 96, - 64, - 81, - 98, - 70, - 27, - 205, + 0, + 128, + 253, + 91, + 130, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, + 130, + 17, + 21, + 97, + 14, + 42, + 87, 96, - 229, - 27, + 0, + 128, + 253, + 91, 129, - 82, - 96, - 32, - 96, - 4, - 130, + 133, 1, - 129, - 144, - 82, + 145, + 80, + 133, 96, - 36, - 130, + 31, + 131, 1, - 82, - 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, - 32, - 99, + 18, 97, - 108, - 108, - 101, - 114, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 116, - 104, - 101, - 32, - 111, - 119, - 110, - 101, - 114, + 14, + 62, + 87, 96, - 68, + 0, + 128, + 253, + 91, + 129, + 53, + 97, + 14, + 76, + 97, + 12, + 99, 130, - 1, - 82, - 96, - 100, - 1, 97, - 2, - 55, + 11, + 121, 86, 91, + 129, + 129, + 82, 96, - 0, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, + 5, + 145, + 144, + 145, 27, - 3, 131, - 129, - 22, - 96, 1, - 96, + 132, 1, - 96, - 160, - 27, - 3, - 25, - 131, - 22, - 129, - 23, + 144, 132, - 85, - 96, - 64, - 81, - 145, + 129, + 1, 144, - 146, - 22, - 146, + 136, 131, - 145, - 127, - 139, - 224, - 7, - 156, - 83, - 22, - 89, - 20, - 19, - 68, - 205, - 31, - 208, - 164, - 242, - 132, - 25, - 73, - 127, - 151, - 34, - 163, - 218, - 175, - 227, - 180, - 24, - 111, + 17, + 21, + 97, + 14, 107, - 100, 87, - 224, - 145, - 144, - 163, - 80, - 80, - 86, + 96, + 0, + 128, + 253, + 91, + 133, + 133, + 1, 91, + 131, + 129, + 16, + 21, + 97, + 15, + 76, + 87, + 128, + 53, + 133, + 129, + 17, + 21, + 97, + 14, + 134, + 87, 96, 0, + 128, + 253, + 91, + 134, + 1, 96, - 32, - 130, - 132, + 128, + 129, + 140, 3, + 96, + 31, + 25, + 1, 18, 21, 97, 14, - 140, + 157, 87, 96, 0, 128, + 129, 253, 91, - 80, - 53, - 145, - 144, - 80, + 97, + 14, + 165, + 97, + 11, + 37, 86, 91, - 96, - 0, - 96, - 32, + 136, 130, - 132, - 3, - 18, + 1, + 53, + 135, + 129, + 17, 21, 97, 14, - 165, + 183, 87, 96, 0, 128, + 129, 253, 91, - 129, - 53, - 96, + 97, + 14, + 197, + 141, + 139, + 131, + 134, 1, - 96, 1, + 97, + 11, + 157, + 86, + 91, + 130, + 82, + 80, 96, - 160, - 27, - 3, - 129, - 22, + 64, + 128, + 131, + 1, + 53, + 136, 129, - 20, + 17, + 21, 97, 14, - 188, + 220, 87, 96, 0, 128, + 129, 253, 91, - 147, - 146, - 80, - 80, - 80, + 97, + 14, + 234, + 142, + 140, + 131, + 135, + 1, + 1, + 97, + 11, + 157, 86, 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 96, - 129, + 139, + 132, 1, + 82, + 80, 96, - 1, 96, + 128, + 132, 1, - 96, - 64, - 27, - 3, + 53, + 137, 129, 17, - 130, - 130, - 16, - 23, 21, 97, - 14, - 251, + 15, + 3, 87, - 97, - 14, - 251, - 97, - 14, - 195, - 86, - 91, - 96, - 64, - 82, - 144, - 86, - 91, - 96, - 64, - 81, 96, + 0, 128, 129, + 253, + 91, + 97, + 15, + 17, + 143, + 141, + 131, + 136, 1, - 96, - 1, - 96, 1, - 96, - 64, - 27, - 3, - 129, - 17, - 130, - 130, - 16, - 23, - 21, 97, - 14, - 251, - 87, - 97, - 14, - 251, - 97, - 14, - 195, + 11, + 157, 86, 91, - 96, - 64, - 81, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 129, - 1, - 96, + 131, + 133, 1, + 82, + 80, 96, + 128, + 132, 1, - 96, - 64, - 27, - 3, - 129, - 17, - 130, + 53, + 145, + 80, + 136, 130, - 16, - 23, + 17, 21, 97, 15, - 75, + 43, 87, + 96, + 0, + 128, + 129, + 253, + 91, 97, 15, - 75, + 57, + 142, + 140, + 132, + 135, + 1, + 1, 97, - 14, - 195, + 11, + 157, 86, 91, - 96, - 64, - 82, - 145, 144, + 131, + 1, + 82, 80, - 86, - 91, - 96, - 0, - 96, + 132, + 82, + 80, + 145, + 134, 1, - 96, + 145, + 134, 1, - 96, - 64, - 27, - 3, - 130, - 17, - 21, - 97, - 15, - 108, - 87, - 97, - 15, - 108, 97, 14, - 195, + 111, 86, 91, 80, - 96, - 5, - 27, - 96, - 32, - 1, - 144, + 152, + 151, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, 86, 91, 96, 0, - 130, + 128, 96, - 31, + 64, 131, - 1, + 133, + 3, 18, + 21, 97, 15, - 135, + 108, 87, 96, 0, 128, 253, 91, - 129, + 130, 53, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 129, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, + 130, 17, 21, 97, 15, - 160, + 132, 87, + 96, + 0, + 128, + 253, + 91, 97, 15, - 160, + 144, + 134, + 131, + 135, + 1, 97, - 14, - 195, + 11, + 157, 86, 91, - 97, - 15, - 179, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, + 147, + 80, 96, 32, + 145, + 80, + 129, + 133, 1, - 97, - 15, - 35, - 86, - 91, + 53, 129, 129, - 82, - 132, - 96, - 32, - 131, - 134, - 1, - 1, 17, 21, 97, 15, - 200, + 167, 87, 96, 0, 128, 253, 91, - 129, - 96, - 32, 133, 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 145, - 129, - 1, - 96, - 32, - 1, - 145, 144, - 145, - 82, - 147, - 146, 80, - 80, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 128, - 131, - 133, - 3, - 18, - 21, - 97, - 15, - 248, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 96, - 1, 96, + 31, + 129, 1, - 96, - 64, - 27, - 3, - 128, - 130, - 17, - 21, + 134, + 19, 97, - 16, 15, + 186, 87, 96, 0, 128, 253, 91, - 129, - 133, - 1, - 145, - 80, - 133, - 96, - 31, - 131, - 1, - 18, - 97, - 16, - 35, - 87, - 96, - 0, 128, - 253, - 91, - 129, 53, 97, - 16, - 54, + 15, + 200, 97, - 16, - 49, + 12, + 99, 130, 97, - 15, - 83, - 86, - 91, - 97, - 15, - 35, + 11, + 121, 86, 91, 129, @@ -4405,12 +4295,12 @@ pub mod summa { 144, 145, 27, - 131, + 130, 1, - 132, + 131, 1, 144, - 132, + 131, 129, 1, 144, @@ -4419,1052 +4309,962 @@ pub mod summa { 17, 21, 97, - 16, - 85, + 15, + 231, 87, 96, 0, 128, 253, 91, - 133, - 133, + 146, + 132, 1, + 146, 91, - 131, - 129, + 130, + 132, 16, 21, 97, 16, - 242, + 5, 87, - 128, + 131, 53, - 133, - 129, - 17, - 21, + 130, + 82, + 146, + 132, + 1, + 146, + 144, + 132, + 1, + 144, 97, - 16, - 113, - 87, - 96, - 0, + 15, + 236, + 86, + 91, 128, - 129, - 253, + 149, + 80, + 80, + 80, + 80, + 80, + 80, + 146, + 80, + 146, + 144, + 80, + 86, 91, - 134, - 1, 96, + 0, 96, - 129, - 140, + 32, + 130, + 132, 3, - 96, - 31, - 25, - 1, - 129, - 19, + 18, 21, 97, 16, - 137, + 38, 87, 96, 0, 128, - 129, 253, 91, - 97, - 16, - 145, - 97, - 14, - 217, - 86, - 91, - 137, - 131, - 1, - 53, 129, - 82, + 53, 96, - 64, - 128, - 132, 1, - 53, - 137, + 96, + 1, + 96, + 160, + 27, + 3, 129, - 17, - 21, + 22, + 129, + 20, 97, 16, - 171, + 61, 87, 96, 0, 128, - 129, 253, 91, - 97, - 16, - 185, - 143, - 141, - 131, - 136, - 1, - 1, - 97, - 15, - 118, + 147, + 146, + 80, + 80, + 80, 86, 91, - 131, - 141, - 1, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, 82, - 80, - 145, - 131, - 1, - 53, - 145, - 136, - 131, + 96, 17, - 21, - 97, - 16, - 209, - 87, + 96, + 4, + 82, + 96, + 36, 96, 0, - 128, - 129, 253, 91, - 97, - 16, - 223, - 142, - 140, - 133, - 135, - 1, - 1, - 97, - 15, - 118, - 86, - 91, - 144, + 128, 130, 1, - 82, - 133, - 82, - 80, - 80, - 145, - 134, - 1, - 145, - 134, - 1, + 128, + 130, + 17, + 21, + 97, + 9, + 164, + 87, + 97, + 9, + 164, 97, 16, - 89, - 86, - 91, - 80, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, + 68, 86, 91, + 99, + 78, + 72, + 123, + 113, 96, - 0, - 128, - 96, - 0, - 128, - 96, - 128, - 133, - 135, - 3, - 18, - 21, - 97, - 17, - 21, - 87, + 224, + 27, 96, 0, - 128, - 253, - 91, + 82, 96, - 1, + 50, 96, - 1, + 4, + 82, 96, - 64, - 27, - 3, - 133, - 53, - 17, - 21, - 97, - 17, - 42, - 87, + 36, 96, 0, - 128, 253, 91, - 133, 96, - 31, - 134, - 53, - 135, + 0, + 96, 1, + 130, 1, - 18, 97, - 17, - 60, + 16, + 149, 87, - 96, - 0, - 128, - 253, - 91, - 97, - 17, - 76, 97, 16, - 49, - 134, - 53, - 135, - 1, - 53, + 149, 97, - 15, - 83, + 16, + 68, 86, 91, - 133, - 53, - 134, + 80, + 96, 1, - 128, - 53, + 1, + 144, + 86, + 91, + 96, + 0, + 96, + 64, 128, 131, + 1, + 133, + 132, 82, 96, 32, + 130, + 129, + 134, + 1, + 82, + 129, + 134, + 81, 128, 132, - 1, + 82, + 96, + 96, 147, - 146, + 80, + 131, + 135, + 1, + 145, + 80, + 131, + 129, 96, 5, - 146, - 144, - 146, 27, - 144, - 145, + 136, 1, 1, - 136, + 131, + 137, + 1, + 96, + 0, + 91, + 131, + 129, 16, 21, 97, 17, - 114, + 35, 87, + 137, + 131, + 3, 96, - 0, + 95, + 25, + 1, + 133, + 82, + 129, + 81, 128, - 253, - 91, - 96, - 32, - 135, - 53, + 81, 136, + 133, + 82, + 97, + 16, + 238, + 137, + 134, 1, - 1, + 130, + 97, + 13, + 97, + 86, 91, + 144, + 80, 135, - 53, - 136, + 130, 1, - 128, - 53, - 96, - 5, - 27, - 1, - 96, - 32, + 81, + 133, + 130, + 3, + 137, + 135, 1, - 129, - 16, - 21, + 82, 97, - 18, - 202, - 87, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 129, - 53, 17, - 21, + 5, + 130, + 130, 97, - 17, - 163, - 87, - 96, - 0, - 128, - 253, + 13, + 97, + 86, 91, - 135, - 53, - 136, - 1, - 129, - 53, + 146, + 139, 1, - 96, - 128, - 129, + 81, + 149, 139, - 3, + 1, + 149, + 144, + 149, + 82, + 80, + 148, + 134, + 1, + 148, + 146, + 80, + 144, + 133, + 1, + 144, 96, - 31, - 25, 1, - 18, - 21, + 1, 97, - 17, - 190, - 87, - 96, - 0, - 128, - 253, + 16, + 202, + 86, 91, - 97, - 17, - 198, - 97, - 15, - 1, + 80, + 144, + 154, + 153, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, 86, 91, 96, - 32, - 130, 1, - 53, 129, - 82, + 129, + 28, + 144, + 130, + 22, + 128, + 97, + 17, + 71, + 87, 96, - 64, + 127, 130, - 1, - 53, + 22, + 145, + 80, + 91, 96, 32, 130, - 1, - 82, - 96, - 1, - 96, - 1, - 96, - 64, - 27, + 16, + 129, 3, - 96, - 96, - 131, - 1, - 53, - 17, - 21, 97, 17, - 239, + 103, 87, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, 96, 0, - 128, - 253, - 91, + 82, 96, + 34, 96, - 130, - 1, - 53, - 130, - 1, - 139, + 4, + 82, 96, - 63, - 130, - 1, - 18, - 97, - 18, - 5, - 87, + 36, 96, 0, - 128, 253, 91, + 80, + 145, + 144, + 80, + 86, + 91, + 96, + 32, + 129, + 82, + 96, + 0, 97, - 18, - 21, - 97, - 16, - 49, + 9, + 161, 96, 32, 131, 1, - 53, + 132, + 97, + 13, 97, - 15, - 83, 86, 91, 96, - 32, + 31, 130, + 17, + 21, + 97, + 17, + 202, + 87, + 96, + 0, + 129, 129, - 1, - 53, - 128, - 131, 82, - 144, - 130, + 96, + 32, + 129, + 32, + 96, + 31, + 133, 1, - 145, - 144, 96, 5, - 27, - 131, + 28, + 129, 1, 96, - 64, - 1, - 142, + 32, + 134, 16, 21, 97, - 18, - 55, + 17, + 167, 87, - 96, - 0, + 80, 128, - 253, - 91, - 96, - 64, - 131, - 1, 91, 96, - 64, - 96, - 32, + 31, 133, 1, - 53, 96, 5, - 27, - 133, - 1, + 28, + 130, 1, + 145, + 80, + 91, + 129, 129, 16, 21, 97, - 18, - 131, + 17, + 198, 87, + 130, + 129, + 85, 96, 1, - 96, 1, - 96, - 64, - 27, - 3, + 97, + 17, + 179, + 86, + 91, + 80, + 80, + 80, + 91, + 80, + 80, + 80, + 86, + 91, + 129, + 81, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, - 53, 17, 21, 97, - 18, - 101, + 17, + 233, 87, - 96, - 0, - 128, - 253, - 91, 97, - 18, - 117, - 143, - 96, - 64, - 131, - 53, - 135, - 1, - 1, + 17, + 233, 97, - 15, - 118, + 10, + 230, 86, 91, - 131, - 82, - 96, - 32, - 146, - 131, - 1, - 146, - 1, 97, - 18, - 60, + 17, + 253, + 129, + 97, + 17, + 247, + 132, + 84, + 97, + 17, + 51, 86, 91, - 80, - 96, - 64, 132, - 1, - 82, - 80, - 80, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, + 97, + 17, + 128, + 86, + 91, 96, + 32, 128, + 96, + 31, 131, - 1, - 53, 17, - 21, + 96, + 1, + 129, + 20, 97, 18, - 163, + 50, 87, 96, 0, - 128, - 253, - 91, + 132, + 21, 97, 18, - 182, - 139, - 96, - 32, - 96, - 128, - 133, - 1, - 53, + 26, + 87, + 80, 133, + 131, 1, - 1, - 97, - 15, - 118, - 86, + 81, 91, 96, + 0, + 25, 96, - 130, - 1, - 82, - 132, - 82, - 80, + 3, + 134, + 144, + 27, + 28, + 25, + 22, 96, - 32, - 146, - 131, - 1, - 146, 1, + 133, + 144, + 27, + 23, + 133, + 85, 97, 17, - 122, + 198, 86, 91, - 80, - 148, - 80, - 80, 96, - 32, + 0, 133, - 1, - 53, - 146, - 80, - 96, - 1, - 96, - 1, + 129, + 82, 96, - 64, - 27, - 3, + 32, + 129, + 32, 96, - 64, + 31, + 25, 134, - 1, - 53, - 17, + 22, + 145, + 91, + 130, + 129, + 16, 21, 97, 18, - 237, - 87, - 96, - 0, - 128, - 253, - 91, 97, - 18, - 253, + 87, + 136, 134, + 1, + 81, + 130, + 85, + 148, + 132, + 1, + 148, 96, - 64, - 135, 1, - 53, - 135, + 144, + 145, + 1, + 144, + 132, 1, 97, - 15, - 118, + 18, + 66, 86, 91, - 147, - 150, - 146, - 149, - 80, - 146, - 147, - 96, - 96, - 1, - 53, - 146, 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 64, - 131, 133, - 3, - 18, + 130, + 16, 21, 97, - 19, - 32, + 18, + 127, 87, + 135, + 133, + 1, + 81, 96, 0, - 128, - 253, - 91, - 130, - 53, + 25, 96, - 1, + 3, + 136, + 144, + 27, 96, - 1, + 248, + 22, + 28, + 25, + 22, + 129, + 85, + 91, + 80, + 80, + 80, + 80, + 80, 96, - 64, + 1, + 144, + 129, 27, - 3, - 128, - 130, - 17, - 21, - 97, - 19, - 55, - 87, + 1, + 144, + 85, + 80, + 86, + 91, 96, 0, + 96, + 32, 128, - 253, - 91, - 97, - 19, - 67, - 134, 131, - 135, 1, - 97, - 15, - 118, - 86, - 91, - 147, - 80, + 129, + 132, + 82, + 128, + 133, + 81, + 128, + 131, + 82, 96, - 32, + 64, + 146, + 80, + 130, + 134, + 1, 145, 80, + 130, 129, - 133, + 96, + 5, + 27, + 135, 1, - 53, - 129, + 1, + 132, + 136, + 1, + 96, + 0, + 91, + 131, 129, - 17, + 16, 21, 97, 19, - 90, + 61, 87, 96, - 0, - 128, - 253, - 91, - 133, + 63, + 25, + 137, + 132, + 3, 1, - 144, - 80, - 96, - 31, + 133, + 82, 129, - 1, - 134, - 19, - 97, - 19, - 109, - 87, + 81, 96, - 0, - 128, - 253, - 91, 128, - 53, - 97, - 19, - 123, + 129, + 81, + 129, + 134, + 82, 97, - 16, - 49, + 18, + 220, + 130, + 135, + 1, 130, 97, - 15, - 83, + 13, + 97, 86, 91, - 129, - 129, - 82, - 96, - 5, - 145, - 144, 145, - 27, + 80, + 80, + 136, 130, 1, - 131, - 1, - 144, - 131, - 129, + 81, + 133, + 130, + 3, + 138, + 135, 1, - 144, - 136, - 131, - 17, - 21, + 82, 97, - 19, - 154, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 132, - 1, - 146, - 91, + 18, + 244, + 130, 130, - 132, - 16, - 21, 97, - 19, - 184, - 87, - 131, - 53, + 13, + 97, + 86, + 91, + 145, + 80, + 80, + 135, 130, - 82, - 146, - 132, 1, - 146, - 144, - 132, + 81, + 133, + 130, + 3, + 137, + 135, 1, - 144, + 82, 97, 19, - 159, + 12, + 130, + 130, + 97, + 13, + 97, 86, 91, - 128, - 149, - 80, - 80, - 80, - 80, + 145, 80, 80, + 96, + 96, + 128, + 131, + 1, + 81, 146, 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 96, - 32, + 133, 130, - 132, 3, - 18, - 21, + 129, + 135, + 1, + 82, + 80, 97, 19, - 217, - 87, + 41, + 129, + 131, + 97, + 13, + 97, + 86, + 91, + 150, + 137, + 1, + 150, + 148, + 80, + 80, + 80, + 144, + 134, + 1, + 144, 96, - 0, - 128, - 253, + 1, + 1, + 97, + 18, + 182, + 86, 91, 80, - 81, - 145, 144, + 152, + 151, + 80, + 80, + 80, + 80, + 80, + 80, + 80, 80, 86, 91, - 99, - 78, - 72, - 123, - 113, 96, - 224, - 27, - 96, - 0, + 64, + 128, + 130, 82, - 96, - 50, - 96, - 4, + 131, + 81, + 144, + 130, + 1, + 129, + 144, 82, 96, - 36, - 96, 0, - 253, - 91, + 144, 96, - 0, - 129, - 81, - 128, - 132, - 82, + 32, + 144, 96, - 0, + 96, + 132, + 1, + 144, + 130, + 135, + 1, + 132, 91, - 129, + 130, 129, 16, 21, 97, - 20, - 28, + 19, + 132, 87, - 96, - 32, 129, - 133, - 1, - 129, - 1, 81, - 134, - 131, - 1, - 130, - 1, + 132, 82, + 146, + 132, 1, - 97, - 20, - 0, - 86, - 91, - 80, - 96, - 0, - 96, - 32, - 130, - 134, - 1, + 146, + 144, + 132, 1, - 82, - 96, - 32, - 96, - 31, - 25, + 144, 96, - 31, - 131, - 1, - 22, - 133, 1, 1, - 145, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 64, - 129, - 82, - 96, - 0, - 97, - 20, - 79, - 96, - 64, - 131, - 1, - 133, 97, 19, - 246, + 104, 86, 91, - 130, + 80, + 80, + 80, + 131, 129, 3, - 96, - 32, - 132, + 130, + 133, 1, 82, 97, - 20, - 97, + 19, + 152, 129, - 133, + 134, + 97, + 13, 97, - 19, - 246, 86, 91, + 150, 149, - 148, + 80, 80, 80, 80, @@ -5482,8 +5282,8 @@ pub mod summa { 18, 21, 97, - 20, - 124, + 19, + 180, 87, 96, 0, @@ -5498,2071 +5298,302 @@ pub mod summa { 129, 20, 97, - 14, - 188, + 16, + 61, 87, 96, 0, 128, 253, - 91, - 99, - 78, + 254, + 162, + 100, + 105, + 112, + 102, + 115, + 88, + 34, + 18, + 32, + 204, + 157, + 250, + 143, + 60, + 243, + 174, + 85, + 107, + 174, + 161, + 154, + 177, + 138, + 220, + 133, + 28, + 98, + 126, + 194, + 28, + 191, + 145, + 222, 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, + 165, + 158, + 240, + 181, 17, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 96, - 1, - 130, - 1, - 97, - 20, - 180, - 87, - 97, - 20, - 180, - 97, - 20, - 140, - 86, - 91, - 80, - 96, - 1, - 1, - 144, - 86, - 91, - 96, - 0, - 96, - 32, - 128, - 131, - 1, - 129, - 132, - 82, - 128, - 133, - 81, - 128, - 131, - 82, - 96, - 64, - 146, - 80, - 130, - 134, - 1, - 145, - 80, - 130, - 129, - 96, - 5, - 27, - 135, - 1, - 1, - 132, - 136, - 1, - 96, - 0, - 91, - 131, - 129, - 16, - 21, - 97, - 21, - 62, - 87, - 96, - 63, - 25, - 137, - 132, - 3, - 1, - 133, - 82, - 129, - 81, - 96, - 96, - 129, - 81, - 133, - 82, - 136, - 130, - 1, - 81, - 129, - 138, - 135, - 1, - 82, - 97, - 21, - 16, - 130, - 135, - 1, - 130, - 97, - 19, - 246, - 86, - 91, - 145, - 80, - 80, - 135, - 130, - 1, - 81, - 145, - 80, - 132, - 129, - 3, - 136, - 134, - 1, - 82, - 97, - 21, - 42, - 129, - 131, - 97, - 19, - 246, - 86, - 91, - 150, - 137, - 1, - 150, - 148, - 80, - 80, - 80, - 144, - 134, - 1, - 144, - 96, - 1, - 1, - 97, - 20, - 226, - 86, - 91, - 80, - 144, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 96, - 129, - 82, - 96, - 0, - 97, - 21, - 95, - 96, - 96, - 131, - 1, - 134, - 97, - 19, - 246, - 86, - 91, - 130, - 129, - 3, - 96, - 32, - 132, - 1, - 82, - 97, - 21, - 113, - 129, - 134, - 97, - 19, - 246, - 86, - 91, - 145, - 80, - 80, - 130, - 96, - 64, - 131, - 1, - 82, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 128, - 130, - 1, - 128, - 130, - 17, - 21, - 97, - 13, - 81, - 87, - 97, - 13, - 81, - 97, - 20, - 140, - 86, - 91, - 96, - 64, - 128, - 130, - 82, - 131, - 81, - 144, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 96, - 32, - 144, - 96, - 96, - 132, - 1, - 144, - 130, - 135, - 1, - 132, - 91, - 130, - 129, - 16, - 21, - 97, - 21, - 206, - 87, - 129, - 81, - 132, - 82, - 146, - 132, - 1, - 146, - 144, - 132, - 1, - 144, - 96, - 1, - 1, - 97, - 21, - 178, - 86, - 91, - 80, - 80, - 80, - 131, - 129, - 3, - 130, - 133, - 1, - 82, - 97, - 21, - 226, - 129, - 134, - 97, - 19, - 246, - 86, - 91, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 171, - 123, - 37, - 27, - 15, - 248, - 123, - 164, - 69, - 174, - 54, - 211, - 122, - 225, - 6, - 240, - 242, - 163, - 10, - 31, - 234, - 57, - 46, - 251, - 2, - 116, - 186, - 43, - 253, - 164, - 101, - 1, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static SUMMA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 169, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 141, - 165, - 203, - 91, - 17, - 97, - 0, - 113, - 87, - 128, - 99, - 141, - 165, - 203, - 91, - 20, - 97, - 1, - 87, - 87, - 128, - 99, - 143, - 19, - 226, - 82, - 20, - 97, - 1, - 104, - 87, - 128, - 99, - 152, - 159, - 141, - 231, - 20, - 97, - 1, - 123, - 87, - 128, - 99, - 226, - 23, - 88, - 7, - 20, - 97, - 1, - 164, - 87, - 128, - 99, - 230, - 145, - 173, - 51, - 20, - 97, - 1, - 183, - 87, - 128, - 99, - 242, - 253, - 227, - 139, - 20, - 97, - 1, - 202, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 99, - 29, - 106, - 67, - 38, - 20, - 97, - 0, - 174, - 87, - 128, - 99, - 51, - 67, - 157, - 101, - 20, - 97, - 0, - 244, - 87, - 128, - 99, - 53, - 181, - 148, - 49, - 20, - 97, - 1, - 39, - 87, - 128, - 99, - 92, - 192, - 75, - 173, - 20, - 97, - 1, - 60, - 87, - 128, - 99, - 113, - 80, - 24, - 166, - 20, - 97, - 1, - 79, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 215, - 97, - 0, - 188, - 54, - 96, - 4, - 97, - 14, - 122, - 86, - 91, - 96, - 3, - 96, - 32, - 82, - 96, - 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 129, - 86, - 91, - 96, - 64, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 144, - 145, - 22, - 129, - 82, - 96, - 32, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 97, - 1, - 23, - 97, - 1, - 2, - 54, - 96, - 4, - 97, - 14, - 122, - 86, - 91, - 96, - 1, - 96, - 32, - 82, - 96, - 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 84, - 96, - 255, - 22, - 129, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 235, - 86, - 91, - 97, - 1, - 58, - 97, - 1, - 53, - 54, - 96, - 4, - 97, - 14, - 147, - 86, - 91, - 97, - 1, - 221, - 86, - 91, - 0, - 91, - 97, - 1, - 58, - 97, - 1, - 74, - 54, - 96, - 4, - 97, - 14, - 147, - 86, - 91, - 97, - 3, - 89, - 86, - 91, - 97, - 1, - 58, - 97, - 4, - 197, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 97, - 0, - 215, - 86, - 91, - 97, - 1, - 58, - 97, - 1, - 118, - 54, - 96, - 4, - 97, - 15, - 229, - 86, - 91, - 97, - 4, - 217, - 86, - 91, - 97, - 0, - 215, - 97, - 1, - 137, - 54, - 96, - 4, - 97, - 14, - 122, - 86, - 91, - 96, - 2, - 96, - 32, - 82, - 96, - 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 129, - 86, - 91, - 97, - 1, - 58, - 97, - 1, - 178, - 54, - 96, - 4, - 97, - 16, - 255, - 86, - 91, - 97, - 7, - 168, - 86, - 91, - 97, - 1, - 23, - 97, - 1, - 197, - 54, - 96, - 4, - 97, - 19, - 13, - 86, - 91, - 97, - 12, - 188, - 86, - 91, - 97, - 1, - 58, - 97, - 1, - 216, - 54, - 96, - 4, - 97, - 14, - 147, - 86, - 91, - 97, - 13, - 87, - 86, - 91, - 97, - 1, - 229, - 97, - 13, - 208, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 97, - 2, - 64, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 114, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 253, - 91, - 96, - 0, - 129, - 144, - 80, - 96, - 0, - 129, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 99, - 249, - 242, - 7, - 239, - 96, - 64, - 81, - 129, - 99, - 255, - 255, - 255, - 255, - 22, - 96, - 224, - 27, - 129, - 82, - 96, - 4, - 1, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 2, - 133, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 2, - 169, - 145, - 144, - 97, - 19, - 199, - 86, - 91, - 144, - 80, - 128, - 97, - 2, - 239, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 20, - 96, - 36, - 130, - 1, - 82, - 115, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 116, - 121, - 112, - 101, - 96, - 96, - 27, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 55, - 86, - 91, - 96, - 0, - 129, - 129, - 82, - 96, - 3, - 96, - 32, - 144, - 129, - 82, - 96, - 64, - 145, - 130, - 144, - 32, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 22, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 134, - 129, - 22, - 145, - 144, - 145, - 23, - 144, - 145, - 85, - 145, - 81, - 145, - 133, - 22, - 130, - 82, - 130, - 145, - 127, - 90, - 167, - 212, - 30, - 241, - 155, - 248, - 18, - 24, - 62, - 251, - 12, - 76, - 175, - 66, - 127, - 122, - 36, - 192, - 183, - 6, - 88, - 129, - 115, - 127, - 75, - 135, - 101, - 250, - 143, - 213, - 11, - 145, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 162, - 80, - 80, - 80, - 86, - 91, - 97, - 3, - 97, - 97, - 13, - 208, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 97, - 3, - 183, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 25, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 98, - 97, - 108, - 97, - 110, - 99, - 101, - 32, - 114, - 101, - 116, - 114, - 105, - 101, - 118, - 101, - 114, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 55, - 86, - 91, - 96, - 0, - 129, - 144, - 80, - 96, - 0, - 129, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 99, - 137, - 99, - 23, - 184, - 96, - 64, - 81, - 129, - 99, - 255, - 255, - 255, - 255, - 22, - 96, - 224, - 27, - 129, - 82, - 96, - 4, - 1, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, 3, - 252, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 4, - 32, - 145, - 144, - 97, - 19, - 199, - 86, - 91, - 144, - 80, - 128, - 97, - 4, - 100, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 18, - 96, - 36, - 130, - 1, - 82, - 113, - 73, - 110, - 118, - 97, - 108, - 105, + 208, 100, - 32, - 97, - 115, 115, - 101, - 116, - 32, - 116, - 121, - 112, - 101, - 96, - 112, - 27, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 55, - 86, - 91, - 96, + 111, + 108, + 99, + 67, 0, - 129, - 129, - 82, - 96, - 2, - 96, - 32, - 144, - 129, - 82, - 96, - 64, - 145, - 130, - 144, - 32, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 22, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 134, - 129, - 22, - 145, - 144, - 145, - 23, - 144, - 145, - 85, - 145, - 81, - 145, - 133, - 22, - 130, - 82, - 130, - 145, - 127, - 237, - 255, - 33, - 70, - 78, - 70, + 8, 18, - 83, - 236, - 11, - 28, - 61, - 84, - 167, - 104, - 186, - 185, - 65, - 137, - 208, - 148, - 53, - 226, - 227, - 243, - 159, - 135, - 80, - 176, - 161, - 87, - 79, - 145, - 1, - 97, - 3, - 76, - 86, - 91, - 97, - 4, - 205, - 97, - 13, - 208, - 86, - 91, - 97, - 4, - 215, + 0, + 51, + ]; + ///The bytecode of the contract. + pub static SUMMA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( + __BYTECODE, + ); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = &[ 96, - 0, - 97, - 14, - 42, - 86, - 91, - 86, - 91, + 128, 96, - 0, - 91, - 129, - 81, - 129, - 16, + 64, + 82, + 52, + 128, 21, 97, - 7, - 109, - 87, - 96, 0, - 130, - 130, - 129, - 81, - 129, 16, - 97, - 4, - 249, 87, - 97, - 4, - 249, - 97, - 19, - 224, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 129, - 1, - 81, - 129, - 1, - 81, - 128, - 81, - 144, - 130, - 1, - 32, 96, 0, - 129, - 129, - 82, - 96, - 1, - 144, - 146, - 82, - 96, - 64, - 144, - 145, - 32, - 84, - 144, - 145, + 128, + 253, + 91, 80, 96, - 255, - 22, - 21, - 97, - 5, - 113, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 97, - 108, - 114, - 101, + 54, + 16, 97, - 100, - 121, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 100, - 0, - 0, - 0, - 0, - 0, - 0, - 0, 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 55, - 86, - 91, + 136, + 87, 96, 0, - 129, - 129, - 82, - 96, - 1, - 96, - 32, - 129, - 144, - 82, + 53, 96, - 64, - 130, - 32, + 224, + 28, 128, - 84, - 96, - 255, - 25, - 22, - 144, - 145, - 23, - 144, - 85, - 131, - 81, - 96, - 3, - 144, - 130, - 144, - 134, - 144, - 134, - 144, - 129, - 16, + 99, + 163, + 196, + 188, + 248, + 17, 97, - 5, - 165, + 0, + 91, 87, + 128, + 99, + 163, + 196, + 188, + 248, + 20, 97, - 5, - 165, + 0, + 248, + 87, + 128, + 99, + 199, + 221, + 202, + 14, + 20, 97, - 19, - 224, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 129, 1, - 81, - 81, - 130, - 82, - 129, + 27, + 87, + 128, + 99, + 230, + 145, + 173, + 51, + 20, + 97, 1, - 145, - 144, - 145, - 82, - 96, - 64, + 46, + 87, + 128, + 99, + 242, + 253, + 227, + 139, + 20, + 97, 1, + 81, + 87, 96, 0, - 32, - 84, - 96, - 1, - 96, - 1, - 96, + 128, + 253, + 91, + 128, + 99, + 35, + 235, + 148, 160, - 27, - 3, - 22, - 3, + 20, 97, - 6, - 49, + 0, + 141, 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 49, - 96, - 36, - 130, - 1, - 82, - 127, + 128, + 99, 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 114, - 32, - 110, - 111, - 116, - 32, - 115, - 101, - 116, - 32, - 102, - 111, - 114, - 32, - 116, - 104, - 105, - 96, - 68, - 130, - 1, - 82, - 112, - 115, - 32, - 116, - 121, - 112, - 101, - 32, - 111, - 102, - 32, + 58, + 159, + 45, + 20, 97, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 120, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, + 0, + 192, + 87, + 128, + 99, + 113, + 80, + 24, + 166, + 20, 97, - 2, - 55, - 86, + 0, + 213, + 87, + 128, + 99, + 141, + 165, + 203, + 91, + 20, + 97, + 0, + 221, + 87, 91, - 96, - 3, 96, 0, - 132, - 132, - 129, - 81, - 129, - 16, + 128, + 253, + 91, 97, - 6, - 71, - 87, + 0, + 173, 97, - 6, - 71, + 0, + 155, + 54, + 96, + 4, 97, - 19, - 224, + 10, + 205, 86, 91, 96, - 32, 2, 96, 32, - 1, - 1, - 81, + 82, 96, 0, - 1, - 81, + 144, 129, 82, 96, + 64, + 144, 32, - 1, + 84, + 129, + 86, + 91, + 96, + 64, + 81, 144, 129, 82, 96, 32, 1, + 91, 96, + 64, + 81, + 128, + 145, + 3, + 144, + 243, + 91, + 97, 0, - 32, - 96, + 211, + 97, 0, - 144, - 84, - 144, + 206, + 54, + 96, + 4, + 97, + 12, + 13, + 86, + 91, 97, 1, + 100, + 86, + 91, 0, - 10, - 144, - 4, + 91, + 97, + 0, + 211, + 97, + 3, + 234, + 86, + 91, + 96, + 0, + 84, + 96, + 64, + 81, 96, 1, 96, @@ -7571,178 +5602,144 @@ pub mod summa { 160, 27, 3, + 144, + 145, 22, + 129, + 82, 96, + 32, 1, - 96, + 97, + 0, + 183, + 86, + 91, + 97, 1, - 96, - 160, - 27, - 3, - 22, - 99, - 41, - 172, - 194, - 213, - 132, - 132, - 129, - 81, - 129, - 16, + 11, 97, + 1, 6, - 149, - 87, + 54, + 96, + 4, 97, - 6, - 149, + 10, + 205, + 86, + 91, 97, - 19, - 224, + 3, + 254, 86, 91, 96, - 32, - 2, - 96, - 32, - 1, - 1, + 64, 81, - 96, - 32, + 97, + 0, + 183, + 148, + 147, + 146, + 145, + 144, + 97, + 13, + 167, + 86, + 91, + 97, + 0, + 211, + 97, 1, - 81, - 133, - 133, - 129, - 81, - 129, - 16, + 41, + 54, + 96, + 4, 97, - 6, - 179, - 87, + 13, + 255, + 86, + 91, 97, 6, - 179, - 97, - 19, - 224, + 94, 86, 91, - 96, - 32, - 2, - 96, - 32, - 1, + 97, 1, - 81, - 96, - 64, + 65, + 97, 1, - 81, - 96, - 64, - 81, - 131, - 99, - 255, - 255, - 255, - 255, - 22, - 96, - 224, - 27, - 129, - 82, + 60, + 54, 96, 4, - 1, 97, - 6, - 220, - 146, - 145, - 144, + 15, + 89, + 86, + 91, 97, - 20, - 60, + 9, + 8, 86, 91, 96, - 32, - 96, 64, 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, + 144, 21, - 128, 21, - 97, - 6, - 249, - 87, - 61, - 96, - 0, - 128, - 62, - 61, + 129, + 82, 96, + 32, + 1, + 97, 0, - 253, + 183, + 86, 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, + 97, + 0, + 211, + 97, 1, - 128, + 95, + 54, 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 7, - 29, - 145, - 144, + 4, 97, + 16, 20, - 106, 86, 91, 97, - 7, - 90, + 9, + 170, + 86, + 91, + 97, + 1, + 108, + 97, + 10, + 35, + 86, + 91, + 96, + 1, + 84, + 96, + 0, + 3, + 97, + 1, + 226, 87, 96, 64, @@ -7757,116 +5754,91 @@ pub mod summa { 129, 82, 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 14, - 96, - 36, - 130, - 1, - 82, - 109, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 57, - 180, - 179, - 183, - 50, - 185, - 96, - 145, - 27, - 96, - 68, + 32, + 96, + 4, 130, 1, 82, 96, - 100, + 54, + 96, + 36, + 130, 1, + 82, + 127, + 84, + 104, + 101, + 32, + 67, + 69, + 88, + 32, + 104, 97, - 2, - 55, - 86, - 91, - 80, - 128, - 97, - 7, + 115, + 32, + 110, + 111, + 116, + 32, + 115, + 117, + 98, + 109, + 105, + 116, + 116, 101, - 129, + 100, + 32, 97, - 20, - 162, - 86, - 91, - 145, - 80, - 80, + 110, + 121, + 32, 97, - 4, - 220, - 86, - 91, - 80, - 127, - 216, - 34, - 202, + 100, + 96, 68, - 227, - 12, - 70, - 150, - 60, - 245, - 247, - 253, - 144, - 202, - 238, - 168, - 67, - 214, - 75, - 231, - 179, - 31, - 231, - 97, - 181, - 48, - 120, - 171, - 249, 130, - 242, + 1, + 82, + 117, + 100, + 114, + 101, + 115, + 115, + 32, + 111, + 119, + 110, + 101, + 114, + 115, + 104, + 105, + 112, + 32, + 112, + 114, + 111, + 111, + 102, + 115, + 96, + 80, 27, - 129, 96, - 64, - 81, - 97, - 7, - 157, - 145, - 144, - 97, - 20, - 187, - 86, + 100, + 130, + 1, + 82, + 96, + 132, + 1, 91, 96, 64, @@ -7875,35 +5847,46 @@ pub mod summa { 145, 3, 144, - 161, - 80, - 86, + 253, 91, 96, 0, - 132, + 131, 81, 96, 1, - 96, + 97, 1, - 96, - 64, - 27, - 3, + 242, + 145, + 144, + 97, + 16, + 90, + 86, + 91, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, 17, 21, 97, - 7, - 195, + 2, + 10, 87, 97, - 7, - 195, + 2, + 10, 97, - 14, - 195, + 10, + 230, 86, 91, 96, @@ -7928,59 +5911,130 @@ pub mod summa { 128, 21, 97, - 7, - 236, + 2, + 51, + 87, + 129, + 96, + 32, + 1, + 96, + 32, + 130, + 2, + 128, + 54, + 131, + 55, + 1, + 144, + 80, + 91, + 80, + 144, + 80, + 132, + 129, + 96, + 0, + 129, + 81, + 129, + 16, + 97, + 2, + 74, + 87, + 97, + 2, + 74, + 97, + 16, + 109, + 86, + 91, + 96, + 32, + 2, + 96, + 32, + 1, + 1, + 129, + 129, + 82, + 80, + 80, + 96, + 0, + 91, + 132, + 81, + 129, + 16, + 21, + 97, + 3, + 69, 87, + 132, + 129, + 129, + 81, 129, + 16, + 97, + 2, + 116, + 87, + 97, + 2, + 116, + 97, + 16, + 109, + 86, + 91, + 96, + 32, + 2, 96, 32, 1, + 1, + 81, 96, 32, - 130, - 2, - 128, - 54, - 131, - 55, 1, - 144, - 80, - 91, - 80, - 144, - 80, + 81, + 81, 96, 0, - 91, - 133, - 81, - 129, - 16, + 20, + 21, + 128, 21, 97, - 11, - 102, + 2, + 176, 87, - 96, - 0, - 91, - 134, - 130, + 80, + 132, + 129, 129, 81, 129, 16, 97, - 8, - 16, + 2, + 158, 87, 97, - 8, - 16, + 2, + 158, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -7992,37 +6046,91 @@ pub mod summa { 1, 81, 96, - 64, + 0, 1, 81, 81, - 129, - 16, + 96, + 0, + 20, 21, + 91, 97, - 10, - 181, + 2, + 236, 87, 96, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, + 96, + 32, + 96, + 4, + 130, 1, + 82, 96, - 0, - 136, + 13, + 96, + 36, + 130, + 1, + 82, + 108, + 18, + 91, + 157, + 152, + 91, + 26, + 89, + 8, + 24, + 92, + 220, + 217, + 93, + 96, + 154, + 27, + 96, + 68, + 130, + 1, + 82, + 96, + 100, + 1, + 97, + 1, + 217, + 86, + 91, 132, 129, + 129, 81, 129, 16, 97, - 8, - 58, + 2, + 254, 87, 97, - 8, - 58, + 2, + 254, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -8037,21 +6145,34 @@ pub mod summa { 64, 1, 81, - 131, + 130, + 130, + 96, + 1, + 97, + 3, + 24, + 145, + 144, + 97, + 16, + 90, + 86, + 91, 129, 81, 129, 16, 97, - 8, - 87, + 3, + 40, 87, 97, - 8, - 87, + 3, + 40, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -8063,36 +6184,40 @@ pub mod summa { 144, 145, 1, - 129, - 1, - 81, - 128, - 81, - 144, - 130, 1, - 32, - 130, 82, + 128, + 97, + 3, + 61, 129, - 1, - 145, - 144, + 97, + 16, + 131, + 86, + 91, 145, - 82, - 96, - 64, - 1, - 96, - 0, - 32, - 84, - 96, - 255, - 22, + 80, + 80, + 97, + 2, + 89, + 86, + 91, + 80, + 97, + 3, + 80, + 131, + 130, 97, + 9, 8, - 199, + 86, + 91, + 97, + 3, + 143, 87, 96, 64, @@ -8102,581 +6227,814 @@ pub mod summa { 27, 205, 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 30, - 96, - 36, - 130, - 1, - 82, - 127, - 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 111, - 119, - 110, - 101, - 114, - 115, - 104, - 105, - 112, - 32, - 110, - 111, - 116, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 100, - 0, - 0, + 229, + 27, + 129, + 82, 96, - 68, + 32, + 96, + 4, 130, 1, 82, 96, - 100, + 16, + 96, + 36, + 130, 1, - 97, - 2, + 82, + 111, + 36, + 183, + 59, + 48, + 182, + 52, + 178, + 16, + 45, + 37, + 144, + 56, + 57, 55, - 86, - 91, + 183, + 179, 96, - 0, + 129, + 27, 96, + 68, + 130, 1, + 82, 96, + 100, 1, - 96, - 160, - 27, - 3, - 22, - 96, - 2, + 97, + 1, + 217, + 86, + 91, + 129, + 127, + 4, + 115, + 88, + 28, + 60, + 244, + 55, + 175, + 197, + 34, + 7, + 216, + 140, + 225, + 84, + 26, + 251, + 199, + 206, + 159, + 219, + 131, + 180, + 212, + 211, + 183, + 33, + 75, + 238, + 213, + 111, + 245, + 130, 96, 0, - 137, - 133, 129, 81, 129, 16, 97, - 8, - 232, + 3, + 196, 87, 97, - 8, - 232, + 3, + 196, 97, - 19, - 224, + 16, + 109, 86, 91, 96, 32, - 144, - 129, 2, - 145, - 144, - 145, + 96, + 32, 1, - 129, 1, 81, + 134, + 96, + 64, 81, - 130, - 82, - 129, - 1, + 97, + 3, + 219, + 146, 145, 144, - 145, - 82, + 97, + 16, + 156, + 86, + 91, 96, 64, - 1, + 81, + 128, + 145, + 3, + 144, + 162, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 97, + 3, + 242, + 97, + 10, + 35, + 86, + 91, + 97, + 3, + 252, 96, 0, - 32, - 84, - 96, - 1, + 97, + 10, + 125, + 86, + 91, + 86, + 91, 96, 1, - 96, - 160, - 27, - 3, - 22, - 3, + 129, + 129, + 84, + 129, + 16, 97, - 9, - 115, + 4, + 14, 87, 96, - 64, - 81, - 98, - 70, - 27, - 205, + 0, + 128, + 253, + 91, + 144, 96, - 229, - 27, - 129, + 0, 82, 96, 32, 96, + 0, + 32, + 144, + 96, 4, - 130, + 2, 1, - 82, 96, - 48, + 0, + 145, + 80, + 144, + 80, + 128, 96, - 36, - 130, + 0, 1, - 82, - 127, - 66, + 128, + 84, 97, - 108, + 4, + 49, + 144, 97, - 110, - 99, - 101, - 32, - 114, - 101, - 116, - 114, - 105, - 101, - 118, - 101, - 114, - 32, - 110, - 111, - 116, - 32, - 115, - 101, - 116, + 17, + 51, + 86, + 91, + 128, + 96, + 31, + 1, + 96, 32, - 102, - 111, - 114, + 128, + 145, + 4, + 2, + 96, 32, - 116, - 104, + 1, 96, - 68, - 130, + 64, + 81, + 144, + 129, 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, + 129, 82, - 111, - 26, - 92, - 200, - 29, - 30, - 92, - 25, - 72, - 27, - 217, - 136, - 24, - 92, - 220, - 217, - 93, 96, + 32, + 1, 130, - 27, + 128, + 84, + 97, + 4, + 93, + 144, + 97, + 17, + 51, + 86, + 91, + 128, + 21, + 97, + 4, + 170, + 87, + 128, 96, - 100, - 130, + 31, + 16, + 97, + 4, + 127, + 87, + 97, 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, 82, + 145, 96, - 132, + 32, 1, + 145, 97, - 2, - 55, + 4, + 170, 86, 91, + 130, + 1, + 145, + 144, 96, - 2, + 0, + 82, + 96, + 32, 96, 0, - 136, - 132, + 32, + 144, + 91, 129, - 81, + 84, 129, - 16, + 82, + 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, + 131, + 17, 97, - 9, - 137, + 4, + 141, 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 144, + 128, + 96, + 1, + 1, + 128, + 84, 97, - 9, - 137, + 4, + 191, + 144, 97, - 19, - 224, + 17, + 51, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, - 1, - 81, 96, - 0, - 1, + 64, 81, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, 129, 82, 96, 32, 1, + 130, + 128, + 84, + 97, + 4, + 235, 144, - 129, + 97, + 17, + 51, + 86, + 91, + 128, + 21, + 97, + 5, + 56, + 87, + 128, + 96, + 31, + 16, + 97, + 5, + 13, + 87, + 97, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, 82, + 145, 96, 32, 1, + 145, + 97, + 5, + 56, + 86, + 91, + 130, + 1, + 145, + 144, 96, 0, + 82, + 96, 32, 96, 0, + 32, 144, + 91, + 129, 84, + 129, + 82, 144, - 97, - 1, - 0, - 10, - 144, - 4, - 96, - 1, 96, 1, - 96, - 160, - 27, - 3, - 22, - 96, 1, + 144, 96, + 32, 1, - 96, - 160, + 128, + 131, + 17, + 97, + 5, 27, + 87, + 130, + 144, 3, + 96, + 31, 22, - 99, - 38, - 12, - 76, - 198, - 136, - 132, - 129, - 81, - 129, - 16, - 97, - 9, - 215, - 87, + 130, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 144, + 128, + 96, + 2, + 1, + 128, + 84, 97, - 9, - 215, + 5, + 77, + 144, 97, - 19, - 224, + 17, + 51, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, - 1, - 81, 96, 64, - 1, 81, - 131, + 144, 129, - 81, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, 129, - 16, - 97, - 9, - 244, - 87, + 129, + 82, + 96, + 32, + 1, + 130, + 128, + 84, 97, - 9, - 244, + 5, + 121, + 144, 97, - 19, - 224, + 17, + 51, 86, 91, + 128, + 21, + 97, + 5, + 198, + 87, + 128, 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 137, - 133, - 129, - 81, - 129, + 31, 16, 97, - 10, - 14, + 5, + 155, 87, 97, - 10, - 14, - 97, - 19, - 224, - 86, - 91, - 96, - 32, + 1, + 0, + 128, + 131, + 84, + 4, 2, + 131, + 82, + 145, 96, 32, 1, + 145, + 97, + 5, + 198, + 86, + 91, + 130, 1, - 81, - 96, + 145, + 144, 96, - 1, - 81, - 135, + 0, + 82, 96, - 64, - 81, - 132, - 99, - 255, - 255, - 255, - 255, - 22, + 32, 96, - 224, - 27, + 0, + 32, + 144, + 91, + 129, + 84, 129, 82, + 144, 96, - 4, 1, - 97, - 10, - 57, - 147, - 146, - 145, + 1, 144, - 97, - 21, - 76, - 86, - 91, 96, 32, - 96, - 64, - 81, + 1, 128, 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, + 17, 97, - 10, - 86, + 5, + 169, 87, - 61, - 96, - 0, - 128, - 62, - 61, + 130, + 144, + 3, 96, - 0, - 253, + 31, + 22, + 130, + 1, + 145, 91, 80, 80, 80, 80, + 80, + 144, + 128, 96, - 64, - 81, - 61, + 3, + 1, + 128, + 84, + 97, + 5, + 219, + 144, + 97, + 17, + 51, + 86, + 91, + 128, 96, 31, - 25, + 1, 96, - 31, - 130, + 32, + 128, + 145, + 4, + 2, + 96, + 32, 1, - 22, - 130, + 96, + 64, + 81, + 144, + 129, 1, - 128, 96, 64, 82, - 80, + 128, + 146, + 145, + 144, 129, + 129, + 82, + 96, + 32, 1, - 144, + 130, + 128, + 84, 97, - 10, - 122, - 145, + 6, + 7, 144, 97, - 19, - 199, + 17, + 51, 86, 91, - 131, - 131, - 129, - 81, - 129, + 128, + 21, + 97, + 6, + 84, + 87, + 128, + 96, + 31, 16, 97, - 10, - 140, + 6, + 41, 87, 97, - 10, - 140, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, + 96, + 32, + 1, + 145, 97, - 19, - 224, + 6, + 84, 86, 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, 96, 32, - 2, 96, + 0, 32, - 1, - 1, + 144, + 91, 129, + 84, 129, - 81, - 97, - 10, - 160, - 145, + 82, + 144, + 96, + 1, + 1, 144, + 96, + 32, + 1, + 128, + 131, + 17, 97, - 21, + 6, + 55, + 87, 130, - 86, + 144, + 3, + 96, + 31, + 22, + 130, + 1, + 145, 91, + 80, + 80, + 80, + 80, + 80, 144, - 82, 80, - 128, - 97, - 10, - 173, - 129, - 97, - 20, - 162, + 132, 86, 91, - 145, - 80, - 80, 97, - 7, - 254, + 6, + 102, + 97, + 10, + 35, 86, 91, - 80, + 96, + 0, + 91, 129, + 81, 129, + 16, + 21, + 97, + 8, + 205, + 87, + 96, + 0, + 130, + 130, 129, 81, 129, 16, 97, - 10, - 200, + 6, + 134, 87, 97, - 10, - 200, + 6, + 134, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -8687,41 +7045,71 @@ pub mod summa { 1, 1, 81, - 134, - 130, - 129, + 96, + 0, + 1, 81, - 129, - 16, - 97, - 10, - 226, - 87, + 96, + 64, + 81, + 96, + 32, + 1, 97, - 10, - 226, + 6, + 162, + 145, + 144, 97, - 19, - 224, + 17, + 109, 86, 91, 96, - 32, - 2, + 64, + 128, + 81, 96, - 32, - 1, + 31, + 25, + 129, + 132, + 3, 1, + 129, + 82, + 145, + 129, + 82, + 129, 81, 96, 32, + 146, + 131, 1, - 81, - 17, + 32, + 96, + 0, + 129, + 129, + 82, + 96, + 2, + 144, + 147, + 82, + 145, + 32, + 84, + 144, + 145, + 80, + 128, 21, 97, - 11, - 84, + 7, + 24, 87, 96, 64, @@ -8743,7 +7131,7 @@ pub mod summa { 1, 82, 96, - 47, + 24, 96, 36, 130, @@ -8751,194 +7139,273 @@ pub mod summa { 82, 127, 65, - 99, - 116, - 117, - 97, - 108, + 100, + 100, + 114, + 101, + 115, + 115, 32, - 98, 97, 108, - 97, - 110, - 99, + 114, 101, + 97, + 100, + 121, 32, + 118, + 101, + 114, + 105, + 102, 105, - 115, - 32, - 108, 101, - 115, - 115, - 32, - 116, - 104, + 100, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 96, + 68, + 130, + 1, + 82, + 96, + 100, + 1, + 97, + 1, + 217, + 86, + 91, + 97, + 7, + 35, + 131, + 96, + 1, 97, - 110, + 16, + 90, + 86, + 91, + 96, + 0, + 131, + 129, + 82, + 96, + 2, + 96, 32, - 116, - 104, - 101, + 82, + 96, + 64, + 144, 32, + 85, + 131, + 81, 96, - 68, - 130, 1, - 82, - 110, + 144, + 133, + 144, + 133, + 144, + 129, + 16, + 97, + 7, + 73, + 87, 97, + 7, + 73, + 97, + 16, 109, - 111, - 117, - 110, - 116, - 32, - 116, - 111, - 32, - 112, - 114, - 111, - 118, - 101, - 96, - 136, - 27, + 86, + 91, 96, - 100, + 32, + 144, + 129, + 2, + 145, + 144, + 145, + 1, + 129, + 1, + 81, 130, + 84, + 96, 1, - 82, + 129, + 1, + 132, + 85, 96, + 0, + 147, 132, - 1, - 97, + 82, + 145, + 144, + 146, + 32, + 130, + 81, + 96, + 4, + 144, + 146, 2, - 55, - 86, - 91, - 128, - 97, - 11, - 94, + 1, + 144, 129, + 144, 97, - 20, - 162, + 7, + 123, + 144, + 130, + 97, + 17, + 207, 86, 91, - 145, - 80, 80, + 96, + 32, + 130, + 1, + 81, + 96, + 1, + 130, + 1, + 144, 97, 7, - 242, + 144, + 144, + 130, + 97, + 17, + 207, 86, 91, 80, 96, - 0, - 133, + 64, + 130, + 1, 81, 96, + 2, + 130, 1, - 97, - 11, - 119, - 145, 144, 97, - 21, + 7, + 165, + 144, 130, + 97, + 17, + 207, 86, 91, + 80, 96, - 1, 96, + 130, 1, + 81, 96, - 64, - 27, 3, - 129, + 130, + 1, + 144, + 97, + 7, + 186, + 144, + 130, + 97, 17, - 21, + 207, + 86, + 91, + 80, + 80, + 80, + 131, + 131, + 129, + 81, + 129, + 16, 97, - 11, - 142, + 7, + 207, 87, 97, - 11, - 142, + 7, + 207, 97, - 14, - 195, + 16, + 109, 86, 91, 96, - 64, - 81, - 144, - 128, - 130, - 82, - 128, - 96, 32, 2, 96, 32, 1, - 130, 1, + 81, 96, - 64, - 82, + 0, + 1, + 81, + 81, + 96, + 0, + 20, + 21, 128, 21, 97, + 8, 11, - 183, 87, - 129, - 96, - 32, - 1, - 96, - 32, - 130, - 2, - 128, - 54, - 131, - 55, - 1, - 144, - 80, - 91, 80, - 144, - 80, - 132, - 129, - 96, - 0, + 131, + 131, 129, 81, 129, 16, 97, - 11, - 206, + 7, + 249, 87, 97, - 11, - 206, + 7, + 249, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -8948,39 +7415,40 @@ pub mod summa { 32, 1, 1, - 129, - 129, - 82, - 80, - 80, + 81, + 96, + 32, + 1, + 81, + 81, 96, 0, + 20, + 21, 91, - 134, - 81, - 129, - 16, + 128, 21, 97, - 12, - 63, + 8, + 54, 87, - 134, - 129, + 80, + 131, + 131, 129, 81, 129, 16, 97, - 11, - 248, + 8, + 36, 87, 97, - 11, - 248, + 8, + 36, 97, - 19, - 224, + 16, + 109, 86, 91, 96, @@ -8992,82 +7460,61 @@ pub mod summa { 1, 81, 96, - 32, + 64, 1, 81, - 130, - 130, + 81, 96, - 1, - 97, - 12, - 18, - 145, - 144, - 97, + 0, + 20, 21, - 130, - 86, 91, + 128, + 21, + 97, + 8, + 97, + 87, + 80, + 131, + 131, 129, 81, 129, 16, 97, - 12, - 34, + 8, + 79, 87, 97, - 12, - 34, + 8, + 79, 97, - 19, - 224, + 16, + 109, 86, 91, 96, 32, - 144, - 129, 2, - 145, - 144, - 145, + 96, + 32, 1, 1, - 82, - 128, - 97, - 12, - 55, - 129, - 97, + 81, + 96, + 96, + 1, + 81, + 81, + 96, + 0, 20, - 162, - 86, - 91, - 145, - 80, - 80, - 97, - 11, - 221, - 86, - 91, - 80, - 97, - 12, - 74, - 132, - 130, - 97, - 12, - 188, - 86, + 21, 91, 97, - 12, - 137, + 8, + 184, 87, 96, 64, @@ -9089,97 +7536,160 @@ pub mod summa { 1, 82, 96, - 16, + 34, 96, 36, 130, 1, 82, + 127, + 73, + 110, + 118, + 97, + 108, + 105, + 100, + 32, + 112, + 114, 111, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 61, - 53, - 144, - 56, - 57, - 55, - 183, - 179, - 96, - 129, - 27, + 111, + 102, + 32, + 111, + 102, + 32, + 97, + 100, + 100, + 114, + 101, + 115, + 115, + 32, + 111, + 119, + 110, + 101, + 114, + 115, + 104, 96, 68, 130, 1, 82, + 97, + 6, + 151, + 96, + 244, + 27, 96, 100, + 130, + 1, + 82, + 96, + 132, 1, 97, - 2, - 55, + 1, + 217, 86, 91, - 96, - 64, - 81, - 133, + 80, + 80, + 128, + 128, + 97, + 8, + 197, 144, + 97, + 16, + 131, + 86, + 91, + 145, + 80, + 80, + 97, + 6, + 105, + 86, + 91, + 80, 127, - 8, - 54, - 124, - 158, + 56, + 35, + 21, + 212, + 213, + 106, + 96, + 53, + 225, + 137, + 155, + 255, + 231, 125, - 230, - 171, - 164, - 18, - 51, - 76, - 126, - 138, - 2, - 190, - 76, - 87, - 166, - 63, + 155, + 236, + 239, + 175, + 95, 38, - 137, - 69, - 73, - 124, - 157, - 105, - 55, - 114, - 199, - 243, - 150, - 147, + 80, + 228, + 50, + 59, + 39, + 133, + 72, + 87, + 160, + 69, + 70, + 88, + 129, + 96, + 64, + 81, + 97, + 8, + 253, + 145, 144, + 97, + 18, + 143, + 86, + 91, 96, - 0, + 64, + 81, + 128, + 145, + 3, 144, - 162, - 80, - 80, - 80, - 80, - 80, + 161, 80, 86, 91, 96, + 0, + 97, + 9, + 18, + 97, + 10, + 35, + 86, + 91, + 96, 64, 81, 99, @@ -9193,9 +7703,6 @@ pub mod summa { 129, 82, 96, - 0, - 144, - 96, 1, 96, 1, @@ -9245,8 +7752,8 @@ pub mod summa { 144, 144, 97, - 13, - 13, + 9, + 96, 144, 133, 144, @@ -9256,8 +7763,8 @@ pub mod summa { 4, 1, 97, - 21, - 149, + 19, + 75, 86, 91, 96, @@ -9276,8 +7783,8 @@ pub mod summa { 128, 21, 97, - 13, - 42, + 9, + 125, 87, 61, 96, @@ -9316,13 +7823,13 @@ pub mod summa { 1, 144, 97, - 13, - 78, + 9, + 161, 145, 144, 97, - 20, - 106, + 19, + 162, 86, 91, 144, @@ -9335,11 +7842,11 @@ pub mod summa { 86, 91, 97, - 13, - 95, + 9, + 178, 97, - 13, - 208, + 10, + 35, 86, 91, 96, @@ -9353,8 +7860,8 @@ pub mod summa { 129, 22, 97, - 13, - 196, + 10, + 23, 87, 96, 64, @@ -9439,17 +7946,17 @@ pub mod summa { 132, 1, 97, - 2, - 55, + 1, + 217, 86, 91, 97, - 13, - 205, + 10, + 32, 129, 97, - 14, - 42, + 10, + 125, 86, 91, 80, @@ -9470,8 +7977,8 @@ pub mod summa { 51, 20, 97, - 4, - 215, + 3, + 252, 87, 96, 64, @@ -9541,8 +8048,8 @@ pub mod summa { 100, 1, 97, - 2, - 55, + 1, + 217, 86, 91, 96, @@ -9635,8 +8142,8 @@ pub mod summa { 18, 21, 97, - 14, - 140, + 10, + 223, 87, 96, 0, @@ -9650,54 +8157,6 @@ pub mod summa { 80, 86, 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 14, - 165, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 14, - 188, - 87, - 96, - 0, - 128, - 253, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, 99, 78, 72, @@ -9727,14 +8186,15 @@ pub mod summa { 96, 129, 1, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, 17, 130, @@ -9743,15 +8203,15 @@ pub mod summa { 23, 21, 97, - 14, - 251, + 11, + 31, 87, 97, - 14, - 251, + 11, + 31, 97, - 14, - 195, + 10, + 230, 86, 91, 96, @@ -9767,14 +8227,15 @@ pub mod summa { 128, 129, 1, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, 17, 130, @@ -9783,15 +8244,15 @@ pub mod summa { 23, 21, 97, - 14, - 251, + 11, + 31, 87, 97, - 14, - 251, + 11, + 31, 97, - 14, - 195, + 10, + 230, 86, 91, 96, @@ -9807,14 +8268,15 @@ pub mod summa { 22, 129, 1, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, 17, 130, @@ -9823,15 +8285,15 @@ pub mod summa { 23, 21, 97, - 15, - 75, + 11, + 113, 87, 97, - 15, - 75, + 11, + 113, 97, - 14, - 195, + 10, + 230, 86, 91, 96, @@ -9844,27 +8306,28 @@ pub mod summa { 91, 96, 0, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 130, 17, 21, 97, - 15, - 108, + 11, + 147, 87, 97, - 15, - 108, + 11, + 147, 97, - 14, - 195, + 10, + 230, 86, 91, 80, @@ -9886,8 +8349,8 @@ pub mod summa { 1, 18, 97, - 15, - 135, + 11, + 174, 87, 96, 0, @@ -9896,32 +8359,33 @@ pub mod summa { 91, 129, 53, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, 17, 21, 97, - 15, - 160, + 11, + 200, 87, 97, - 15, - 160, + 11, + 200, 97, - 14, - 195, + 10, + 230, 86, 91, 97, - 15, - 179, + 11, + 219, 96, 31, 130, @@ -9934,8 +8398,8 @@ pub mod summa { 32, 1, 97, - 15, - 35, + 11, + 72, 86, 91, 129, @@ -9951,8 +8415,8 @@ pub mod summa { 17, 21, 97, - 15, - 200, + 11, + 240, 87, 96, 0, @@ -9990,40 +8454,51 @@ pub mod summa { 91, 96, 0, + 128, + 96, + 0, + 128, 96, - 32, 128, - 131, 133, + 135, 3, 18, 21, 97, - 15, - 248, + 12, + 35, 87, 96, 0, 128, 253, 91, - 130, + 132, 53, + 147, + 80, 96, + 32, + 133, 1, - 96, - 1, - 96, - 64, - 27, - 3, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 128, 130, 17, 21, 97, - 16, - 15, + 12, + 66, 87, 96, 0, @@ -10031,236 +8506,441 @@ pub mod summa { 253, 91, 129, - 133, + 135, 1, 145, 80, - 133, + 135, 96, 31, 131, 1, 18, 97, - 16, - 35, + 12, + 86, 87, 96, 0, 128, 253, 91, - 129, + 97, + 12, + 104, + 97, + 12, + 99, + 131, 53, 97, - 16, - 54, + 11, + 121, + 86, + 91, + 97, + 11, + 72, + 86, + 91, + 130, + 53, + 128, + 130, + 82, + 96, + 32, + 128, + 131, + 1, + 146, + 145, + 96, + 5, + 27, + 133, + 1, + 1, + 138, + 129, + 17, + 21, 97, + 12, + 135, + 87, + 96, + 0, + 128, + 253, + 91, + 96, + 32, + 133, + 1, + 91, + 129, + 129, 16, - 49, + 21, + 97, + 13, + 41, + 87, + 132, + 129, + 53, + 17, + 21, + 97, + 12, + 162, + 87, + 96, + 0, + 128, + 253, + 91, + 128, + 53, + 134, + 1, + 96, + 96, + 129, + 142, + 3, + 96, + 31, + 25, + 1, + 18, + 21, + 97, + 12, + 186, + 87, + 96, + 0, + 128, + 253, + 91, + 97, + 12, + 194, + 97, + 10, + 252, + 86, + 91, + 96, + 32, 130, + 1, + 53, + 135, + 129, + 17, + 21, 97, - 15, - 83, + 12, + 212, + 87, + 96, + 0, + 128, + 253, + 91, + 97, + 12, + 227, + 143, + 96, + 32, + 131, + 134, + 1, + 1, + 97, + 11, + 157, 86, 91, + 130, + 82, + 80, + 96, + 64, + 130, + 1, + 53, + 135, + 129, + 17, + 21, + 97, + 12, + 248, + 87, + 96, + 0, + 128, + 253, + 91, + 97, + 13, + 7, + 143, + 96, + 32, + 131, + 134, + 1, + 1, 97, - 15, - 35, + 11, + 157, 86, 91, - 129, - 129, - 82, 96, - 5, + 32, + 131, + 129, + 1, 145, 144, 145, - 27, + 82, + 96, + 96, + 147, + 144, + 147, + 1, + 53, + 96, + 64, 131, 1, + 82, + 80, + 133, + 82, + 147, 132, 1, - 144, - 132, - 129, + 147, 1, + 97, + 12, + 140, + 86, + 91, + 80, 144, - 136, - 131, + 150, + 80, + 80, + 80, + 96, + 64, + 135, + 1, + 53, + 145, + 80, + 128, + 130, 17, 21, 97, - 16, - 85, + 13, + 67, 87, 96, 0, 128, 253, 91, - 133, - 133, + 80, + 97, + 13, + 80, + 135, + 130, + 136, 1, + 97, + 11, + 157, + 86, + 91, + 148, + 151, + 147, + 150, + 80, + 147, + 148, + 96, + 96, + 1, + 53, + 147, + 80, + 80, + 80, + 86, + 91, + 96, + 0, + 129, + 81, + 128, + 132, + 82, + 96, + 0, 91, - 131, + 129, 129, 16, 21, 97, - 16, - 242, + 13, + 135, 87, - 128, - 53, + 96, + 32, + 129, 133, + 1, 129, - 17, - 21, + 1, + 81, + 134, + 131, + 1, + 130, + 1, + 82, + 1, 97, - 16, - 113, - 87, + 13, + 107, + 86, + 91, + 80, 96, 0, - 128, - 129, - 253, - 91, + 96, + 32, + 130, 134, 1, + 1, + 82, 96, - 96, - 129, - 140, - 3, + 32, 96, 31, 25, + 96, + 31, + 131, + 1, + 22, + 133, 1, + 1, + 145, + 80, + 80, + 146, + 145, + 80, + 80, + 86, + 91, + 96, + 128, 129, - 19, - 21, - 97, - 16, - 137, - 87, + 82, 96, 0, + 97, + 13, + 186, + 96, 128, - 129, - 253, - 91, + 131, + 1, + 135, 97, - 16, - 145, + 13, 97, - 14, - 217, 86, 91, - 137, - 131, - 1, - 53, + 130, 129, - 82, + 3, 96, - 64, - 128, + 32, 132, 1, - 53, - 137, - 129, - 17, - 21, + 82, 97, - 16, - 171, - 87, - 96, - 0, - 128, + 13, + 204, 129, - 253, - 91, + 135, 97, - 16, - 185, - 143, - 141, - 131, - 136, - 1, - 1, + 13, 97, - 15, - 118, 86, 91, - 131, - 141, - 1, - 82, + 144, 80, - 145, - 131, + 130, + 129, + 3, + 96, + 64, + 132, 1, - 53, - 145, - 136, - 131, - 17, - 21, + 82, 97, - 16, - 209, - 87, - 96, - 0, - 128, + 13, + 224, 129, - 253, - 91, - 97, - 16, - 223, - 142, - 140, - 133, - 135, - 1, - 1, + 134, + 97, + 13, 97, - 15, - 118, 86, 91, 144, + 80, 130, + 129, + 3, + 96, + 96, + 132, 1, 82, + 97, + 13, + 244, + 129, 133, - 82, - 80, - 80, - 145, - 134, - 1, - 145, - 134, - 1, 97, - 16, - 89, + 13, + 97, 86, 91, - 80, - 152, 151, - 80, + 150, 80, 80, 80, @@ -10272,40 +8952,40 @@ pub mod summa { 91, 96, 0, - 128, - 96, - 0, - 128, 96, + 32, 128, + 131, 133, - 135, 3, 18, 21, 97, - 17, - 21, + 14, + 18, 87, 96, 0, 128, 253, 91, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 133, + 130, 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, + 130, 17, 21, 97, - 17, + 14, 42, 87, 96, @@ -10313,219 +8993,346 @@ pub mod summa { 128, 253, 91, + 129, + 133, + 1, + 145, + 80, 133, 96, 31, - 134, - 53, - 135, - 1, + 131, 1, 18, 97, - 17, - 60, + 14, + 62, 87, 96, 0, 128, 253, 91, + 129, + 53, 97, - 17, + 14, 76, 97, - 16, - 49, - 134, - 53, - 135, - 1, - 53, + 12, + 99, + 130, 97, - 15, - 83, + 11, + 121, 86, 91, - 133, - 53, - 134, - 1, - 128, - 53, - 128, - 131, + 129, + 129, 82, 96, - 32, - 128, - 132, - 1, - 147, - 146, - 96, 5, - 146, - 144, - 146, - 27, + 145, 144, 145, + 27, + 131, + 1, + 132, 1, + 144, + 132, + 129, 1, + 144, 136, + 131, + 17, + 21, + 97, + 14, + 107, + 87, + 96, + 0, + 128, + 253, + 91, + 133, + 133, + 1, + 91, + 131, + 129, 16, 21, 97, + 15, + 76, + 87, + 128, + 53, + 133, + 129, 17, - 114, + 21, + 97, + 14, + 134, 87, 96, 0, 128, 253, 91, - 96, - 32, - 135, - 53, - 136, + 134, 1, + 96, + 128, + 129, + 140, + 3, + 96, + 31, + 25, 1, + 18, + 21, + 97, + 14, + 157, + 87, + 96, + 0, + 128, + 129, + 253, + 91, + 97, + 14, + 165, + 97, + 11, + 37, + 86, 91, - 135, - 53, 136, + 130, 1, - 128, 53, + 135, + 129, + 17, + 21, + 97, + 14, + 183, + 87, 96, - 5, - 27, + 0, + 128, + 129, + 253, + 91, + 97, + 14, + 197, + 141, + 139, + 131, + 134, 1, + 1, + 97, + 11, + 157, + 86, + 91, + 130, + 82, + 80, 96, - 32, + 64, + 128, + 131, 1, + 53, + 136, 129, - 16, + 17, 21, 97, - 18, - 202, + 14, + 220, 87, 96, + 0, + 128, + 129, + 253, + 91, + 97, + 14, + 234, + 142, + 140, + 131, + 135, + 1, + 1, + 97, + 11, + 157, + 86, + 91, + 139, + 132, 1, + 82, + 80, 96, - 1, 96, - 64, - 27, - 3, - 129, + 128, + 132, + 1, 53, + 137, + 129, 17, 21, 97, - 17, - 163, + 15, + 3, 87, 96, 0, 128, + 129, 253, 91, - 135, - 53, + 97, + 15, + 17, + 143, + 141, + 131, 136, 1, - 129, - 53, 1, + 97, + 11, + 157, + 86, + 91, + 131, + 133, + 1, + 82, + 80, 96, 128, - 129, - 139, - 3, - 96, - 31, - 25, + 132, 1, - 18, + 53, + 145, + 80, + 136, + 130, + 17, 21, 97, - 17, - 190, + 15, + 43, 87, 96, 0, 128, + 129, 253, 91, 97, - 17, - 198, - 97, 15, + 57, + 142, + 140, + 132, + 135, + 1, 1, + 97, + 11, + 157, 86, 91, - 96, - 32, - 130, + 144, + 131, 1, - 53, - 129, 82, - 96, - 64, - 130, - 1, - 53, - 96, - 32, - 130, - 1, + 80, + 132, 82, - 96, + 80, + 145, + 134, 1, - 96, + 145, + 134, 1, + 97, + 14, + 111, + 86, + 91, + 80, + 152, + 151, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 91, 96, - 64, - 27, - 3, - 96, + 0, + 128, 96, + 64, 131, - 1, - 53, - 17, + 133, + 3, + 18, 21, 97, - 17, - 239, + 15, + 108, 87, 96, 0, 128, 253, 91, - 96, - 96, 130, - 1, 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, 130, - 1, - 139, - 96, - 63, - 130, - 1, - 18, + 17, + 21, 97, - 18, - 5, + 15, + 132, 87, 96, 0, @@ -10533,480 +9340,466 @@ pub mod summa { 253, 91, 97, - 18, - 21, - 97, - 16, - 49, - 96, - 32, + 15, + 144, + 134, 131, + 135, 1, - 53, 97, - 15, - 83, + 11, + 157, 86, 91, + 147, + 80, 96, 32, - 130, + 145, + 80, 129, + 133, 1, 53, - 128, - 131, - 82, - 144, - 130, - 1, - 145, - 144, - 96, - 5, - 27, - 131, - 1, - 96, - 64, - 1, - 142, - 16, + 129, + 129, + 17, 21, 97, - 18, - 55, + 15, + 167, 87, 96, 0, 128, 253, 91, - 96, - 64, - 131, - 1, - 91, - 96, - 64, - 96, - 32, 133, 1, - 53, + 144, + 80, 96, - 5, - 27, - 133, - 1, - 1, + 31, 129, - 16, - 21, - 97, - 18, - 131, - 87, - 96, - 1, - 96, 1, - 96, - 64, - 27, - 3, - 129, - 53, - 17, - 21, + 134, + 19, 97, - 18, - 101, + 15, + 186, 87, 96, 0, 128, 253, 91, - 97, - 18, - 117, - 143, - 96, - 64, - 131, + 128, 53, - 135, - 1, - 1, 97, - 15, - 118, - 86, - 91, - 131, - 82, - 96, - 32, - 146, - 131, - 1, - 146, - 1, + 15, + 200, + 97, + 12, + 99, + 130, 97, - 18, - 60, + 11, + 121, 86, 91, - 80, - 96, - 64, - 132, - 1, + 129, + 129, 82, - 80, - 80, 96, + 5, + 145, + 144, + 145, + 27, + 130, 1, - 96, + 131, 1, - 96, - 64, - 27, - 3, - 96, - 128, + 144, 131, + 129, 1, - 53, + 144, + 136, + 131, 17, 21, 97, - 18, - 163, + 15, + 231, 87, 96, 0, 128, 253, 91, - 97, - 18, - 182, - 139, - 96, - 32, - 96, - 128, - 133, - 1, - 53, - 133, - 1, + 146, + 132, 1, - 97, - 15, - 118, - 86, + 146, 91, - 96, - 96, 130, - 1, - 82, 132, + 16, + 21, + 97, + 16, + 5, + 87, + 131, + 53, + 130, 82, - 80, - 96, - 32, 146, - 131, + 132, 1, 146, + 144, + 132, 1, + 144, 97, - 17, - 122, + 15, + 236, 86, 91, + 128, + 149, + 80, + 80, + 80, 80, - 148, 80, 80, - 96, - 32, - 133, - 1, - 53, 146, 80, + 146, + 144, + 80, + 86, + 91, 96, - 1, - 96, - 1, + 0, 96, - 64, - 27, + 32, + 130, + 132, 3, - 96, - 64, - 134, - 1, - 53, - 17, + 18, 21, 97, - 18, - 237, + 16, + 38, 87, 96, 0, 128, 253, 91, - 97, - 18, - 253, - 134, + 129, + 53, 96, - 64, - 135, 1, - 53, - 135, + 96, 1, + 96, + 160, + 27, + 3, + 129, + 22, + 129, + 20, 97, - 15, - 118, - 86, + 16, + 61, + 87, + 96, + 0, + 128, + 253, 91, 147, - 150, 146, - 149, 80, - 146, - 147, - 96, - 96, - 1, - 53, - 146, 80, 80, 86, 91, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, 96, 0, - 128, + 82, 96, - 64, - 131, - 133, - 3, - 18, + 17, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, + 128, + 130, + 1, + 128, + 130, + 17, 21, 97, - 19, - 32, + 9, + 164, 87, + 97, + 9, + 164, + 97, + 16, + 68, + 86, + 91, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 50, + 96, + 4, + 82, + 96, + 36, 96, 0, - 128, 253, 91, + 96, + 0, + 96, + 1, 130, - 53, + 1, + 97, + 16, + 149, + 87, + 97, + 16, + 149, + 97, + 16, + 68, + 86, + 91, + 80, 96, 1, + 1, + 144, + 86, + 91, 96, - 1, + 0, 96, 64, - 27, - 3, 128, - 130, - 17, - 21, - 97, - 19, - 55, - 87, + 131, + 1, + 133, + 132, + 82, 96, - 0, - 128, - 253, - 91, - 97, - 19, - 67, + 32, + 130, + 129, 134, - 131, - 135, 1, - 97, - 15, - 118, - 86, - 91, + 82, + 129, + 134, + 81, + 128, + 132, + 82, + 96, + 96, 147, 80, - 96, - 32, + 131, + 135, + 1, 145, 80, + 131, 129, - 133, + 96, + 5, + 27, + 136, + 1, + 1, + 131, + 137, 1, - 53, - 129, - 129, - 17, - 21, - 97, - 19, - 90, - 87, 96, 0, - 128, - 253, 91, - 133, - 1, - 144, - 80, - 96, - 31, + 131, 129, - 1, - 134, - 19, + 16, + 21, 97, - 19, - 109, + 17, + 35, 87, + 137, + 131, + 3, 96, - 0, - 128, - 253, - 91, + 95, + 25, + 1, + 133, + 82, + 129, + 81, 128, - 53, - 97, - 19, - 123, + 81, + 136, + 133, + 82, 97, 16, - 49, + 238, + 137, + 134, + 1, 130, 97, - 15, - 83, + 13, + 97, 86, 91, - 129, - 129, - 82, - 96, - 5, - 145, 144, - 145, - 27, + 80, + 135, 130, 1, - 131, - 1, - 144, - 131, - 129, + 81, + 133, + 130, + 3, + 137, + 135, 1, - 144, - 136, - 131, + 82, + 97, 17, - 21, + 5, + 130, + 130, 97, - 19, - 154, - 87, - 96, - 0, - 128, - 253, + 13, + 97, + 86, 91, 146, - 132, + 139, 1, - 146, - 91, - 130, - 132, - 16, - 21, - 97, - 19, - 184, - 87, - 131, - 53, - 130, + 81, + 149, + 139, + 1, + 149, + 144, + 149, 82, - 146, - 132, + 80, + 148, + 134, 1, + 148, 146, + 80, 144, - 132, + 133, 1, 144, + 96, + 1, + 1, 97, - 19, - 159, + 16, + 202, 86, 91, - 128, - 149, + 80, + 144, + 154, + 153, + 80, + 80, 80, 80, 80, 80, 80, 80, - 146, 80, - 146, - 144, 80, 86, 91, 96, - 0, - 96, - 32, + 1, + 129, + 129, + 28, + 144, 130, - 132, - 3, - 18, - 21, + 22, + 128, 97, - 19, - 217, + 17, + 71, 87, 96, - 0, - 128, - 253, - 91, - 80, - 81, + 127, + 130, + 22, 145, - 144, 80, - 86, 91, + 96, + 32, + 130, + 16, + 129, + 3, + 97, + 17, + 103, + 87, 99, 78, 72, @@ -11019,7 +9812,7 @@ pub mod summa { 0, 82, 96, - 50, + 34, 96, 4, 82, @@ -11029,201 +9822,300 @@ pub mod summa { 0, 253, 91, + 80, + 145, + 144, + 80, + 86, + 91, 96, - 0, - 129, - 81, - 128, - 132, + 32, + 129, 82, 96, 0, - 91, - 129, - 129, - 16, - 21, 97, - 20, - 28, - 87, + 9, + 161, 96, 32, - 129, - 133, - 1, - 129, - 1, - 81, - 134, 131, 1, - 130, - 1, - 82, - 1, + 132, + 97, + 13, 97, - 20, - 0, 86, 91, - 80, + 96, + 31, + 130, + 17, + 21, + 97, + 17, + 202, + 87, 96, 0, + 129, + 129, + 82, 96, 32, - 130, - 134, + 129, + 32, + 96, + 31, + 133, 1, + 96, + 5, + 28, + 129, 1, - 82, 96, 32, + 134, + 16, + 21, + 97, + 17, + 167, + 87, + 80, + 128, + 91, 96, 31, - 25, - 96, - 31, - 131, - 1, - 22, 133, 1, + 96, + 5, + 28, + 130, 1, 145, 80, - 80, - 146, - 145, - 80, - 80, - 86, 91, - 96, - 64, 129, - 82, - 96, - 0, - 97, - 20, - 79, - 96, - 64, - 131, - 1, - 133, + 129, + 16, + 21, 97, - 19, - 246, - 86, - 91, + 17, + 198, + 87, 130, 129, - 3, + 85, 96, - 32, - 132, 1, - 82, - 97, - 20, - 97, - 129, - 133, + 1, 97, - 19, - 246, + 17, + 179, 86, 91, - 149, - 148, 80, 80, 80, + 91, + 80, 80, 80, 86, 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, + 129, + 81, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, 21, 97, - 20, - 124, + 17, + 233, 87, - 96, - 0, - 128, - 253, + 97, + 17, + 233, + 97, + 10, + 230, + 86, 91, + 97, + 17, + 253, 129, - 81, + 97, + 17, + 247, + 132, + 84, + 97, + 17, + 51, + 86, + 91, + 132, + 97, + 17, 128, - 21, - 21, + 86, + 91, + 96, + 32, + 128, + 96, + 31, + 131, + 17, + 96, + 1, 129, 20, 97, - 14, - 188, + 18, + 50, 87, 96, 0, - 128, - 253, + 132, + 21, + 97, + 18, + 26, + 87, + 80, + 133, + 131, + 1, + 81, 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, 96, 0, - 82, + 25, + 96, + 3, + 134, + 144, + 27, + 28, + 25, + 22, 96, + 1, + 133, + 144, + 27, + 23, + 133, + 85, + 97, 17, + 198, + 86, + 91, 96, - 4, + 0, + 133, + 129, 82, 96, - 36, + 32, + 129, + 32, 96, - 0, - 253, + 31, + 25, + 134, + 22, + 145, 91, - 96, - 0, + 130, + 129, + 16, + 21, + 97, + 18, + 97, + 87, + 136, + 134, + 1, + 81, + 130, + 85, + 148, + 132, + 1, + 148, 96, 1, - 130, + 144, + 145, + 1, + 144, + 132, 1, 97, - 20, - 180, - 87, - 97, - 20, - 180, - 97, - 20, - 140, + 18, + 66, 86, 91, 80, + 133, + 130, + 16, + 21, + 97, + 18, + 127, + 87, + 135, + 133, + 1, + 81, + 96, + 0, + 25, + 96, + 3, + 136, + 144, + 27, + 96, + 248, + 22, + 28, + 25, + 22, + 129, + 85, + 91, + 80, + 80, + 80, + 80, + 80, 96, 1, + 144, + 129, + 27, 1, 144, + 85, + 80, 86, 91, 96, @@ -11270,8 +10162,8 @@ pub mod summa { 16, 21, 97, - 21, - 62, + 19, + 61, 87, 96, 63, @@ -11285,30 +10177,46 @@ pub mod summa { 129, 81, 96, - 96, + 128, 129, 81, - 133, + 129, + 134, 82, + 97, + 18, + 220, + 130, + 135, + 1, + 130, + 97, + 13, + 97, + 86, + 91, + 145, + 80, + 80, 136, 130, 1, 81, - 129, + 133, + 130, + 3, 138, 135, 1, 82, 97, - 21, - 16, + 18, + 244, 130, - 135, - 1, 130, 97, - 19, - 246, + 13, + 97, 86, 91, 145, @@ -11318,23 +10226,50 @@ pub mod summa { 130, 1, 81, + 133, + 130, + 3, + 137, + 135, + 1, + 82, + 97, + 19, + 12, + 130, + 130, + 97, + 13, + 97, + 86, + 91, 145, 80, - 132, - 129, + 80, + 96, + 96, + 128, + 131, + 1, + 81, + 146, + 80, + 133, + 130, 3, - 136, - 134, + 129, + 135, 1, 82, + 80, 97, - 21, - 42, + 19, + 41, 129, 131, 97, - 19, - 246, + 13, + 97, 86, 91, 150, @@ -11353,8 +10288,8 @@ pub mod summa { 1, 1, 97, - 20, - 226, + 18, + 182, 86, 91, 80, @@ -11372,79 +10307,6 @@ pub mod summa { 86, 91, 96, - 96, - 129, - 82, - 96, - 0, - 97, - 21, - 95, - 96, - 96, - 131, - 1, - 134, - 97, - 19, - 246, - 86, - 91, - 130, - 129, - 3, - 96, - 32, - 132, - 1, - 82, - 97, - 21, - 113, - 129, - 134, - 97, - 19, - 246, - 86, - 91, - 145, - 80, - 80, - 130, - 96, - 64, - 131, - 1, - 82, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 128, - 130, - 1, - 128, - 130, - 17, - 21, - 97, - 13, - 81, - 87, - 97, - 13, - 81, - 97, - 20, - 140, - 86, - 91, - 96, 64, 128, 130, @@ -11478,8 +10340,8 @@ pub mod summa { 16, 21, 97, - 21, - 206, + 19, + 132, 87, 129, 81, @@ -11497,8 +10359,8 @@ pub mod summa { 1, 1, 97, - 21, - 178, + 19, + 104, 86, 91, 80, @@ -11512,24 +10374,58 @@ pub mod summa { 1, 82, 97, + 19, + 152, + 129, + 134, + 97, + 13, + 97, + 86, + 91, + 150, + 149, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, + 0, + 96, + 32, + 130, + 132, + 3, + 18, + 21, + 97, + 19, + 180, + 87, + 96, + 0, + 128, + 253, + 91, + 129, + 81, + 128, + 21, 21, - 226, 129, - 134, + 20, 97, - 19, - 246, - 86, - 91, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, + 16, + 61, + 87, + 96, + 0, + 128, + 253, 254, 162, 100, @@ -11541,38 +10437,38 @@ pub mod summa { 34, 18, 32, - 171, - 123, - 37, - 27, - 15, - 248, - 123, - 164, - 69, + 204, + 157, + 250, + 143, + 60, + 243, 174, - 54, - 211, - 122, - 225, - 6, + 85, + 107, + 174, + 161, + 154, + 177, + 138, + 220, + 133, + 28, + 98, + 126, + 194, + 28, + 191, + 145, + 222, + 72, + 165, + 158, 240, - 242, - 163, - 10, - 31, - 234, - 57, - 46, - 251, - 2, - 116, - 186, - 43, - 253, - 164, - 101, - 1, + 181, + 17, + 3, + 208, 100, 115, 111, @@ -11665,48 +10561,41 @@ pub mod summa { let deployer = ::ethers::contract::ContractDeployer::new(deployer); Ok(deployer) } - ///Calls the contract's `balanceRetriever` (0x989f8de7) function - pub fn balance_retriever( + ///Calls the contract's `addressOwnershipProofs` (0xa3c4bcf8) function + pub fn address_ownership_proofs( &self, - p0: [u8; 32], + p0: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall< M, - ::ethers::core::types::Address, + ( + ::std::string::String, + ::std::string::String, + ::ethers::core::types::Bytes, + ::ethers::core::types::Bytes, + ), > { self.0 - .method_hash([152, 159, 141, 231], p0) + .method_hash([163, 196, 188, 248], p0) .expect("method not found (this should never happen)") } - ///Calls the contract's `cexAddressVerifier` (0x1d6a4326) function - pub fn cex_address_verifier( + ///Calls the contract's `owner` (0x8da5cb5b) function + pub fn owner( &self, - p0: [u8; 32], ) -> ::ethers::contract::builders::ContractCall< M, ::ethers::core::types::Address, > { self.0 - .method_hash([29, 106, 67, 38], p0) + .method_hash([141, 165, 203, 91], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `confirmedAddress` (0x33439d65) function - pub fn confirmed_address( + ///Calls the contract's `ownershipProofByAddress` (0x23eb94a0) function + pub fn ownership_proof_by_address( &self, p0: [u8; 32], - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([51, 67, 157, 101], p0) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `owner` (0x8da5cb5b) function - pub fn owner( - &self, - ) -> ::ethers::contract::builders::ContractCall< - M, - ::ethers::core::types::Address, - > { + ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([141, 165, 203, 91], ()) + .method_hash([35, 235, 148, 160], p0) .expect("method not found (this should never happen)") } ///Calls the contract's `renounceOwnership` (0x715018a6) function @@ -11717,43 +10606,25 @@ pub mod summa { .method_hash([113, 80, 24, 166], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `setAddressOwnershipVerifier` (0x35b59431) function - pub fn set_address_ownership_verifier( - &self, - verifier: ::ethers::core::types::Address, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([53, 181, 148, 49], verifier) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `setBalanceRetriever` (0x5cc04bad) function - pub fn set_balance_retriever( - &self, - retriever: ::ethers::core::types::Address, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([92, 192, 75, 173], retriever) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `submitProofOfAddressOwnership` (0x8f13e252) function + ///Calls the contract's `submitProofOfAddressOwnership` (0xc7ddca0e) function pub fn submit_proof_of_address_ownership( &self, - cex_addresses: ::std::vec::Vec, + address_ownership_proofs: ::std::vec::Vec, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([143, 19, 226, 82], cex_addresses) + .method_hash([199, 221, 202, 14], address_ownership_proofs) .expect("method not found (this should never happen)") } - ///Calls the contract's `submitProofOfSolvency` (0xe2175807) function + ///Calls the contract's `submitProofOfSolvency` (0x413a9f2d) function pub fn submit_proof_of_solvency( &self, - assets: ::std::vec::Vec, mst_root: ::ethers::core::types::U256, + assets: ::std::vec::Vec, proof: ::ethers::core::types::Bytes, timestamp: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([226, 23, 88, 7], (assets, mst_root, proof, timestamp)) + .method_hash([65, 58, 159, 45], (mst_root, assets, proof, timestamp)) .expect("method not found (this should never happen)") } ///Calls the contract's `transferOwnership` (0xf2fde38b) function @@ -11775,33 +10646,13 @@ pub mod summa { .method_hash([230, 145, 173, 51], (proof, public_inputs)) .expect("method not found (this should never happen)") } - ///Gets the contract's `AddressVerifierSet` event - pub fn address_verifier_set_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - AddressVerifierSetFilter, - > { - self.0.event() - } - ///Gets the contract's `BalanceRetrieverSet` event - pub fn balance_retriever_set_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - BalanceRetrieverSetFilter, - > { - self.0.event() - } - ///Gets the contract's `ExchangeAddressesSubmitted` event - pub fn exchange_addresses_submitted_filter( + ///Gets the contract's `AddressOwnershipProofSubmitted` event + pub fn address_ownership_proof_submitted_filter( &self, ) -> ::ethers::contract::builders::Event< ::std::sync::Arc, M, - ExchangeAddressesSubmittedFilter, + AddressOwnershipProofSubmittedFilter, > { self.0.event() } @@ -11815,13 +10666,13 @@ pub mod summa { > { self.0.event() } - ///Gets the contract's `ProofOfSolvencySubmitted` event - pub fn proof_of_solvency_submitted_filter( + ///Gets the contract's `SolvencyProofSubmitted` event + pub fn solvency_proof_submitted_filter( &self, ) -> ::ethers::contract::builders::Event< ::std::sync::Arc, M, - ProofOfSolvencySubmittedFilter, + SolvencyProofSubmittedFilter, > { self.0.event() } @@ -11848,47 +10699,12 @@ pub mod summa { Eq, Hash )] - #[ethevent(name = "AddressVerifierSet", abi = "AddressVerifierSet(bytes32,address)")] - pub struct AddressVerifierSetFilter { - #[ethevent(indexed)] - pub address_type: [u8; 32], - pub verifier: ::ethers::core::types::Address, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethevent( - name = "BalanceRetrieverSet", - abi = "BalanceRetrieverSet(bytes32,address)" - )] - pub struct BalanceRetrieverSetFilter { - #[ethevent(indexed)] - pub asset_type: [u8; 32], - pub balance_retriever: ::ethers::core::types::Address, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] #[ethevent( - name = "ExchangeAddressesSubmitted", - abi = "ExchangeAddressesSubmitted((bytes32,bytes,bytes)[])" + name = "AddressOwnershipProofSubmitted", + abi = "AddressOwnershipProofSubmitted((string,string,bytes,bytes)[])" )] - pub struct ExchangeAddressesSubmittedFilter { - pub addresses: ::std::vec::Vec, + pub struct AddressOwnershipProofSubmittedFilter { + pub address_ownership_proofs: ::std::vec::Vec, } #[derive( Clone, @@ -11921,40 +10737,34 @@ pub mod summa { Hash )] #[ethevent( - name = "ProofOfSolvencySubmitted", - abi = "ProofOfSolvencySubmitted(uint256)" + name = "SolvencyProofSubmitted", + abi = "SolvencyProofSubmitted(uint256,uint256,(string,string,uint256)[])" )] - pub struct ProofOfSolvencySubmittedFilter { + pub struct SolvencyProofSubmittedFilter { #[ethevent(indexed)] + pub timestamp: ::ethers::core::types::U256, pub mst_root: ::ethers::core::types::U256, + pub assets: ::std::vec::Vec, } ///Container type for all of the contract's events #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum SummaEvents { - AddressVerifierSetFilter(AddressVerifierSetFilter), - BalanceRetrieverSetFilter(BalanceRetrieverSetFilter), - ExchangeAddressesSubmittedFilter(ExchangeAddressesSubmittedFilter), + AddressOwnershipProofSubmittedFilter(AddressOwnershipProofSubmittedFilter), OwnershipTransferredFilter(OwnershipTransferredFilter), - ProofOfSolvencySubmittedFilter(ProofOfSolvencySubmittedFilter), + SolvencyProofSubmittedFilter(SolvencyProofSubmittedFilter), } impl ::ethers::contract::EthLogDecode for SummaEvents { fn decode_log( log: &::ethers::core::abi::RawLog, ) -> ::core::result::Result { - if let Ok(decoded) = AddressVerifierSetFilter::decode_log(log) { - return Ok(SummaEvents::AddressVerifierSetFilter(decoded)); - } - if let Ok(decoded) = BalanceRetrieverSetFilter::decode_log(log) { - return Ok(SummaEvents::BalanceRetrieverSetFilter(decoded)); - } - if let Ok(decoded) = ExchangeAddressesSubmittedFilter::decode_log(log) { - return Ok(SummaEvents::ExchangeAddressesSubmittedFilter(decoded)); + if let Ok(decoded) = AddressOwnershipProofSubmittedFilter::decode_log(log) { + return Ok(SummaEvents::AddressOwnershipProofSubmittedFilter(decoded)); } if let Ok(decoded) = OwnershipTransferredFilter::decode_log(log) { return Ok(SummaEvents::OwnershipTransferredFilter(decoded)); } - if let Ok(decoded) = ProofOfSolvencySubmittedFilter::decode_log(log) { - return Ok(SummaEvents::ProofOfSolvencySubmittedFilter(decoded)); + if let Ok(decoded) = SolvencyProofSubmittedFilter::decode_log(log) { + return Ok(SummaEvents::SolvencyProofSubmittedFilter(decoded)); } Err(::ethers::core::abi::Error::InvalidData) } @@ -11962,37 +10772,21 @@ pub mod summa { impl ::core::fmt::Display for SummaEvents { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { match self { - Self::AddressVerifierSetFilter(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::BalanceRetrieverSetFilter(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::ExchangeAddressesSubmittedFilter(element) => { + Self::AddressOwnershipProofSubmittedFilter(element) => { ::core::fmt::Display::fmt(element, f) } Self::OwnershipTransferredFilter(element) => { ::core::fmt::Display::fmt(element, f) } - Self::ProofOfSolvencySubmittedFilter(element) => { + Self::SolvencyProofSubmittedFilter(element) => { ::core::fmt::Display::fmt(element, f) } } } } - impl ::core::convert::From for SummaEvents { - fn from(value: AddressVerifierSetFilter) -> Self { - Self::AddressVerifierSetFilter(value) - } - } - impl ::core::convert::From for SummaEvents { - fn from(value: BalanceRetrieverSetFilter) -> Self { - Self::BalanceRetrieverSetFilter(value) - } - } - impl ::core::convert::From for SummaEvents { - fn from(value: ExchangeAddressesSubmittedFilter) -> Self { - Self::ExchangeAddressesSubmittedFilter(value) + impl ::core::convert::From for SummaEvents { + fn from(value: AddressOwnershipProofSubmittedFilter) -> Self { + Self::AddressOwnershipProofSubmittedFilter(value) } } impl ::core::convert::From for SummaEvents { @@ -12000,38 +10794,12 @@ pub mod summa { Self::OwnershipTransferredFilter(value) } } - impl ::core::convert::From for SummaEvents { - fn from(value: ProofOfSolvencySubmittedFilter) -> Self { - Self::ProofOfSolvencySubmittedFilter(value) + impl ::core::convert::From for SummaEvents { + fn from(value: SolvencyProofSubmittedFilter) -> Self { + Self::SolvencyProofSubmittedFilter(value) } } - ///Container type for all input parameters for the `balanceRetriever` function with signature `balanceRetriever(bytes32)` and selector `0x989f8de7` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "balanceRetriever", abi = "balanceRetriever(bytes32)")] - pub struct BalanceRetrieverCall(pub [u8; 32]); - ///Container type for all input parameters for the `cexAddressVerifier` function with signature `cexAddressVerifier(bytes32)` and selector `0x1d6a4326` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "cexAddressVerifier", abi = "cexAddressVerifier(bytes32)")] - pub struct CexAddressVerifierCall(pub [u8; 32]); - ///Container type for all input parameters for the `confirmedAddress` function with signature `confirmedAddress(bytes32)` and selector `0x33439d65` + ///Container type for all input parameters for the `addressOwnershipProofs` function with signature `addressOwnershipProofs(uint256)` and selector `0xa3c4bcf8` #[derive( Clone, ::ethers::contract::EthCall, @@ -12042,8 +10810,8 @@ pub mod summa { Eq, Hash )] - #[ethcall(name = "confirmedAddress", abi = "confirmedAddress(bytes32)")] - pub struct ConfirmedAddressCall(pub [u8; 32]); + #[ethcall(name = "addressOwnershipProofs", abi = "addressOwnershipProofs(uint256)")] + pub struct AddressOwnershipProofsCall(pub ::ethers::core::types::U256); ///Container type for all input parameters for the `owner` function with signature `owner()` and selector `0x8da5cb5b` #[derive( Clone, @@ -12057,20 +10825,7 @@ pub mod summa { )] #[ethcall(name = "owner", abi = "owner()")] pub struct OwnerCall; - ///Container type for all input parameters for the `renounceOwnership` function with signature `renounceOwnership()` and selector `0x715018a6` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "renounceOwnership", abi = "renounceOwnership()")] - pub struct RenounceOwnershipCall; - ///Container type for all input parameters for the `setAddressOwnershipVerifier` function with signature `setAddressOwnershipVerifier(address)` and selector `0x35b59431` + ///Container type for all input parameters for the `ownershipProofByAddress` function with signature `ownershipProofByAddress(bytes32)` and selector `0x23eb94a0` #[derive( Clone, ::ethers::contract::EthCall, @@ -12082,13 +10837,11 @@ pub mod summa { Hash )] #[ethcall( - name = "setAddressOwnershipVerifier", - abi = "setAddressOwnershipVerifier(address)" + name = "ownershipProofByAddress", + abi = "ownershipProofByAddress(bytes32)" )] - pub struct SetAddressOwnershipVerifierCall { - pub verifier: ::ethers::core::types::Address, - } - ///Container type for all input parameters for the `setBalanceRetriever` function with signature `setBalanceRetriever(address)` and selector `0x5cc04bad` + pub struct OwnershipProofByAddressCall(pub [u8; 32]); + ///Container type for all input parameters for the `renounceOwnership` function with signature `renounceOwnership()` and selector `0x715018a6` #[derive( Clone, ::ethers::contract::EthCall, @@ -12099,11 +10852,9 @@ pub mod summa { Eq, Hash )] - #[ethcall(name = "setBalanceRetriever", abi = "setBalanceRetriever(address)")] - pub struct SetBalanceRetrieverCall { - pub retriever: ::ethers::core::types::Address, - } - ///Container type for all input parameters for the `submitProofOfAddressOwnership` function with signature `submitProofOfAddressOwnership((bytes32,bytes,bytes)[])` and selector `0x8f13e252` + #[ethcall(name = "renounceOwnership", abi = "renounceOwnership()")] + pub struct RenounceOwnershipCall; + ///Container type for all input parameters for the `submitProofOfAddressOwnership` function with signature `submitProofOfAddressOwnership((string,string,bytes,bytes)[])` and selector `0xc7ddca0e` #[derive( Clone, ::ethers::contract::EthCall, @@ -12116,12 +10867,12 @@ pub mod summa { )] #[ethcall( name = "submitProofOfAddressOwnership", - abi = "submitProofOfAddressOwnership((bytes32,bytes,bytes)[])" + abi = "submitProofOfAddressOwnership((string,string,bytes,bytes)[])" )] pub struct SubmitProofOfAddressOwnershipCall { - pub cex_addresses: ::std::vec::Vec, + pub address_ownership_proofs: ::std::vec::Vec, } - ///Container type for all input parameters for the `submitProofOfSolvency` function with signature `submitProofOfSolvency((bytes32,uint256,bytes[],bytes)[],uint256,bytes,uint256)` and selector `0xe2175807` + ///Container type for all input parameters for the `submitProofOfSolvency` function with signature `submitProofOfSolvency(uint256,(string,string,uint256)[],bytes,uint256)` and selector `0x413a9f2d` #[derive( Clone, ::ethers::contract::EthCall, @@ -12134,11 +10885,11 @@ pub mod summa { )] #[ethcall( name = "submitProofOfSolvency", - abi = "submitProofOfSolvency((bytes32,uint256,bytes[],bytes)[],uint256,bytes,uint256)" + abi = "submitProofOfSolvency(uint256,(string,string,uint256)[],bytes,uint256)" )] pub struct SubmitProofOfSolvencyCall { - pub assets: ::std::vec::Vec, pub mst_root: ::ethers::core::types::U256, + pub assets: ::std::vec::Vec, pub proof: ::ethers::core::types::Bytes, pub timestamp: ::ethers::core::types::U256, } @@ -12176,13 +10927,10 @@ pub mod summa { ///Container type for all of the contract's call #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum SummaCalls { - BalanceRetriever(BalanceRetrieverCall), - CexAddressVerifier(CexAddressVerifierCall), - ConfirmedAddress(ConfirmedAddressCall), + AddressOwnershipProofs(AddressOwnershipProofsCall), Owner(OwnerCall), + OwnershipProofByAddress(OwnershipProofByAddressCall), RenounceOwnership(RenounceOwnershipCall), - SetAddressOwnershipVerifier(SetAddressOwnershipVerifierCall), - SetBalanceRetriever(SetBalanceRetrieverCall), SubmitProofOfAddressOwnership(SubmitProofOfAddressOwnershipCall), SubmitProofOfSolvency(SubmitProofOfSolvencyCall), TransferOwnership(TransferOwnershipCall), @@ -12194,44 +10942,26 @@ pub mod summa { ) -> ::core::result::Result { let data = data.as_ref(); if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::BalanceRetriever(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::CexAddressVerifier(decoded)); - } - if let Ok(decoded) - = ::decode( + = ::decode( data, ) { - return Ok(Self::ConfirmedAddress(decoded)); + return Ok(Self::AddressOwnershipProofs(decoded)); } if let Ok(decoded) = ::decode(data) { return Ok(Self::Owner(decoded)); } if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::RenounceOwnership(decoded)); - } - if let Ok(decoded) - = ::decode( + = ::decode( data, ) { - return Ok(Self::SetAddressOwnershipVerifier(decoded)); + return Ok(Self::OwnershipProofByAddress(decoded)); } if let Ok(decoded) - = ::decode( + = ::decode( data, ) { - return Ok(Self::SetBalanceRetriever(decoded)); + return Ok(Self::RenounceOwnership(decoded)); } if let Ok(decoded) = ::decode( @@ -12261,23 +10991,14 @@ pub mod summa { impl ::ethers::core::abi::AbiEncode for SummaCalls { fn encode(self) -> Vec { match self { - Self::BalanceRetriever(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::CexAddressVerifier(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::ConfirmedAddress(element) => { + Self::AddressOwnershipProofs(element) => { ::ethers::core::abi::AbiEncode::encode(element) } Self::Owner(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::RenounceOwnership(element) => { + Self::OwnershipProofByAddress(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::SetAddressOwnershipVerifier(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::SetBalanceRetriever(element) => { + Self::RenounceOwnership(element) => { ::ethers::core::abi::AbiEncode::encode(element) } Self::SubmitProofOfAddressOwnership(element) => { @@ -12298,19 +11019,14 @@ pub mod summa { impl ::core::fmt::Display for SummaCalls { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { match self { - Self::BalanceRetriever(element) => ::core::fmt::Display::fmt(element, f), - Self::CexAddressVerifier(element) => { + Self::AddressOwnershipProofs(element) => { ::core::fmt::Display::fmt(element, f) } - Self::ConfirmedAddress(element) => ::core::fmt::Display::fmt(element, f), Self::Owner(element) => ::core::fmt::Display::fmt(element, f), - Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), - Self::SetAddressOwnershipVerifier(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::SetBalanceRetriever(element) => { + Self::OwnershipProofByAddress(element) => { ::core::fmt::Display::fmt(element, f) } + Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), Self::SubmitProofOfAddressOwnership(element) => { ::core::fmt::Display::fmt(element, f) } @@ -12322,19 +11038,9 @@ pub mod summa { } } } - impl ::core::convert::From for SummaCalls { - fn from(value: BalanceRetrieverCall) -> Self { - Self::BalanceRetriever(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: CexAddressVerifierCall) -> Self { - Self::CexAddressVerifier(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: ConfirmedAddressCall) -> Self { - Self::ConfirmedAddress(value) + impl ::core::convert::From for SummaCalls { + fn from(value: AddressOwnershipProofsCall) -> Self { + Self::AddressOwnershipProofs(value) } } impl ::core::convert::From for SummaCalls { @@ -12342,21 +11048,16 @@ pub mod summa { Self::Owner(value) } } + impl ::core::convert::From for SummaCalls { + fn from(value: OwnershipProofByAddressCall) -> Self { + Self::OwnershipProofByAddress(value) + } + } impl ::core::convert::From for SummaCalls { fn from(value: RenounceOwnershipCall) -> Self { Self::RenounceOwnership(value) } } - impl ::core::convert::From for SummaCalls { - fn from(value: SetAddressOwnershipVerifierCall) -> Self { - Self::SetAddressOwnershipVerifier(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: SetBalanceRetrieverCall) -> Self { - Self::SetBalanceRetriever(value) - } - } impl ::core::convert::From for SummaCalls { fn from(value: SubmitProofOfAddressOwnershipCall) -> Self { Self::SubmitProofOfAddressOwnership(value) @@ -12377,19 +11078,7 @@ pub mod summa { Self::VerifyZkProof(value) } } - ///Container type for all return fields from the `balanceRetriever` function with signature `balanceRetriever(bytes32)` and selector `0x989f8de7` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct BalanceRetrieverReturn(pub ::ethers::core::types::Address); - ///Container type for all return fields from the `cexAddressVerifier` function with signature `cexAddressVerifier(bytes32)` and selector `0x1d6a4326` + ///Container type for all return fields from the `addressOwnershipProofs` function with signature `addressOwnershipProofs(uint256)` and selector `0xa3c4bcf8` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12400,8 +11089,13 @@ pub mod summa { Eq, Hash )] - pub struct CexAddressVerifierReturn(pub ::ethers::core::types::Address); - ///Container type for all return fields from the `confirmedAddress` function with signature `confirmedAddress(bytes32)` and selector `0x33439d65` + pub struct AddressOwnershipProofsReturn { + pub cex_address: ::std::string::String, + pub chain: ::std::string::String, + pub signature: ::ethers::core::types::Bytes, + pub message: ::ethers::core::types::Bytes, + } + ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12412,8 +11106,8 @@ pub mod summa { Eq, Hash )] - pub struct ConfirmedAddressReturn(pub bool); - ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` + pub struct OwnerReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `ownershipProofByAddress` function with signature `ownershipProofByAddress(bytes32)` and selector `0x23eb94a0` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12424,7 +11118,7 @@ pub mod summa { Eq, Hash )] - pub struct OwnerReturn(pub ::ethers::core::types::Address); + pub struct OwnershipProofByAddressReturn(pub ::ethers::core::types::U256); ///Container type for all return fields from the `verifyZkProof` function with signature `verifyZkProof(bytes,uint256[])` and selector `0xe691ad33` #[derive( Clone, @@ -12437,7 +11131,7 @@ pub mod summa { Hash )] pub struct VerifyZkProofReturn(pub bool); - ///`OwnedAddress(bytes32,bytes,bytes)` + ///`AddressOwnershipProof(string,string,bytes,bytes)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12448,12 +11142,13 @@ pub mod summa { Eq, Hash )] - pub struct OwnedAddress { - pub address_type: [u8; 32], - pub cex_address: ::ethers::core::types::Bytes, - pub ownership_proof: ::ethers::core::types::Bytes, + pub struct AddressOwnershipProof { + pub cex_address: ::std::string::String, + pub chain: ::std::string::String, + pub signature: ::ethers::core::types::Bytes, + pub message: ::ethers::core::types::Bytes, } - ///`OwnedAsset(bytes32,uint256,bytes[],bytes)` + ///`Asset(string,string,uint256)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12464,10 +11159,9 @@ pub mod summa { Eq, Hash )] - pub struct OwnedAsset { - pub asset_type: [u8; 32], - pub amount_to_prove: ::ethers::core::types::U256, - pub addresses: ::std::vec::Vec<::ethers::core::types::Bytes>, - pub balance_retriever_args: ::ethers::core::types::Bytes, + pub struct Asset { + pub asset_name: ::std::string::String, + pub chain: ::std::string::String, + pub amount: ::ethers::core::types::U256, } } diff --git a/backend/src/contracts/generated/mock_erc20.rs b/backend/src/contracts/mock/mock_erc20.rs similarity index 100% rename from backend/src/contracts/generated/mock_erc20.rs rename to backend/src/contracts/mock/mock_erc20.rs diff --git a/backend/src/contracts/mock/mod.rs b/backend/src/contracts/mock/mod.rs new file mode 100644 index 00000000..dbac9b71 --- /dev/null +++ b/backend/src/contracts/mock/mod.rs @@ -0,0 +1 @@ +pub mod mock_erc20; diff --git a/backend/src/contracts/mod.rs b/backend/src/contracts/mod.rs index 8086c83b..54378e10 100644 --- a/backend/src/contracts/mod.rs +++ b/backend/src/contracts/mod.rs @@ -1,3 +1,4 @@ pub mod generated; +pub mod mock; pub(crate) mod signer; pub(crate) mod tests; diff --git a/backend/src/contracts/signer.rs b/backend/src/contracts/signer.rs index 2f658f24..e2d78646 100644 --- a/backend/src/contracts/signer.rs +++ b/backend/src/contracts/signer.rs @@ -13,7 +13,7 @@ use std::{ error::Error, fs::File, io::BufReader, path::Path, str::FromStr, sync::Arc, time::Duration, }; -use super::generated::summa_contract::{OwnedAddress, OwnedAsset}; +use super::generated::summa_contract::{AddressOwnershipProof, Asset}; #[derive(Debug)] pub struct SummaSigner { @@ -99,7 +99,7 @@ impl SummaSigner { pub async fn submit_proof_of_address_ownership( &self, - cex_addresses: Vec, + cex_addresses: Vec, ) -> Result<(), Box> { let submit_proof_of_address_ownership = &self .summa_contract @@ -113,15 +113,14 @@ impl SummaSigner { pub async fn submit_proof_of_solvency( &self, - owned_assets: Vec, mst_root: ethers::types::U256, + assets: Vec, proof: ethers::types::Bytes, timestamp: ethers::types::U256, ) -> Result<(), Box> { - let submit_proof_of_solvency_call = - &self - .summa_contract - .submit_proof_of_solvency(owned_assets, mst_root, proof, timestamp); + let submit_proof_of_solvency_call = &self + .summa_contract + .submit_proof_of_solvency(mst_root, assets, proof, timestamp); let tx = submit_proof_of_solvency_call.send().await.unwrap(); tx.await.unwrap(); diff --git a/backend/src/contracts/tests.rs b/backend/src/contracts/tests.rs index 03831db2..fe9e8845 100644 --- a/backend/src/contracts/tests.rs +++ b/backend/src/contracts/tests.rs @@ -9,7 +9,7 @@ use ethers::{ }; use tokio::time; -use crate::contracts::generated::mock_erc20::{MockERC20, MOCKERC20_ABI, MOCKERC20_BYTECODE}; +use crate::contracts::mock::mock_erc20::{MockERC20, MOCKERC20_ABI, MOCKERC20_BYTECODE}; // Setup test conditions on the anvil instance pub async fn initialize_anvil() -> ( @@ -48,7 +48,7 @@ pub async fn initialize_anvil() -> ( // Send RPC requests with `anvil_setBalance` method via provider to set ETH balance of `cex_addr_1` and `cex_addr_2` // This is for meeting `proof_of_solvency` test conditions - for addr in [cex_addr_1, cex_addr_2].to_vec() { + for addr in [cex_addr_1, cex_addr_2].iter().copied() { let _res = client .provider() .request::<(H160, U256), ()>("anvil_setBalance", (addr, U256::from(278432))) @@ -67,7 +67,7 @@ pub async fn initialize_anvil() -> ( time::sleep(Duration::from_millis(500)).await; - return (anvil, cex_addr_1, cex_addr_2, client, mock_erc20); + (anvil, cex_addr_1, cex_addr_2, client, mock_erc20) } mod test { @@ -85,15 +85,13 @@ mod test { use crate::contracts::{ generated::{ - erc20_balance_retriever::ERC20BalanceRetriever, - eth_balance_retriever::{self, ETHBalanceRetriever}, - evm_address_verifier::{self, EVMAddressVerifier}, summa_contract::{ - ExchangeAddressesSubmittedFilter, OwnedAddress, OwnedAsset, - ProofOfSolvencySubmittedFilter, Summa, + AddressOwnershipProof, AddressOwnershipProofSubmittedFilter, Asset, + SolvencyProofSubmittedFilter, Summa, }, verifier::SolvencyVerifier, }, + mock::mock_erc20, signer::SummaSigner, tests::initialize_anvil, }; @@ -121,7 +119,7 @@ mod test { #[tokio::test] async fn test_submit_proof_of_solvency() { - let (anvil, cex_addr_1, cex_addr_2, client, mock_erc20) = initialize_anvil().await; + let (anvil, cex_addr_1, cex_addr_2, client, _mock_erc20) = initialize_anvil().await; let verifer_contract = SolvencyVerifier::deploy(Arc::clone(&client), ()) .unwrap() @@ -135,24 +133,6 @@ mod test { .await .unwrap(); - let evm_address_verifier = EVMAddressVerifier::deploy(Arc::clone(&client), ()) - .unwrap() - .send() - .await - .unwrap(); - - let eth_balance_retriever = ETHBalanceRetriever::deploy(Arc::clone(&client), ()) - .unwrap() - .send() - .await - .unwrap(); - - let erc20_balance_retriever = ERC20BalanceRetriever::deploy(Arc::clone(&client), ()) - .unwrap() - .send() - .await - .unwrap(); - let summa_signer = SummaSigner::new( &vec![ "0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e", @@ -164,34 +144,18 @@ mod test { summa_contract.address(), ); - summa_contract - .set_address_ownership_verifier(evm_address_verifier.address()) - .send() - .await - .unwrap(); - - summa_contract - .set_balance_retriever(eth_balance_retriever.address()) - .send() - .await - .unwrap(); - - summa_contract - .set_balance_retriever(erc20_balance_retriever.address()) - .send() - .await - .unwrap(); - - let owned_addresses = vec![OwnedAddress { - address_type: keccak256("EVM"), - cex_address: cex_addr_1.encode().into(), - ownership_proof: - ("0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b").parse().unwrap() - },OwnedAddress { - address_type: keccak256("EVM"), - cex_address: cex_addr_2.encode().into(), - ownership_proof: - ("0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c").parse().unwrap() + let owned_addresses = vec![AddressOwnershipProof { + chain: "ETH".to_string(), + cex_address: cex_addr_1.to_string(), + signature: + ("0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b").parse().unwrap(), + message: "Summa proof of solvency for CryptoExchange".encode().into(), + },AddressOwnershipProof { + chain: "ETH".to_string(), + cex_address: cex_addr_2.to_string(), + signature: + ("0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c").parse().unwrap(), + message: "Summa proof of solvency for CryptoExchange".encode().into(), }]; let result = summa_signer .submit_proof_of_address_ownership(owned_addresses) @@ -200,7 +164,7 @@ mod test { assert_eq!(result.is_ok(), true); let logs = summa_contract - .exchange_addresses_submitted_filter() + .address_ownership_proof_submitted_filter() .query() .await .unwrap(); @@ -208,45 +172,43 @@ mod test { assert_eq!(logs.len(), 1); assert_eq!( logs[0], - ExchangeAddressesSubmittedFilter { - addresses: vec![OwnedAddress { - address_type: keccak256("EVM"), - cex_address: cex_addr_1.encode().into(), - ownership_proof: - ("0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b").parse().unwrap() - },OwnedAddress { - address_type: keccak256("EVM"), - cex_address: cex_addr_2.encode().into(), - ownership_proof: - ("0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c").parse().unwrap() - }, + AddressOwnershipProofSubmittedFilter { + address_ownership_proofs: vec![AddressOwnershipProof { + chain: "ETH".to_string(), + cex_address: cex_addr_1.to_string(), + signature: + ("0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b").parse().unwrap(), + message: "Summa proof of solvency for CryptoExchange".encode().into(), + },AddressOwnershipProof { + chain: "ETH".to_string(), + cex_address: cex_addr_2.to_string(), + signature: + ("0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c").parse().unwrap(), + message: "Summa proof of solvency for CryptoExchange".encode().into(), + }, ], } ); - let owned_assets = vec![ - OwnedAsset { - asset_type: keccak256("ETH"), - addresses: vec![cex_addr_1.encode().into(), cex_addr_2.encode().into()], - amount_to_prove: U256::from(556863), - balance_retriever_args: Bytes::new(), - }, - OwnedAsset { - asset_type: keccak256("ERC20"), - addresses: vec![cex_addr_2.encode().into()], - amount_to_prove: U256::from(556863), - balance_retriever_args: mock_erc20.address().encode().into(), - }, - ]; - let path = "../zk_prover/examples/proof_solidity_calldata.json"; let json_data = read_to_string(path).expect("Unable to read the file"); let calldata: ProofSolidityCallData = from_str(&json_data).unwrap(); let result = summa_signer .submit_proof_of_solvency( - owned_assets, calldata.public_inputs[0], + vec![ + Asset { + asset_name: "ETH".to_string(), + chain: "ETH".to_string(), + amount: U256::from(556863), + }, + Asset { + asset_name: "USDT".to_string(), + chain: "ETH".to_string(), + amount: U256::from(556863), + }, + ], calldata.proof.parse().unwrap(), U256::from(0), ) @@ -255,7 +217,7 @@ mod test { assert_eq!(result.is_ok(), true); let logs = summa_contract - .proof_of_solvency_submitted_filter() + .solvency_proof_submitted_filter() .query() .await .unwrap(); @@ -263,10 +225,23 @@ mod test { assert_eq!(logs.len(), 1); assert_eq!( logs[0], - ProofOfSolvencySubmittedFilter { + SolvencyProofSubmittedFilter { + timestamp: U256::from(0), mst_root: "0x2E021D9BF99C5BD7267488B6A7A5CF5F7D00222A41B6A9B971899C44089E0C5" .parse() .unwrap(), + assets: vec![ + Asset { + asset_name: "ETH".to_string(), + chain: "ETH".to_string(), + amount: U256::from(556863) + }, + Asset { + asset_name: "USDT".to_string(), + chain: "ETH".to_string(), + amount: U256::from(556863) + } + ], } ); diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts index e78846ac..9c86b159 100644 --- a/contracts/scripts/deploy.ts +++ b/contracts/scripts/deploy.ts @@ -54,10 +54,6 @@ async function main() { //Copy the ABIs from `artifacts/src/*` to `backend/src/contracts/*` copyAbi(fs, "Summa", "Summa"); copyAbi(fs, "SolvencyVerifier", "Verifier"); - copyAbi(fs, "EVMAddressVerifier", "EVMAddressVerifier"); - copyAbi(fs, "ETHBalanceRetriever", "ETHBalanceRetriever"); - copyAbi(fs, "ERC20BalanceRetriever", "ERC20BalanceRetriever"); - copyAbi(fs, "mock/MockERC20", "MockERC20"); } // We recommend this pattern to be able to use async/await everywhere diff --git a/contracts/src/ERC20BalanceRetriever.sol b/contracts/src/ERC20BalanceRetriever.sol deleted file mode 100644 index efa36a3f..00000000 --- a/contracts/src/ERC20BalanceRetriever.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -import "./interfaces/IBalanceRetriever.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -contract ERC20BalanceRetriever is IBalanceRetriever { - /** - * Gets the balance of an address for a given ERC20 token - * @param _address CEX address that holds the ERC20 token - * @param args should contain the address of the ERC20 contract encoded as bytes - * @param timestamp is reserved for future use - */ - function getAddressBalance( - bytes memory _address, - bytes memory args, - uint256 timestamp - ) external view override returns (uint256) { - address erc20Address = abi.decode(args, (address)); - return IERC20(erc20Address).balanceOf(abi.decode(_address, (address))); - } - - function getAssetType() external pure override returns (bytes32) { - return keccak256("ERC20"); - } -} diff --git a/contracts/src/ETHBalanceRetriever.sol b/contracts/src/ETHBalanceRetriever.sol deleted file mode 100644 index a8066a79..00000000 --- a/contracts/src/ETHBalanceRetriever.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -import "./interfaces/IBalanceRetriever.sol"; - -contract ETHBalanceRetriever is IBalanceRetriever { - /** - * Gets the ETH balance of an address - * @param _address CEX address that holds ETH - * @param args not used for ETH - * @param timestamp is reserved for future use - */ - function getAddressBalance( - bytes memory _address, - bytes memory args, - uint256 timestamp - ) external view override returns (uint256) { - return abi.decode(_address, (address)).balance; - } - - function getAssetType() external pure override returns (bytes32) { - return keccak256("ETH"); - } -} diff --git a/contracts/src/EVMAddressVerifier.sol b/contracts/src/EVMAddressVerifier.sol deleted file mode 100644 index f35ab176..00000000 --- a/contracts/src/EVMAddressVerifier.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -import "./interfaces/IAddressOwnershipVerifier.sol"; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; - -contract EVMAddressVerifier is IAddressOwnershipVerifier { - using ECDSA for bytes32; - - function verifyAddressOwnership( - bytes memory cexAddress, - bytes memory addressOwnershipProof - ) external pure override returns (bool) { - address addressToVerify = abi.decode(cexAddress, (address)); - address recoveredPubKey = keccak256( - abi.encode("Summa proof of solvency for CryptoExchange") - ).toEthSignedMessageHash().recover(addressOwnershipProof); - return addressToVerify == recoveredPubKey; - } - - function getAddressType() external pure override returns (bytes32) { - return keccak256("EVM"); - } -} diff --git a/contracts/src/Summa.sol b/contracts/src/Summa.sol index 3d9e13a9..2e8e2b17 100644 --- a/contracts/src/Summa.sol +++ b/contracts/src/Summa.sol @@ -9,169 +9,129 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./interfaces/IVerifier.sol"; -import "./interfaces/IBalanceRetriever.sol"; -import "./interfaces/IAddressOwnershipVerifier.sol"; contract Summa is Ownable { - using ECDSA for bytes32; - - IVerifier private immutable verifier; - - //A mapping of CEX address hashes to a boolean indicating whether the address has been confirmed - mapping(bytes32 => bool) public confirmedAddress; - - //A mapping of asset type hash to the balance retriever smart contract for that type of asset - mapping(bytes32 => IBalanceRetriever) public balanceRetriever; - //A mapping of address type hash to the address ownership verifier smart contract for that type of address - mapping(bytes32 => IAddressOwnershipVerifier) public cexAddressVerifier; - /** - * @dev Struct representing an address owned by the CEX - * @param addressType The type of the address by chain (e.g., EVM, BTC) - * @param cexAddress The address owned by the CEX - * @param ownershipProof The data needed to verify the address ownership (e.g., in case of EVM, a signature and a message signed by the address, encoded as bytes) + * @dev Struct representing an address ownership proof submitted by the CEX + * @param cexAddress The address owned by the CEX (submitted as a string, as it can be a non-EVM address) + * @param chain The name of the chain name where the address belongs (e.g., ETH, BTC) + * @param signature The signature of the message signed by the address public key + * @param message The message signed by the address public key */ - struct OwnedAddress { - bytes32 addressType; - bytes cexAddress; - bytes ownershipProof; + struct AddressOwnershipProof { + string cexAddress; + string chain; + bytes signature; + bytes message; } /** * @dev Struct representing an asset owned by the CEX - * @param assetType The type of the asset (e.g., a hash of the asset kind, like keccak256("ETH"), keccak256("BTC", keccak256("ERC20") - * @param amountToProve The amount of the asset that the CEX wants to prove to own - * @param addresses CEX addresses that control the @param asset - * @param balanceRetrieverArgs Additional arguments needed to get the balance (e.g., in case of ERC20, the address of the ERC20 contract) + * @param assetName The name of the asset + * @param chain The name of the chain name where the asset lives (e.g., ETH, BTC) + * @param amount The total amount of the asset that the CEX holds on a given chain + */ + struct Asset { + string assetName; + string chain; + uint256 amount; + } + + /** + * @dev Zero-knowledge proof and its inputs + * @param proof zero-knowledge proof + * @param publicInputs proof inputs */ - struct OwnedAsset { - bytes32 assetType; - uint256 amountToProve; - bytes[] addresses; - bytes balanceRetrieverArgs; + struct ZKProof { + bytes proof; + uint256[] publicInputs; } - event AddressVerifierSet(bytes32 indexed addressType, address verifier); - event BalanceRetrieverSet( - bytes32 indexed assetType, - address balanceRetriever + IVerifier private immutable verifier; + + //All address ownership proofs submitted by the CEX + AddressOwnershipProof[] public addressOwnershipProofs; + + //Convenience mapping to check if an address has already been verified + mapping(bytes32 => uint256) public ownershipProofByAddress; + + event AddressOwnershipProofSubmitted( + AddressOwnershipProof[] addressOwnershipProofs + ); + event SolvencyProofSubmitted( + uint256 indexed timestamp, + uint256 mstRoot, + Asset[] assets ); - event ExchangeAddressesSubmitted(OwnedAddress[] addresses); - event ProofOfSolvencySubmitted(uint256 indexed mstRoot); constructor(IVerifier _verifier) { verifier = _verifier; } /** - * @dev Set the address of the asset balance retriever for a given asset type - * @param retriever The address of the asset balance retriever smart contract + * @dev Submit an optimistic proof of address ownership for a CEX. The proof is subject to an off-chain verification as it's not feasible to verify the signatures of non-EVM chains in an Ethereum smart contract. + * @param _addressOwnershipProofs The list of address ownership proofs */ - function setBalanceRetriever(address retriever) public onlyOwner { - require(retriever != address(0), "Invalid balance retriever"); - IBalanceRetriever _balanceRetriever = IBalanceRetriever(retriever); - bytes32 assetType = _balanceRetriever.getAssetType(); - require(assetType != bytes32(0), "Invalid asset type"); - balanceRetriever[assetType] = _balanceRetriever; - emit BalanceRetrieverSet(assetType, retriever); - } - - /** - * @dev Set the address of the address ownership verifier for a given asset type - * @param _verifier The address of the address ownership verifier smart contract - */ - function setAddressOwnershipVerifier(address _verifier) public onlyOwner { - require(_verifier != address(0), "Invalid address verifier"); - IAddressOwnershipVerifier addressOwnershipVerifier = IAddressOwnershipVerifier( - _verifier - ); - bytes32 addressType = addressOwnershipVerifier.getAddressType(); - require(addressType != bytes32(0), "Invalid address type"); - cexAddressVerifier[addressType] = addressOwnershipVerifier; - emit AddressVerifierSet(addressType, _verifier); - } - function submitProofOfAddressOwnership( - OwnedAddress[] memory _cexAddresses - ) public { - for (uint i = 0; i < _cexAddresses.length; i++) { - bytes32 addressHash = keccak256(_cexAddresses[i].cexAddress); - require(!confirmedAddress[addressHash], "Address already verified"); - confirmedAddress[addressHash] = true; - require( - address(cexAddressVerifier[_cexAddresses[i].addressType]) != - address(0), - "Address verifier not set for this type of address" + AddressOwnershipProof[] memory _addressOwnershipProofs + ) public onlyOwner { + for (uint i = 0; i < _addressOwnershipProofs.length; i++) { + bytes32 addressHash = keccak256( + abi.encode(_addressOwnershipProofs[i].cexAddress) ); + uint256 index = ownershipProofByAddress[addressHash]; + require(index == 0, "Address already verified"); + ownershipProofByAddress[addressHash] = i + 1; + addressOwnershipProofs.push(_addressOwnershipProofs[i]); require( - cexAddressVerifier[_cexAddresses[i].addressType] - .verifyAddressOwnership( - _cexAddresses[i].cexAddress, - _cexAddresses[i].ownershipProof - ), - "Invalid signer" + bytes(_addressOwnershipProofs[i].cexAddress).length != 0 && + bytes(_addressOwnershipProofs[i].chain).length != 0 && + _addressOwnershipProofs[i].signature.length != 0 && + _addressOwnershipProofs[i].message.length != 0, + "Invalid proof of address ownership" ); } - emit ExchangeAddressesSubmitted(_cexAddresses); + emit AddressOwnershipProofSubmitted(_addressOwnershipProofs); } /** * @dev Submit proof of solvency for a CEX - * @param assets Assets owned by CEX - * @param mstRoot The root of the Merkle sum tree + * @param mstRoot Merkle sum tree root of the CEX's liabilities + * @param assets The list of assets owned by the CEX * @param proof The ZK proof - * @param timestamp The timestamp at which the CEX took the snapshot of its liabilites + * @param timestamp The timestamp at which the CEX took the snapshot of its assets and liabilites */ function submitProofOfSolvency( - OwnedAsset[] memory assets, uint256 mstRoot, + Asset[] memory assets, bytes memory proof, uint256 timestamp - ) public { - uint256[] memory totalAssetSum = new uint256[](assets.length); - - for (uint i = 0; i < assets.length; i++) { - for (uint j = 0; j < assets[i].addresses.length; j++) { - require( - confirmedAddress[keccak256(assets[i].addresses[j])], - "Address ownership not verified" - ); - require( - balanceRetriever[assets[i].assetType] != - IBalanceRetriever(address(0)), - "Balance retriever not set for this type of asset" - ); - totalAssetSum[i] += balanceRetriever[assets[i].assetType] - .getAddressBalance( - assets[i].addresses[j], - assets[i].balanceRetrieverArgs, - timestamp - ); - } - require( - assets[i].amountToProve <= totalAssetSum[i], - "Actual balance is less than the amount to prove" - ); - } - + ) public onlyOwner { + require( + addressOwnershipProofs.length != 0, + "The CEX has not submitted any address ownership proofs" + ); uint256[] memory inputs = new uint256[](assets.length + 1); inputs[0] = mstRoot; - for (uint i = 0; i < assets.length; i++) { - inputs[i + 1] = assets[i].amountToProve; + require( + bytes(assets[i].chain).length != 0 && + bytes(assets[i].assetName).length != 0, + "Invalid asset" + ); + inputs[i + 1] = assets[i].amount; } - // Verify ZK proof - require(verifyZkProof(proof, inputs), "Invalid zk proof"); + require(verifyZkProof(proof, inputs), "Invalid ZK proof"); - emit ProofOfSolvencySubmitted(mstRoot); + emit SolvencyProofSubmitted(timestamp, inputs[0], assets); } function verifyZkProof( bytes memory proof, uint256[] memory publicInputs - ) public view returns (bool) { + ) public view onlyOwner returns (bool) { return verifier.verify(publicInputs, proof); } } diff --git a/contracts/src/interfaces/IAddressOwnershipVerifier.sol b/contracts/src/interfaces/IAddressOwnershipVerifier.sol deleted file mode 100644 index 11632aa3..00000000 --- a/contracts/src/interfaces/IAddressOwnershipVerifier.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -/** - * @dev Interface for address ownership verifier contracts - */ -interface IAddressOwnershipVerifier { - /** - * @dev Get the type of the address by chain (e.g., EVM, BTC) - */ - function getAddressType() external view returns (bytes32); - - /** - * @dev Verify the ownership of an address. - * @param cexAddress The address to verify (e.g., in case of ETH, the ETH address) - * @param addressOwnershipProof The data needed to verify the address ownership (e.g., in case of ETH, a signature and a message signed by the address, encoded as bytes) - */ - function verifyAddressOwnership( - bytes memory cexAddress, - bytes memory addressOwnershipProof - ) external view returns (bool); -} diff --git a/contracts/src/interfaces/IBalanceRetriever.sol b/contracts/src/interfaces/IBalanceRetriever.sol deleted file mode 100644 index dbe2b441..00000000 --- a/contracts/src/interfaces/IBalanceRetriever.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -/** - * @dev Interface for asset balance retriever contracts - */ -interface IBalanceRetriever { - /** - * @dev Get the asset type (e.g., ETH, ERC20, etc.) - */ - function getAssetType() external view returns (bytes32); - - /** - * @dev Get the balance of an address for a given asset type. Gets address balance for ETH, balanceOf() for ERC20, or calls an oracle for non-native assets - * @param _address The address to check the balance of - * @param args Additional arguments needed to get the balance (e.g., in case of ERC20, the address of the ERC20 contract) - * @param timestamp The timestamp at which the balance should be queried - * @return The balance of the address for the given asset type - */ - function getAddressBalance( - bytes memory _address, - bytes memory args, - uint256 timestamp - ) external view returns (uint256); -} diff --git a/contracts/src/mock/InvalidAddressVerifier.sol b/contracts/src/mock/InvalidAddressVerifier.sol deleted file mode 100644 index 7a36f379..00000000 --- a/contracts/src/mock/InvalidAddressVerifier.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -import "./../interfaces/IAddressOwnershipVerifier.sol"; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; - -contract InvalidAddressVerifier is IAddressOwnershipVerifier { - using ECDSA for bytes32; - - function verifyAddressOwnership( - bytes memory cexAddress, - bytes memory addressOwnershipProof - ) external pure override returns (bool) { - address addressToVerify = abi.decode(cexAddress, (address)); - address recoveredPubKey = keccak256( - abi.encode("Summa proof of solvency for CryptoExchange") - ).toEthSignedMessageHash().recover(addressOwnershipProof); - return addressToVerify == recoveredPubKey; - } - - function getAddressType() external pure override returns (bytes32) { - return 0; - } -} diff --git a/contracts/src/mock/InvalidBalanceRetriever.sol b/contracts/src/mock/InvalidBalanceRetriever.sol deleted file mode 100644 index ade1cb63..00000000 --- a/contracts/src/mock/InvalidBalanceRetriever.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -import "./../interfaces/IBalanceRetriever.sol"; - -contract InvalidBalanceRetriever is IBalanceRetriever { - function getAddressBalance( - bytes memory __, - bytes memory ___, - uint256 ____ - ) external pure override returns (uint256) { - return 0; - } - - function getAssetType() external pure override returns (bytes32) { - return 0; - } -} diff --git a/contracts/src/mock/MockERC20.sol b/contracts/src/mock/MockERC20.sol deleted file mode 100644 index c5a9ef8e..00000000 --- a/contracts/src/mock/MockERC20.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.9; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; - -// Mock ERC20 token for unit testing -contract MockERC20 is ERC20, Ownable { - constructor() ERC20("MockERC20", "MTK") {} - - function mint(address to, uint256 amount) public onlyOwner { - _mint(to, amount); - } -} diff --git a/contracts/test/Summa.ts b/contracts/test/Summa.ts index 5bcac2be..0c37d430 100644 --- a/contracts/test/Summa.ts +++ b/contracts/test/Summa.ts @@ -1,18 +1,12 @@ import { expect } from "chai"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { ethers } from "hardhat"; -import { - ERC20BalanceRetriever, - ETHBalanceRetriever, - EVMAddressVerifier, - MockERC20, - Summa, -} from "../typechain-types"; -import { BigNumber, Signer } from "ethers"; -import { defaultAbiCoder, solidityKeccak256 } from "ethers/lib/utils"; +import { Summa } from "../typechain-types"; +import { BigNumber } from "ethers"; +import { defaultAbiCoder } from "ethers/lib/utils"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import * as fs from 'fs'; -import * as path from 'path'; +import * as fs from "fs"; +import * as path from "path"; describe("Summa Contract", () => { async function deploySummaFixture() { @@ -20,36 +14,16 @@ describe("Summa Contract", () => { const [owner, addr1, addr2, addr3]: SignerWithAddress[] = await ethers.getSigners(); - const mockERC20 = await ethers.deployContract("MockERC20"); - await mockERC20.deployed(); - const verifier = await ethers.deployContract( "src/SolvencyVerifier.sol:Verifier" ); await verifier.deployed(); - const evmAddresVerifier = await ethers.deployContract("EVMAddressVerifier"); - await evmAddresVerifier.deployed(); - - const ethBalanceRetriever = await ethers.deployContract( - "ETHBalanceRetriever" - ); - await ethBalanceRetriever.deployed(); - - const erc20BalanceRetriever = await ethers.deployContract( - "ERC20BalanceRetriever" - ); - await erc20BalanceRetriever.deployed(); - const summa = await ethers.deployContract("Summa", [verifier.address]); await summa.deployed(); return { summa: summa as Summa, - mockERC20, - evmAddresVerifier, - ethBalanceRetriever, - erc20BalanceRetriever, owner, addr1, addr2, @@ -59,26 +33,23 @@ describe("Summa Contract", () => { describe("verify address ownership", () => { let summa: Summa; - let mockERC20: MockERC20; - let evmAddresVerifier: EVMAddressVerifier; let account1: SignerWithAddress; let account2: SignerWithAddress; let account3: SignerWithAddress; - let ownedAddresses: Summa.OwnedAddressStruct[]; + let ownedAddresses: Summa.AddressOwnershipProofStruct[]; + const message = ethers.utils.defaultAbiCoder.encode( + ["string"], + ["Summa proof of solvency for CryptoExchange"] + ); beforeEach(async () => { const deploymentInfo = await loadFixture(deploySummaFixture); summa = deploymentInfo.summa as Summa; - mockERC20 = deploymentInfo.mockERC20 as MockERC20; account1 = deploymentInfo.addr1; account2 = deploymentInfo.addr2; account3 = deploymentInfo.addr3; - evmAddresVerifier = - deploymentInfo.evmAddresVerifier as EVMAddressVerifier; - await mockERC20.mint(account2.address, 556863); - - //Reference signing procedure: + //Reference signing procedure for ETH: // const message = ethers.utils.defaultAbiCoder.encode( // ["string"], // ["Summa proof of solvency for CryptoExchange"] @@ -94,343 +65,286 @@ describe("Summa Contract", () => { ownedAddresses = [ { - addressType: ethers.utils.solidityKeccak256(["string"], ["EVM"]), + chain: "ETH", cexAddress: defaultAbiCoder.encode(["address"], [account1.address]), - ownershipProof: + signature: "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b", + message: message, }, { - addressType: ethers.utils.solidityKeccak256(["string"], ["EVM"]), + chain: "ETH", cexAddress: defaultAbiCoder.encode(["address"], [account2.address]), - ownershipProof: + signature: "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c", + message: message, }, ]; }); - it("should allow admin to add an address verifier", async () => { - await expect(summa.setAddressOwnershipVerifier(evmAddresVerifier.address)) - .to.emit(summa, "AddressVerifierSet") - .withArgs( - solidityKeccak256(["string"], ["EVM"]), - evmAddresVerifier.address - ); - }); - - it("should not allow to add an invalid address verifier", async () => { - await expect( - summa.setAddressOwnershipVerifier(ethers.constants.AddressZero) - ).to.be.revertedWith("Invalid address verifier"); - }); - - it("should not allow to add an invalid address verifier", async () => { - const invalidAddressVerifier = await ethers.deployContract( - "InvalidAddressVerifier" - ); - await invalidAddressVerifier.deployed(); - await expect( - summa.setAddressOwnershipVerifier(invalidAddressVerifier.address) - ).to.be.revertedWith("Invalid address type"); - }); - - it("should revert if a non-admin is trying to add an address verifier", async () => { - await expect( - summa - .connect(account1) - .setAddressOwnershipVerifier(evmAddresVerifier.address) - ).to.be.revertedWith("Ownable: caller is not the owner"); - }); - - it("should revert if address verifier was not set", async () => { - await expect( - summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Address verifier not set for this type of address"); - }); - it("should verify the address ownership and store the addresses", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await expect(summa.submitProofOfAddressOwnership(ownedAddresses)) - .to.emit(summa, "ExchangeAddressesSubmitted") + .to.emit(summa, "AddressOwnershipProofSubmitted") .withArgs((ownedAddresses: any) => { return ( - ownedAddresses[0].addressType == - ethers.utils.solidityKeccak256(["string"], ["EVM"]) && + ownedAddresses[0].chain == "ETH" && ownedAddresses[0].cexAddress == defaultAbiCoder.encode(["address"], [account1.address]) && - ownedAddresses[0].ownershipProof == + ownedAddresses[0].signature == "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b" && - ownedAddresses[1].addressType == - ethers.utils.solidityKeccak256(["string"], ["EVM"]) && + ownedAddresses[0].message == message && + ownedAddresses[1].chain == "ETH" && ownedAddresses[1].cexAddress == defaultAbiCoder.encode(["address"], [account2.address]) && - ownedAddresses[1].ownershipProof == - "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c" + ownedAddresses[1].signature == + "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c" && + ownedAddresses[1].message == message ); }); - }); - it("should revert if a signature is invalid", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - - //Invalid signature - ownedAddresses[0].ownershipProof = - "0x9a9f2dd5ad8242b8feb5ad19e6f5cc87693bc2335ed849c8f9fa908e49c047d0250d001da1d1a83fed254171f1c686e83482b9b927702768efdaafac7375eac91d"; + let proofOfAddressOwnership0 = await summa.addressOwnershipProofs(0); + expect(proofOfAddressOwnership0.chain).to.be.equal("ETH"); + expect(proofOfAddressOwnership0.cexAddress).to.be.equal( + defaultAbiCoder.encode(["address"], [account1.address]) + ); + expect(proofOfAddressOwnership0.signature).to.be.equal( + "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b" + ); + expect(proofOfAddressOwnership0.message).to.be.equal(message); + let proofOfAddressOwnership1 = await summa.addressOwnershipProofs(1); + expect(proofOfAddressOwnership1.chain).to.be.equal("ETH"); + expect(proofOfAddressOwnership1.cexAddress).to.be.equal( + defaultAbiCoder.encode(["address"], [account2.address]) + ); + expect(proofOfAddressOwnership1.signature).to.be.equal( + "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c" + ); + expect(proofOfAddressOwnership1.message).to.be.equal(message); + }); + it("should revert if the address ownership has already been verified", async () => { + await summa.submitProofOfAddressOwnership(ownedAddresses); await expect( summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("ECDSA: invalid signature"); + ).to.be.revertedWith("Address already verified"); }); - it("should revert if the signer is invalid", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - - //Invalid signer (account #3) - ownedAddresses[0].ownershipProof = - "0x2cb485683668d6a9e68b27763fb40bffe6953c7ba81490f28d1b39584778568d481bca493437d9c0f2c3f0ccd989cdde746eef49faa3d6b5a4f924107684383b1b"; - + it("should revert if the proof of address ownership has invalid address", async () => { + ownedAddresses[0].cexAddress = ""; await expect( summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Invalid signer"); + ).to.be.revertedWith("Invalid proof of address ownership"); }); - it("should revert if the address has already been verified", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); + it("should revert if the proof of address ownership has invalid chain type", async () => { + ownedAddresses[0].chain = ""; + await expect( + summa.submitProofOfAddressOwnership(ownedAddresses) + ).to.be.revertedWith("Invalid proof of address ownership"); + }); - await summa.submitProofOfAddressOwnership(ownedAddresses); + it("should revert if the proof of address ownership has invalid signature", async () => { + ownedAddresses[0].signature = ethers.utils.toUtf8Bytes(""); + await expect( + summa.submitProofOfAddressOwnership(ownedAddresses) + ).to.be.revertedWith("Invalid proof of address ownership"); + }); + it("should revert if the proof of address ownership has invalid message", async () => { + ownedAddresses[0].message = ethers.utils.toUtf8Bytes(""); await expect( summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Address already verified"); + ).to.be.revertedWith("Invalid proof of address ownership"); }); }); describe("verify proof of solvency", () => { let mstRoot: BigNumber; let summa: Summa; - let mockERC20: MockERC20; let account1: SignerWithAddress; let account2: SignerWithAddress; - let evmAddresVerifier: EVMAddressVerifier; - let ethBalanceRetriever: ETHBalanceRetriever; - let erc20BalanceRetriever: ERC20BalanceRetriever; - let ownedAddresses: Summa.OwnedAddressStruct[]; - let ownedAssets: Summa.OwnedAssetStruct[]; let proof: string; //let ethAccount3; + let ownedAddresses: Summa.AddressOwnershipProofStruct[]; + const message = ethers.utils.defaultAbiCoder.encode( + ["string"], + ["Summa proof of solvency for CryptoExchange"] + ); beforeEach(async () => { const deploymentInfo = await loadFixture(deploySummaFixture); summa = deploymentInfo.summa as Summa; - mockERC20 = deploymentInfo.mockERC20 as MockERC20; account1 = deploymentInfo.addr1; account2 = deploymentInfo.addr2; - evmAddresVerifier = - deploymentInfo.evmAddresVerifier as EVMAddressVerifier; - ethBalanceRetriever = - deploymentInfo.ethBalanceRetriever as ETHBalanceRetriever; - erc20BalanceRetriever = - deploymentInfo.erc20BalanceRetriever as ERC20BalanceRetriever; ownedAddresses = [ { - addressType: ethers.utils.solidityKeccak256(["string"], ["EVM"]), + chain: "ETH", cexAddress: defaultAbiCoder.encode(["address"], [account1.address]), - ownershipProof: + signature: "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b", + message: message, }, { - addressType: ethers.utils.solidityKeccak256(["string"], ["EVM"]), + chain: "ETH", cexAddress: defaultAbiCoder.encode(["address"], [account2.address]), - ownershipProof: + signature: "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c", + message: message, }, ]; - ownedAssets = [ - { - assetType: ethers.utils.solidityKeccak256(["string"], ["ETH"]), - addresses: [ - defaultAbiCoder.encode(["address"], [account1.address]), - defaultAbiCoder.encode(["address"], [account2.address]), - ], - amountToProve: BigNumber.from(556863), - balanceRetrieverArgs: "0x", - }, - { - assetType: ethers.utils.solidityKeccak256(["string"], ["ERC20"]), - addresses: [defaultAbiCoder.encode(["address"], [account2.address])], - amountToProve: BigNumber.from(556863), - balanceRetrieverArgs: defaultAbiCoder.encode( - ["address"], - [mockERC20.address] - ), - }, - ]; - - await mockERC20.mint(account2.address, 556863); - - const jsonData = fs.readFileSync(path.resolve(__dirname, '../../zk_prover/examples/proof_solidity_calldata.json'), 'utf-8'); + const jsonData = fs.readFileSync( + path.resolve( + __dirname, + "../../zk_prover/examples/proof_solidity_calldata.json" + ), + "utf-8" + ); const calldata: any = JSON.parse(jsonData); - mstRoot = calldata.public_inputs[0] + mstRoot = calldata.public_inputs[0]; proof = calldata.proof; }); - it("should allow admin to set a balance retriever", async () => { - await expect(summa.setBalanceRetriever(ethBalanceRetriever.address)) - .to.emit(summa, "BalanceRetrieverSet") - .withArgs( - solidityKeccak256(["string"], ["ETH"]), - ethBalanceRetriever.address - ); - }); - - it("should revert if a non-admin is trying to set a balance retriever", async () => { - await expect( - summa.connect(account1).setBalanceRetriever(ethBalanceRetriever.address) - ).to.be.revertedWith("Ownable: caller is not the owner"); - }); - - it("should not allow to set an invalid balance retriever", async () => { - await expect( - summa.setBalanceRetriever(ethers.constants.AddressZero) - ).to.to.be.revertedWith("Invalid balance retriever"); - }); - - it("should not allow to set a balance retriever with an invalid asset", async () => { - const invalidBalanceRetriever = await ethers.deployContract( - "InvalidBalanceRetriever" - ); - await invalidBalanceRetriever.deployed(); - await expect( - summa.setBalanceRetriever(invalidBalanceRetriever.address) - ).to.to.be.revertedWith("Invalid asset type"); - }); - - it("should not verify the proof if the balance retriever was not set", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - - await summa.submitProofOfAddressOwnership(ownedAddresses); - - await expect( - summa.submitProofOfSolvency( - ownedAssets, - mstRoot, - proof, - BigNumber.from(0) - ) - ).to.be.revertedWith("Balance retriever not set for this type of asset"); - }); - it("should verify the proof of solvency for the given public input", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await summa.setBalanceRetriever(ethBalanceRetriever.address); - await summa.setBalanceRetriever(erc20BalanceRetriever.address); - await summa.submitProofOfAddressOwnership(ownedAddresses); await expect( summa.submitProofOfSolvency( - ownedAssets, mstRoot, + [ + { + chain: "ETH", + assetName: "ETH", + amount: BigNumber.from(556863), + }, + { + chain: "ETH", + assetName: "USDT", + amount: BigNumber.from(556863), + }, + ], proof, BigNumber.from(0) ) ) - .to.emit(summa, "ProofOfSolvencySubmitted") - .withArgs(mstRoot); + .to.emit(summa, "SolvencyProofSubmitted") + .withArgs(BigNumber.from(0), mstRoot, (assets: Summa.AssetStruct[]) => { + return ( + assets[0].chain == "ETH" && + assets[0].assetName == "ETH" && + BigNumber.from(556863).eq(assets[0].amount as BigNumber) && + assets[1].chain == "ETH" && + assets[1].assetName == "USDT" && + BigNumber.from(556863).eq(assets[1].amount as BigNumber) + ); + }); }); it("should not verify the proof of solvency if the CEX hasn't proven the address ownership", async () => { - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await summa.setBalanceRetriever(ethBalanceRetriever.address); - await summa.setBalanceRetriever(erc20BalanceRetriever.address); - await expect( summa.submitProofOfSolvency( - ownedAssets, mstRoot, + [ + { + chain: "ETH", + assetName: "ETH", + amount: BigNumber.from(556863), + }, + { + chain: "ETH", + assetName: "USDT", + amount: BigNumber.from(556863), + }, + ], proof, BigNumber.from(0) ) - ).to.be.revertedWith("Address ownership not verified"); + ).to.be.revertedWith( + "The CEX has not submitted any address ownership proofs" + ); }); - it("should revert if actual ETH balance is less than the proven balance", async () => { - //Make the proven balance bigger than the actual balance - ownedAssets[0].amountToProve = ( - await ethers.provider.getBalance(account1.address) - ) - .add(await ethers.provider.getBalance(account2.address)) - .add(BigNumber.from(1000000000000000)); - - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await summa.setBalanceRetriever(ethBalanceRetriever.address); - await summa.setBalanceRetriever(erc20BalanceRetriever.address); + it("should revert with invalid MST root", async () => { + mstRoot = BigNumber.from(0); await summa.submitProofOfAddressOwnership(ownedAddresses); await expect( summa.submitProofOfSolvency( - ownedAssets, mstRoot, + [ + { + chain: "ETH", + assetName: "ETH", + amount: BigNumber.from(556863), + }, + { + chain: "ETH", + assetName: "USDT", + amount: BigNumber.from(556863), + }, + ], proof, BigNumber.from(0) ) - ).to.be.revertedWith("Actual balance is less than the amount to prove"); + ).to.be.revertedWith("Invalid ZK proof"); }); - it("should revert if actual ERC20 balance is less than the proven balance", async () => { - //Make the proven balance bigger than the actual balance - ownedAssets[1].amountToProve = BigNumber.from(556864); - - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await summa.setBalanceRetriever(ethBalanceRetriever.address); - await summa.setBalanceRetriever(erc20BalanceRetriever.address); - + it("should revert with invalid assets", async () => { await summa.submitProofOfAddressOwnership(ownedAddresses); await expect( summa.submitProofOfSolvency( - ownedAssets, mstRoot, + [ + { + chain: "", + assetName: "ETH", + amount: BigNumber.from(556863), + }, + ], proof, BigNumber.from(0) ) - ).to.be.revertedWith("Actual balance is less than the amount to prove"); - }); - - it("should revert with invalid MST root", async () => { - mstRoot = BigNumber.from(0); - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await summa.setBalanceRetriever(ethBalanceRetriever.address); - await summa.setBalanceRetriever(erc20BalanceRetriever.address); - - await summa.submitProofOfAddressOwnership(ownedAddresses); + ).to.be.revertedWith("Invalid asset"); await expect( summa.submitProofOfSolvency( - ownedAssets, mstRoot, + [ + { + chain: "ETH", + assetName: "", + amount: BigNumber.from(556863), + }, + ], proof, BigNumber.from(0) ) - ).to.be.revertedWith("Invalid zk proof"); + ).to.be.revertedWith("Invalid asset"); }); it("should revert with invalid proof", async () => { proof = "0x000000"; - await summa.setAddressOwnershipVerifier(evmAddresVerifier.address); - await summa.setBalanceRetriever(ethBalanceRetriever.address); - await summa.setBalanceRetriever(erc20BalanceRetriever.address); await summa.submitProofOfAddressOwnership(ownedAddresses); await expect( summa.submitProofOfSolvency( - ownedAssets, mstRoot, + [ + { + chain: "ETH", + assetName: "ETH", + amount: BigNumber.from(556863), + }, + { + chain: "ETH", + assetName: "USDT", + amount: BigNumber.from(556863), + }, + ], proof, BigNumber.from(0) )