diff --git a/contracts/bindings/omniportal.go b/contracts/bindings/omniportal.go index f29124a0c..0a436fea0 100644 --- a/contracts/bindings/omniportal.go +++ b/contracts/bindings/omniportal.go @@ -64,8 +64,8 @@ type XTypesSubmission struct { // OmniPortalMetaData contains all meta data concerning the OmniPortal contract. var OmniPortalMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"XMSG_DEFAULT_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XMSG_MAX_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XMSG_MIN_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"chainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inXStreamOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"outXStreamOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xcall\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"xcall\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"xsubmit\",\"inputs\":[{\"name\":\"xsub\",\"type\":\"tuple\",\"internalType\":\"structXTypes.Submission\",\"components\":[{\"name\":\"attestationRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHeader\",\"type\":\"tuple\",\"internalType\":\"structXTypes.BlockHeader\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"msgs\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Msg[]\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"streamOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proofFlags\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"signatures\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.SigTuple[]\",\"components\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"XMsg\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"streamOffset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XReceipt\",\"inputs\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"streamOffset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"relayer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", - Bin: "0x60a060405234801561001057600080fd5b506001600160401b034616608052608051610abe610047600039600081816101370152818161026501526106030152610abe6000f3fe6080604052600436106100865760003560e01c80639a8a0592116100595780639a8a0592146101255780639dad9aae14610159578063a2cc111b14610170578063b58e964f14610187578063fa590d14146101bd57600080fd5b806306f9f1741461008b57806350e646dd146100ad57806370e8b56a146100c057806390ab417c146100d3575b600080fd5b34801561009757600080fd5b506100ab6100a6366004610739565b6101d3565b005b6100ab6100bb3660046107f6565b61022f565b6100ab6100ce366004610856565b610246565b3480156100df57600080fd5b506101096100ee3660046108cb565b6000602081905290815260409020546001600160401b031681565b6040516001600160401b03909116815260200160405180910390f35b34801561013157600080fd5b506101097f000000000000000000000000000000000000000000000000000000000000000081565b34801561016557600080fd5b5061010962030d4081565b34801561017c57600080fd5b50610109624c4b4081565b34801561019357600080fd5b506101096101a23660046108cb565b6001602052600090815260409020546001600160401b031681565b3480156101c957600080fd5b5061010961520881565b60005b6101e360808301836108e6565b905081101561022b576102236101fc60808401846108e6565b8381811061020c5761020c61092f565b905060200281019061021e9190610945565b61025b565b6001016101d6565b5050565b610240843385858562030d4061054a565b50505050565b61025485338686868661054a565b5050505050565b6001600160401b037f00000000000000000000000000000000000000000000000000000000000000001661029560408301602084016108cb565b6001600160401b0316146102f05760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a2077726f6e672064657374436861696e496400000060448201526064015b60405180910390fd5b6001600061030160208401846108cb565b6001600160401b03908116825260208201929092526040908101600020549091169061033390606084019084016108cb565b6001600160401b0316146103895760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a2077726f6e672073747265616d4f6666736574000060448201526064016102e7565b600180600061039b60208501856108cb565b6001600160401b03908116825260208201929092526040016000908120805490926103c89185911661097b565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506000624c4b406001600160401b03168260c001602081019061040e91906108cb565b6001600160401b0316116104315761042c60e0830160c084016108cb565b610436565b624c4b405b6001600160401b0316905060005a9050600061045860a08501608086016109a2565b6001600160a01b03168361046f60a08701876109bd565b60405161047d929190610a03565b60006040518083038160008787f1925050503d80600081146104bb576040519150601f19603f3d011682016040523d82523d6000602084013e6104c0565b606091505b505090505a6104cf9083610a13565b91506104e160608501604086016108cb565b6001600160401b03166104f760208601866108cb565b604080518581523360208201528415158183015290516001600160401b0392909216917f34515b4105a7bb34f3af3cd490137ab292bb2ff14efb800df5c7d59e28944f259181900360600190a350505050565b624c4b406001600160401b03821611156105a65760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064016102e7565b6152086001600160401b03821610156106015760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016102e7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b0316036106825760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206e6f2073616d652d636861696e207863616c6c0060448201526064016102e7565b6001600160401b03808716600081815260208190526040908190205490519216917fac3afbbff5be7c4af1610721cf4793840bd167251fd6f184ee708f752a731283906106d89089908990899089908990610a2c565b60405180910390a36001600160401b038087166000908152602081905260408120805460019391929161070d9185911661097b565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550505050505050565b60006020828403121561074b57600080fd5b81356001600160401b0381111561076157600080fd5b8201610100818503121561077457600080fd5b9392505050565b80356001600160401b038116811461079257600080fd5b919050565b80356001600160a01b038116811461079257600080fd5b60008083601f8401126107c057600080fd5b5081356001600160401b038111156107d757600080fd5b6020830191508360208285010111156107ef57600080fd5b9250929050565b6000806000806060858703121561080c57600080fd5b6108158561077b565b935061082360208601610797565b925060408501356001600160401b0381111561083e57600080fd5b61084a878288016107ae565b95989497509550505050565b60008060008060006080868803121561086e57600080fd5b6108778661077b565b945061088560208701610797565b935060408601356001600160401b038111156108a057600080fd5b6108ac888289016107ae565b90945092506108bf90506060870161077b565b90509295509295909350565b6000602082840312156108dd57600080fd5b6107748261077b565b6000808335601e198436030181126108fd57600080fd5b8301803591506001600160401b0382111561091757600080fd5b6020019150600581901b36038213156107ef57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de1983360301811261095b57600080fd5b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561099b5761099b610965565b5092915050565b6000602082840312156109b457600080fd5b61077482610797565b6000808335601e198436030181126109d457600080fd5b8301803591506001600160401b038211156109ee57600080fd5b6020019150368190038213156107ef57600080fd5b8183823760009101908152919050565b81810381811115610a2657610a26610965565b92915050565b6001600160a01b0386811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190506001600160401b0383166060830152969550505050505056fea26469706673582212200741fac5797b736599f25799ee818691d31ddf22f5946a66e6827c24b5c1889f64736f6c63430008170033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"XMSG_DEFAULT_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XMSG_MAX_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XMSG_MIN_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"chainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inXStreamOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"outXStreamOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xcall\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"xcall\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"xsubmit\",\"inputs\":[{\"name\":\"xsub\",\"type\":\"tuple\",\"internalType\":\"structXTypes.Submission\",\"components\":[{\"name\":\"attestationRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHeader\",\"type\":\"tuple\",\"internalType\":\"structXTypes.BlockHeader\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"msgs\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Msg[]\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"streamOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proofFlags\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"signatures\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.SigTuple[]\",\"components\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"XMsg\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"streamOffset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XReceipt\",\"inputs\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"streamOffset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"relayer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"MerkleProofInvalidMultiproof\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b506001600160401b0346166080526080516111096100476000396000818161013701528181610375015261070e01526111096000f3fe6080604052600436106100865760003560e01c80639a8a0592116100595780639a8a0592146101255780639dad9aae14610159578063a2cc111b14610170578063b58e964f14610187578063fa590d14146101bd57600080fd5b806306f9f1741461008b57806350e646dd146100ad57806370e8b56a146100c057806390ab417c146100d3575b600080fd5b34801561009757600080fd5b506100ab6100a6366004610c11565b6101d3565b005b6100ab6100bb366004610cc7565b6102b5565b6100ab6100ce366004610d27565b6102cc565b3480156100df57600080fd5b506101096100ee366004610d9c565b6000602081905290815260409020546001600160401b031681565b6040516001600160401b03909116815260200160405180910390f35b34801561013157600080fd5b506101097f000000000000000000000000000000000000000000000000000000000000000081565b34801561016557600080fd5b5061010962030d4081565b34801561017c57600080fd5b50610109624c4b4081565b34801561019357600080fd5b506101096101a2366004610d9c565b6001602052600090815260409020546001600160401b031681565b3480156101c957600080fd5b5061010961520881565b6102088135602083016101e96080850185610db7565b6101f660a0870187610db7565b61020360c0890189610db7565b6102e1565b6102595760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f660000000000000060448201526064015b60405180910390fd5b60005b6102696080830183610db7565b90508110156102b1576102a96102826080840184610db7565b8381811061029257610292610e00565b90506020028101906102a49190610e16565b61036b565b60010161025c565b5050565b6102c6843385858562030d40610655565b50505050565b6102da853386868686610655565b5050505050565b600061035e858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152508e925061035991508d90508c8c610844565b610959565b9998505050505050505050565b6001600160401b037f0000000000000000000000000000000000000000000000000000000000000000166103a56040830160208401610d9c565b6001600160401b0316146103fb5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a2077726f6e672064657374436861696e49640000006044820152606401610250565b6001600061040c6020840184610d9c565b6001600160401b03908116825260208201929092526040908101600020549091169061043e9060608401908401610d9c565b6001600160401b0316146104945760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a2077726f6e672073747265616d4f666673657400006044820152606401610250565b60018060006104a66020850185610d9c565b6001600160401b03908116825260208201929092526040016000908120805490926104d391859116610e4c565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506000624c4b406001600160401b03168260c00160208101906105199190610d9c565b6001600160401b03161161053c5761053760e0830160c08401610d9c565b610541565b624c4b405b6001600160401b0316905060005a9050600061056360a0850160808601610e73565b6001600160a01b03168361057a60a0870187610e8e565b604051610588929190610ed4565b60006040518083038160008787f1925050503d80600081146105c6576040519150601f19603f3d011682016040523d82523d6000602084013e6105cb565b606091505b505090505a6105da9083610ee4565b91506105ec6060850160408601610d9c565b6001600160401b03166106026020860186610d9c565b604080518581523360208201528415158183015290516001600160401b0392909216917f34515b4105a7bb34f3af3cd490137ab292bb2ff14efb800df5c7d59e28944f259181900360600190a350505050565b624c4b406001600160401b03821611156106b15760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610250565b6152086001600160401b038216101561070c5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b03160361078d5760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206e6f2073616d652d636861696e207863616c6c006044820152606401610250565b6001600160401b03808716600081815260208190526040908190205490519216917fac3afbbff5be7c4af1610721cf4793840bd167251fd6f184ee708f752a731283906107e39089908990899089908990610f20565b60405180910390a36001600160401b038087166000908152602081905260408120805460019391929161081891859116610e4c565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550505050505050565b60606000610853836001610f68565b6001600160401b0381111561086a5761086a610f7b565b604051908082528060200260200182016040528015610893578160200160208202803683370190505b5090506108be856040516020016108aa9190610f91565b604051602081830303815290604052610971565b816000815181106108d1576108d1610e00565b60200260200101818152505060005b8381101561094e5761091f8585838181106108fd576108fd610e00565b905060200281019061090f9190610e16565b6040516020016108aa9190610fce565b8261092b836001610f68565b8151811061093b5761093b610e00565b60209081029190910101526001016108e0565b5090505b9392505050565b6000826109678686856109aa565b1495945050505050565b6000818051906020012060405160200161098d91815260200190565b604051602081830303815290604052805190602001209050919050565b80518351835160009291906109c0816001610f68565b6109ca8385610f68565b146109e857604051631a8a024960e11b815260040160405180910390fd5b6000816001600160401b03811115610a0257610a02610f7b565b604051908082528060200260200182016040528015610a2b578160200160208202803683370190505b5090506000806000805b85811015610b5f576000888510610a70578584610a51816110ba565b955081518110610a6357610a63610e00565b6020026020010151610a96565b8a85610a7b816110ba565b965081518110610a8d57610a8d610e00565b60200260200101515b905060008c8381518110610aac57610aac610e00565b6020026020010151610ae2578d84610ac3816110ba565b955081518110610ad557610ad5610e00565b6020026020010151610b2c565b898610610b06578685610af4816110ba565b965081518110610ad557610ad5610e00565b8b86610b11816110ba565b975081518110610b2357610b23610e00565b60200260200101515b9050610b388282610bdd565b878481518110610b4a57610b4a610e00565b60209081029190910101525050600101610a35565b508415610bb157858114610b8657604051631a8a024960e11b815260040160405180910390fd5b836001860381518110610b9b57610b9b610e00565b6020026020010151975050505050505050610952565b8615610bca5788600081518110610b9b57610b9b610e00565b8a600081518110610b9b57610b9b610e00565b6000818310610bf9576000828152602084905260409020610c08565b60008381526020839052604090205b90505b92915050565b600060208284031215610c2357600080fd5b81356001600160401b03811115610c3957600080fd5b8201610100818503121561095257600080fd5b80356001600160401b0381168114610c6357600080fd5b919050565b80356001600160a01b0381168114610c6357600080fd5b60008083601f840112610c9157600080fd5b5081356001600160401b03811115610ca857600080fd5b602083019150836020828501011115610cc057600080fd5b9250929050565b60008060008060608587031215610cdd57600080fd5b610ce685610c4c565b9350610cf460208601610c68565b925060408501356001600160401b03811115610d0f57600080fd5b610d1b87828801610c7f565b95989497509550505050565b600080600080600060808688031215610d3f57600080fd5b610d4886610c4c565b9450610d5660208701610c68565b935060408601356001600160401b03811115610d7157600080fd5b610d7d88828901610c7f565b9094509250610d90905060608701610c4c565b90509295509295909350565b600060208284031215610dae57600080fd5b610c0882610c4c565b6000808335601e19843603018112610dce57600080fd5b8301803591506001600160401b03821115610de857600080fd5b6020019150600581901b3603821315610cc057600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de19833603018112610e2c57600080fd5b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019080821115610e6c57610e6c610e36565b5092915050565b600060208284031215610e8557600080fd5b610c0882610c68565b6000808335601e19843603018112610ea557600080fd5b8301803591506001600160401b03821115610ebf57600080fd5b602001915036819003821315610cc057600080fd5b8183823760009101908152919050565b81810381811115610c0b57610c0b610e36565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03868116825285166020820152608060408201819052600090610f4d9083018587610ef7565b90506001600160401b03831660608301529695505050505050565b80820180821115610c0b57610c0b610e36565b634e487b7160e01b600052604160045260246000fd5b606081016001600160401b0380610fa785610c4c565b16835280610fb760208601610c4c565b166020840152506040830135604083015292915050565b6020815260006001600160401b0380610fe685610c4c565b16602084015280610ff960208601610c4c565b1660408401528061100c60408601610c4c565b16606084015261101e60608501610c68565b60018060a01b0380821660808601528061103a60808801610c68565b1660a0860152505060a0840135601e1985360301811261105957600080fd5b84016020810190358281111561106e57600080fd5b80360382131561107d57600080fd5b60e060c086015261109361010086018284610ef7565b925050506110a360c08501610c4c565b6001600160401b03811660e0850152509392505050565b6000600182016110cc576110cc610e36565b506001019056fea26469706673582212208442d9d19fd697700accc727f15cce00d9506a91ddbd3297ff528cfb6d610b7864736f6c63430008170033", } // OmniPortalABI is the input ABI used to generate the binding from. diff --git a/contracts/package.json b/contracts/package.json index f09660487..433a208dc 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -7,6 +7,7 @@ "test:gen:xsubs": "ts-node test/ts/script/genxsubs/main.ts" }, "devDependencies": { + "@openzeppelin/contracts": "^5.0.1", "@openzeppelin/merkle-tree": "^1.0.5", "@types/node": "^20.11.7", "ds-test": "https://github.com/dapphub/ds-test", diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index acc2c8450..c9de55bf4 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false devDependencies: + '@openzeppelin/contracts': + specifier: ^5.0.1 + version: 5.0.1 '@openzeppelin/merkle-tree': specifier: ^1.0.5 version: 1.0.5 @@ -248,6 +251,10 @@ packages: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} dev: true + /@openzeppelin/contracts@5.0.1: + resolution: {integrity: sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==} + dev: true + /@openzeppelin/merkle-tree@1.0.5: resolution: {integrity: sha512-JkwG2ysdHeIphrScNxYagPy6jZeNONgDRyqU6lbFgE8HKCZFSkcP8r6AjZs+3HZk4uRNV0kNBBzuWhKQ3YV7Kw==} dependencies: diff --git a/contracts/src/OmniPortal.sol b/contracts/src/OmniPortal.sol index 0a82e265c..4e57847c5 100644 --- a/contracts/src/OmniPortal.sol +++ b/contracts/src/OmniPortal.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.23; import { IOmniPortal } from "./interfaces/IOmniPortal.sol"; +import { XBlockMerkleProof } from "./libraries/XBlockMerkleProof.sol"; import { XTypes } from "./libraries/XTypes.sol"; contract OmniPortal is IOmniPortal { @@ -41,7 +42,10 @@ contract OmniPortal is IOmniPortal { function xsubmit(XTypes.Submission calldata xsub) external { // TODO: verify a quorum of validators have signed off on the attestation root. - // TODO: verify block header and msgs are included in the attestation merkle root + require( + XBlockMerkleProof.verify(xsub.attestationRoot, xsub.blockHeader, xsub.msgs, xsub.proof, xsub.proofFlags), + "OmniPortal: invalid proof" + ); for (uint256 i = 0; i < xsub.msgs.length; i++) { _exec(xsub.msgs[i]); diff --git a/contracts/src/libraries/XBlockMerkleProof.sol b/contracts/src/libraries/XBlockMerkleProof.sol new file mode 100644 index 000000000..fc2185b9b --- /dev/null +++ b/contracts/src/libraries/XBlockMerkleProof.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.23; + +import { MerkleProof } from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; +import { XTypes } from "./XTypes.sol"; + +/** + * @title XBlockMerkleProof + * @dev Library for verifying XBlock merkle proofs + */ +library XBlockMerkleProof { + /** + * @dev Verifies a multi merkle proof for the provided block header and messages, against the provided root. + * Msgs order must match the order used to construct the merkle proof. + * @param root The root of the xblock merkle tree, generally XSubmission.attestationRoot. + * @param blockHeader The xblock header. + * @param msgs The xmsgs to verify. + * @param proof The merkle proof. + * @param proofFlags The merkle proof flags. + * @return True if the proof is valid. + */ + function verify( + bytes32 root, + XTypes.BlockHeader calldata blockHeader, + XTypes.Msg[] calldata msgs, + bytes32[] calldata proof, + bool[] calldata proofFlags + ) internal pure returns (bool) { + return MerkleProof.multiProofVerify(proof, proofFlags, root, _leaves(blockHeader, msgs)); + } + + /// @dev Convert block header and msgs to leaf hashes + function _leaves(XTypes.BlockHeader calldata blockHeader, XTypes.Msg[] calldata msgs) + private + pure + returns (bytes32[] memory) + { + bytes32[] memory leaves = new bytes32[](msgs.length + 1); + + leaves[0] = _leafHash(abi.encode(blockHeader)); + for (uint256 i = 0; i < msgs.length; i++) { + leaves[i + 1] = _leafHash(abi.encode(msgs[i])); + } + + return leaves; + } + + /// @dev Double hash leaves, as recommended by OpenZeppelin, to prevent second preimage attacks + /// Leaves must be double hashed in tree / proof construction + function _leafHash(bytes memory leaf) private pure returns (bytes32) { + return keccak256(bytes.concat(keccak256(leaf))); + } +} diff --git a/contracts/test/OmniPortal_exec.t.sol b/contracts/test/OmniPortal_exec.t.sol index 9315cc2fc..145573d24 100644 --- a/contracts/test/OmniPortal_exec.t.sol +++ b/contracts/test/OmniPortal_exec.t.sol @@ -24,16 +24,7 @@ contract OmniPortal_exec_Test is Base { assertEq(counter.count(), count + 1); assertEq(portal.inXStreamOffset(xmsg.sourceChainId), offset + 1); - - Vm.Log[] memory logs = vm.getRecordedLogs(); - - _assertReceiptEmitted( - logs[0], - xmsg.sourceChainId, - offset, - relayer, - true // success - ); + assertReceipt(vm.getRecordedLogs()[0], xmsg); } /// @dev Test that exec of an XMsg that reverts succeeds, and emits the correct XReceipt @@ -50,16 +41,7 @@ contract OmniPortal_exec_Test is Base { assertEq(counter.count(), count); assertEq(portal.inXStreamOffset(xmsg.sourceChainId), offset + 1); - - Vm.Log[] memory logs = vm.getRecordedLogs(); - - _assertReceiptEmitted( - logs[0], - xmsg.sourceChainId, - offset, - relayer, - false // failure - ); + assertReceipt(vm.getRecordedLogs()[0], xmsg); } /// @dev Test that exec of an XMsg with the wrong destChainId reverts diff --git a/contracts/test/OmniPortal_xsubmit.t.sol b/contracts/test/OmniPortal_xsubmit.t.sol index ccc6c0fbc..e7d407c0a 100644 --- a/contracts/test/OmniPortal_xsubmit.t.sol +++ b/contracts/test/OmniPortal_xsubmit.t.sol @@ -10,182 +10,85 @@ import { Vm } from "forge-std/Vm.sol"; * @dev Tests of OmniPortal.xsubmit */ contract OmniPortal_xsubmit_Test is Base { - /// @dev Test that an XSubmission with a single XMsg succeeds - /// Check that the correct XReceipt's are emitter, and stream offset is incremented. - function test_xsubmit_xmsgSingle_succeeds() public { - XTypes.Msg[] memory xmsgs = new XTypes.Msg[](1); + function test_xsubmit_xblock1_succeeds() public { + XTypes.Submission memory xsub = readXSubmission("xblock1", portal.chainId()); - xmsgs[0] = _inbound_increment(0); - - XTypes.Submission memory submission = _xsub(xmsgs); - - uint256 count = counter.count(); - uint64 sourceChainId = xmsgs[0].sourceChainId; - uint64 offset = portal.inXStreamOffset(sourceChainId); + uint64 sourceChainId = xsub.msgs[0].sourceChainId; + uint64 expectedOffset = xsub.msgs[0].streamOffset + uint64(xsub.msgs.length); vm.prank(relayer); vm.recordLogs(); - portal.xsubmit(submission); - - assertEq(counter.count(), count + 1); - assertEq(portal.inXStreamOffset(sourceChainId), offset + 1); - - Vm.Log[] memory logs = vm.getRecordedLogs(); + expectCalls(xsub.msgs); + portal.xsubmit(xsub); - assertEq(logs.length, xmsgs.length); - - _assertReceiptEmitted( - logs[0], - sourceChainId, - offset, - relayer, - true // success - ); + assertEq(portal.inXStreamOffset(sourceChainId), expectedOffset); + assertReceipts(vm.getRecordedLogs(), xsub.msgs); } - /// @dev Test that an XSubmission with a batch of XMsgs succeeds. - /// Check that the correct XReceipt's are emitter, and stream offset is incremented. - function test_xsubmit_xmsgBatch_succeeds() public { - XTypes.Msg[] memory xmsgs = new XTypes.Msg[](4); - - xmsgs[0] = _inbound_increment(0); - xmsgs[1] = _inbound_increment(1); - xmsgs[2] = _inbound_increment(2); - xmsgs[3] = _inbound_increment(3); + function test_xsubmit_xblock2_succeeds() public { + // need to submit xblock1 first, to set the streamOffset + XTypes.Submission memory xsub1 = readXSubmission("xblock1", portal.chainId()); + portal.xsubmit(xsub1); - XTypes.Submission memory submission = _xsub(xmsgs); + XTypes.Submission memory xsub2 = readXSubmission("xblock2", portal.chainId()); - uint256 count = counter.count(); - uint64 sourceChainId = xmsgs[0].sourceChainId; - uint64 offset = portal.inXStreamOffset(sourceChainId); + uint64 sourceChainId = xsub2.msgs[0].sourceChainId; + uint64 expectedOffset = xsub2.msgs[0].streamOffset + uint64(xsub2.msgs.length); vm.prank(relayer); vm.recordLogs(); - portal.xsubmit(submission); - - assertEq(counter.count(), count + 4); - assertEq(portal.inXStreamOffset(sourceChainId), offset + 4); + expectCalls(xsub2.msgs); + portal.xsubmit(xsub2); - Vm.Log[] memory logs = vm.getRecordedLogs(); - - assertEq(logs.length, xmsgs.length); - - for (uint256 i = 0; i < xmsgs.length; i++) { - _assertReceiptEmitted( - logs[i], - sourceChainId, - offset + uint64(i), - relayer, - true // success - ); - } + assertEq(portal.inXStreamOffset(sourceChainId), expectedOffset); + assertReceipts(vm.getRecordedLogs(), xsub2.msgs); } - /// @dev Test that an XSubmission with a batch of XMsgs, in which one reverts, succeeds. - /// Check that the correct XReceipt's are emitter, and stream offset is incremented. - function test_xsubmit_xmsgBatchWithRevert_succeeds() public { - XTypes.Msg[] memory xmsgs = new XTypes.Msg[](4); - - xmsgs[0] = _inbound_increment(0); - xmsgs[1] = _inbound_increment(1); - xmsgs[2] = _inbound_revert(2); - xmsgs[3] = _inbound_increment(3); + function test_xsubmit_xblock1_chainB_succeeds() public { + XTypes.Submission memory xsub = readXSubmission("xblock1", chainBId); - XTypes.Submission memory submission = _xsub(xmsgs); - - uint256 count = counter.count(); - uint64 sourceChainId = xmsgs[0].sourceChainId; - uint64 offset = portal.inXStreamOffset(sourceChainId); + uint64 sourceChainId = xsub.msgs[0].sourceChainId; + uint64 expectedOffset = xsub.msgs[0].streamOffset + uint64(xsub.msgs.length); vm.prank(relayer); vm.recordLogs(); - portal.xsubmit(submission); - - assertEq(counter.count(), count + 3); // only 3, because one msg was a revert - assertEq(portal.inXStreamOffset(sourceChainId), offset + 4); - - Vm.Log[] memory logs = vm.getRecordedLogs(); - - assertEq(logs.length, xmsgs.length); - - _assertReceiptEmitted( - logs[0], - sourceChainId, - offset, - relayer, - true // success - ); - - _assertReceiptEmitted( - logs[1], - sourceChainId, - offset + 1, - relayer, - true // success - ); - - // this one fails - _assertReceiptEmitted( - logs[2], - sourceChainId, - offset + 2, - relayer, - false // failure - ); - - _assertReceiptEmitted( - logs[3], - sourceChainId, - offset + 3, - relayer, - true // success - ); - } - - /// @dev Test that an XSubmission with a batch of XMsgs with an XMsg behind the current offset reverts - function test_xsubmit_xmsgBatchOneBehindOffset_reverts() public { - XTypes.Msg[] memory xmsgs = new XTypes.Msg[](4); + expectCalls(xsub.msgs); + chainBPortal.xsubmit(xsub); - xmsgs[0] = _inbound_increment(0); - xmsgs[1] = _inbound_increment(1); - xmsgs[2] = _inbound_increment(2); - xmsgs[3] = _inbound_increment(2); // intentionally behind offset - - XTypes.Submission memory submission = _xsub(xmsgs); - - vm.expectRevert("OmniPortal: wrong streamOffset"); - portal.xsubmit(submission); + assertEq(chainBPortal.inXStreamOffset(sourceChainId), expectedOffset); + assertReceipts(vm.getRecordedLogs(), xsub.msgs); } - /// @dev Test that an XSubmission with a batch of XMsgs with an XMsg ahead the current offset reverts - function test_xsubmit_xmsgBatchOneAheadOffset_reverts() public { - XTypes.Msg[] memory xmsgs = new XTypes.Msg[](4); + function test_xsubmit_xblock2_chainB_succeeds() public { + // need to submit xblock1 first, to set the streamOffset + XTypes.Submission memory xsub1 = readXSubmission("xblock1", chainBId); + chainBPortal.xsubmit(xsub1); - xmsgs[0] = _inbound_increment(0); - xmsgs[1] = _inbound_increment(1); - xmsgs[2] = _inbound_increment(2); - xmsgs[3] = _inbound_increment(4); // intentionally ahead offset + XTypes.Submission memory xsub2 = readXSubmission("xblock2", chainBId); - XTypes.Submission memory submission = _xsub(xmsgs); + uint64 sourceChainId = xsub2.msgs[0].sourceChainId; + uint64 expectedOffset = xsub2.msgs[0].streamOffset + uint64(xsub2.msgs.length); - vm.expectRevert("OmniPortal: wrong streamOffset"); - portal.xsubmit(submission); - } + vm.prank(relayer); + vm.recordLogs(); + expectCalls(xsub2.msgs); + chainBPortal.xsubmit(xsub2); - /// @dev Test that an XSubmission with a batch of XMsgs in which one has the wrong destChainId reverts - function test_xsubmit_xmsgBatchWrongChainId_reverts() public { - XTypes.Msg[] memory xmsgs = new XTypes.Msg[](4); + assertEq(chainBPortal.inXStreamOffset(sourceChainId), expectedOffset); + assertReceipts(vm.getRecordedLogs(), xsub2.msgs); + } - xmsgs[0] = _inbound_increment(0); - xmsgs[1] = _inbound_increment(1); - xmsgs[2] = _inbound_increment(2); - xmsgs[3] = _inbound_increment(3); + function test_xsubmit_wrongChainId_reverts() public { + XTypes.Submission memory xsub = readXSubmission("xblock1", portal.chainId()); - xmsgs[1].destChainId = xmsgs[0].destChainId + 1; // intentionally wrong chainId + vm.expectRevert("OmniPortal: wrong destChainId"); + chainBPortal.xsubmit(xsub); + } - XTypes.Submission memory submission = _xsub(xmsgs); + function test_xsubmit_wrongStreamOffset_reverts() public { + XTypes.Submission memory xsub = readXSubmission("xblock2", portal.chainId()); - vm.expectRevert("OmniPortal: wrong destChainId"); - portal.xsubmit(submission); + vm.expectRevert("OmniPortal: wrong streamOffset"); + portal.xsubmit(xsub); } } diff --git a/contracts/test/common/Fixtures.sol b/contracts/test/common/Fixtures.sol index 3b7c6e6d2..29c3f08a4 100644 --- a/contracts/test/common/Fixtures.sol +++ b/contracts/test/common/Fixtures.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.23; import { CommonBase } from "forge-std/Base.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { StdCheats } from "forge-std/StdCheats.sol"; import { XTypes } from "src/libraries/XTypes.sol"; import { TestXTypes } from "./TestXTypes.sol"; @@ -45,13 +46,20 @@ contract Fixtures is CommonBase, StdCheats { Reverter chainBReverter; // helper mappings to generate XMsg.to and XMsg.sender for some sourceChainId & destChainId - mapping(uint64 => address) private _reverters; - mapping(uint64 => address) private _counters; + mapping(uint64 => address) _reverters; + mapping(uint64 => address) _counters; // @dev Path to which test XBlocks are written relative to project root. Read by ts utilites // to generate XSubmissions for each test XBlock (see ts/script/genxsubs/io.ts) string constant XBLOCKS_PATH = "test/data/xblocks.json"; + // @dev Path to which test XSubmissions are written relative to project root. XSubmissions + // are generated for each test XBlock, per destination chain, by ts/script/genxsubs/main.ts. + string constant XSUBS_PATH = "test/data/xsubs.json"; + + /// @dev XSubs json read from XSUBS_PATH, stored to avoid re-reading from disk + string private _xsubsJson; + function setUp() public { deployer = makeAddr("deployer"); xcaller = makeAddr("xcaller"); @@ -93,7 +101,7 @@ contract Fixtures is CommonBase, StdCheats { string memory fullpath = string.concat(root, "/", XBLOCKS_PATH); TestXTypes.Block memory xblock1 = _xblock(1, 0); // sourceBlockHeight: 1, startOffset: 0 - TestXTypes.Block memory xblock2 = _xblock(2, 10); // sourceBlockHeight: 2, startOffset: 10 + TestXTypes.Block memory xblock2 = _xblock(2, 5); // sourceBlockHeight: 2, startOffset: 10 // id identifies the json object we are writing to within vm state // see https://book.getfoundry.sh/cheatcodes/serialize-json @@ -104,6 +112,23 @@ contract Fixtures is CommonBase, StdCheats { vm.writeJson(json, fullpath); } + /// @dev Read a test fixture XSubmission from XSUBS_PATH, for a given xblockName and destChainId. + /// XSubmissions are generated by ts/script/genxsubs/main.ts, and written to XSUBS_PATH. + function readXSubmission(string memory xblockName, uint64 destChainId) public returns (XTypes.Submission memory) { + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/", XSUBS_PATH); + + if (bytes(_xsubsJson).length == 0) _xsubsJson = vm.readFile(path); + + // matches xsub name in ts/script/genxsubs/main.ts + string memory xsubName = string.concat(xblockName, "_xsub_destChainId", Strings.toString(destChainId)); + bytes memory parsed = vm.parseJsonBytes(_xsubsJson, string.concat(".", xsubName)); + + XTypes.Submission memory xsub = abi.decode(parsed, (XTypes.Submission)); + + return xsub; + } + /// @dev Create an xblock from chainA with xmsgs for "this" chain and chain b. /// XBlocks will likely contain XMsgs for multiple chains, so we reflect that here. function _xblock(uint64 sourceBlockHeight, uint64 startOffset) internal view returns (TestXTypes.Block memory) { @@ -126,18 +151,6 @@ contract Fixtures is CommonBase, StdCheats { return TestXTypes.Block(XTypes.BlockHeader(chainAId, sourceBlockHeight, keccak256("blockhash")), xmsgs); } - /// @dev Create an test XSubmission - function _xsub(XTypes.Msg[] memory xmsgs) internal pure returns (XTypes.Submission memory) { - return XTypes.Submission({ - attestationRoot: bytes32(0), // TODO: still unchecked - blockHeader: XTypes.BlockHeader(0, 0, 0), // TODO: still unchecked - msgs: xmsgs, - proof: new bytes32[](0), // TODO: still unchecked - proofFlags: new bool[](0), // TODO: still unchecked - signatures: new XTypes.SigTuple[](0) // TODO: still unchecked - }); - } - /// @dev Create a Counter.increment() XMsg from thisChainId to chainAId function _outbound_increment() internal view returns (XTypes.Msg memory) { return _increment(thisChainId, chainAId, 0); diff --git a/contracts/test/common/TestPortal.sol b/contracts/test/common/TestPortal.sol index 588a0eb10..acf8c19f1 100644 --- a/contracts/test/common/TestPortal.sol +++ b/contracts/test/common/TestPortal.sol @@ -6,7 +6,7 @@ import { XTypes } from "src/libraries/XTypes.sol"; /** * @title TestPortal - * @dev A test contract that exposes the OmniPortal's internal functions. + * @dev A test contract that exposes OmniPortal internal functions, and allows state manipulation. */ contract TestPortal is OmniPortal { function exec(XTypes.Msg calldata xmsg) external { diff --git a/contracts/test/common/Utils.sol b/contracts/test/common/Utils.sol index 5b05665be..840c0852e 100644 --- a/contracts/test/common/Utils.sol +++ b/contracts/test/common/Utils.sol @@ -3,16 +3,18 @@ pragma solidity 0.8.23; import { Test } from "forge-std/Test.sol"; import { Vm } from "forge-std/Vm.sol"; +import { XTypes } from "src/libraries/XTypes.sol"; import { Events } from "./Events.sol"; import { TestXTypes } from "./TestXTypes.sol"; +import { Fixtures } from "./Fixtures.sol"; /** * @title Utils * @dev Defines test utilities. */ -contract Utils is Test, Events { +contract Utils is Test, Events, Fixtures { /// @dev Parse an XReceipt log - function _parseReceipt(Vm.Log memory log) internal returns (TestXTypes.Receipt memory) { + function parseReceipt(Vm.Log memory log) internal returns (TestXTypes.Receipt memory) { assertEq(log.topics.length, 3); assertEq(log.topics[0], XReceipt.selector); @@ -27,20 +29,34 @@ contract Utils is Test, Events { }); } + /// _dev + function assertReceipts(Vm.Log[] memory logs, XTypes.Msg[] memory xmsgs) internal { + assertEq(logs.length, xmsgs.length); + for (uint256 i = 0; i < logs.length; i++) { + assertReceipt(logs[i], xmsgs[i]); + } + } + /// @dev Assert that the log is an XReceipt event with the correct fields. /// We use this helper rather than vm.expectEmit(), because gasUsed is difficult to predict. - function _assertReceiptEmitted( - Vm.Log memory log, - uint64 sourceChainId, - uint64 streamOffset, - address relayer, - bool success - ) internal { - TestXTypes.Receipt memory receipt = _parseReceipt(log); - - assertEq(receipt.sourceChainId, sourceChainId); - assertEq(receipt.streamOffset, streamOffset); + function assertReceipt(Vm.Log memory log, XTypes.Msg memory xmsg) internal { + TestXTypes.Receipt memory receipt = parseReceipt(log); + + assertEq(receipt.sourceChainId, xmsg.sourceChainId); + assertEq(receipt.streamOffset, xmsg.streamOffset); assertEq(receipt.relayer, relayer); - assertEq(receipt.success, success); + assertEq( + receipt.success, + // little hacky, but deriving receipts from messages helps + // readability and this let's us do that + xmsg.to == _reverters[xmsg.destChainId] ? false : true + ); + } + + /// @dev vm.expectCall() for multiple XMsgs + function expectCalls(XTypes.Msg[] memory xmsgs) internal { + for (uint256 i = 0; i < xmsgs.length; i++) { + vm.expectCall(xmsgs[i].to, xmsgs[i].data); + } } } diff --git a/contracts/test/data/xblocks.json b/contracts/test/data/xblocks.json index 75e858840..80b65a680 100644 --- a/contracts/test/data/xblocks.json +++ b/contracts/test/data/xblocks.json @@ -1,4 +1,4 @@ { "xblock1": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000", - "xblock2": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000b6000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000" + "xblock2": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000050000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000060000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000070000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000090000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000050000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000090000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000" } diff --git a/contracts/test/data/xblocks_decoded.json b/contracts/test/data/xblocks_decoded.json index c7e31edbd..2706232e0 100644 --- a/contracts/test/data/xblocks_decoded.json +++ b/contracts/test/data/xblocks_decoded.json @@ -108,7 +108,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "10", + "streamOffset": "5", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -117,7 +117,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "11", + "streamOffset": "6", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -126,7 +126,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "12", + "streamOffset": "7", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -135,7 +135,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "13", + "streamOffset": "8", "sender": "0xa5906e11c3b7F5B832bcBf389295D44e7695b4A6", "to": "0xfF2Bd636B9Fc89645C2D336aeaDE2E4AbaFe1eA5", "data": "0x11cf11ae", @@ -144,7 +144,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "14", + "streamOffset": "9", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -153,7 +153,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "10", + "streamOffset": "5", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", @@ -162,7 +162,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "11", + "streamOffset": "6", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", @@ -171,7 +171,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "12", + "streamOffset": "7", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", @@ -180,7 +180,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "13", + "streamOffset": "8", "sender": "0xa5906e11c3b7F5B832bcBf389295D44e7695b4A6", "to": "0xEed3f8736c808Cc675486631D77a56B9cf8f6094", "data": "0x11cf11ae", @@ -189,7 +189,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "14", + "streamOffset": "9", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", diff --git a/contracts/test/data/xsubs.json b/contracts/test/data/xsubs.json index e6e3f6683..4e1fdbf81 100644 --- a/contracts/test/data/xsubs.json +++ b/contracts/test/data/xsubs.json @@ -1,6 +1,6 @@ { - "xblock1_xsub_destChainId=1": "0x00000000000000000000000000000000000000000000000000000000000000208b89911ac5aec02e4b032d2519bfc45e44ed786938a03d27cb31363d16ec2bd000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f0120f6cca41be65f359c800862e31aa511d149db3bb0c183b2d4768012a614e5a040ba88dfb4f6e165c65c81e12fcd8544f5c0201dcc55e80e3abfd361c9a46000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "xblock1_xsub_destChainId=3": "0x00000000000000000000000000000000000000000000000000000000000000208b89911ac5aec02e4b032d2519bfc45e44ed786938a03d27cb31363d16ec2bd000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025b9ea660a873a9b2a74344b32ad7d96c34fa9588693b7cce80b48bd4edf9af1b17d64dd8dc6a5dda1b037ac6e972d30b1a0b2851cc5c75cddd64b4854b3aaedc000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", - "xblock2_xsub_destChainId=1": "0x0000000000000000000000000000000000000000000000000000000000000020c8af07991ec8dea635907fb1d0c3efc357c97356a0494bffd1e63cfcfbd9d1a800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021ed933b67942e476edb565b7f0d4a53acba6eed2565594477f3d0f59f1b69473512fb8b704ee0028d65e05405b1c16614a725af41aa84295dbd2ce97b753b2a6000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "xblock2_xsub_destChainId=3": "0x0000000000000000000000000000000000000000000000000000000000000020c8af07991ec8dea635907fb1d0c3efc357c97356a0494bffd1e63cfcfbd9d1a800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0ce6ef56d9a9f035ac0e8eeb51b9b430407f85ad18beb233d464e71b91c54134f4ca1c7f9547e25110351ad9a2c95f282fa5b55bca6ce094c9d3b1d7093e6b1000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + "xblock1_xsub_destChainId1": "0x00000000000000000000000000000000000000000000000000000000000000208b89911ac5aec02e4b032d2519bfc45e44ed786938a03d27cb31363d16ec2bd000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f0120f6cca41be65f359c800862e31aa511d149db3bb0c183b2d4768012a614e5a040ba88dfb4f6e165c65c81e12fcd8544f5c0201dcc55e80e3abfd361c9a46000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "xblock1_xsub_destChainId3": "0x00000000000000000000000000000000000000000000000000000000000000208b89911ac5aec02e4b032d2519bfc45e44ed786938a03d27cb31363d16ec2bd000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025b9ea660a873a9b2a74344b32ad7d96c34fa9588693b7cce80b48bd4edf9af1b17d64dd8dc6a5dda1b037ac6e972d30b1a0b2851cc5c75cddd64b4854b3aaedc000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "xblock2_xsub_destChainId1": "0x0000000000000000000000000000000000000000000000000000000000000020b79369d5fb6699e77f31dd88144c2acc87c18f31e8fba42926f48f96e05a8a0700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000050000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000060000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000070000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000ff2bd636b9fc89645c2d336aeade2e4abafe1ea500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000090000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc0000000000000000000000001240fa2a84dd9157a0e76b5cfe98b1d52268b26400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e8485f62aedbe48a85045ac26550f82d1031989c52f2b6a319e7dfcf6ec9e790ad4cc0ed36a74fc1401e5afa1d67473bf2fbebb3a04f0ea7a180ff6cc8008851000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "xblock2_xsub_destChainId3": "0x0000000000000000000000000000000000000000000000000000000000000020b79369d5fb6699e77f31dd88144c2acc87c18f31e8fba42926f48f96e05a8a0700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d60ee5d9b1a312631632d0ab8816ca64259093d8ab0b4d29f35db6a6151b0f8d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000050000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a5906e11c3b7f5b832bcbf389295d44e7695b4a6000000000000000000000000eed3f8736c808cc675486631d77a56b9cf8f609400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000411cf11ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000090000000000000000000000009101223d33eeaea94045bb2920f00ba0f7a475bc00000000000000000000000013250cf16eec77781dcf240b067cac78f2b2adf800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000004d09de08a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020dc40e7bd66debe6705672ecc7d16347e6a39165ebf445b061640c93d0e4bd7b4952d6e9da7897d43be8520bf3e75935efd2b32bfdd1bc4415fb7139f074dbbd000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" } diff --git a/contracts/test/data/xsubs_decoded.json b/contracts/test/data/xsubs_decoded.json index 0d192beb8..8dd765cf3 100644 --- a/contracts/test/data/xsubs_decoded.json +++ b/contracts/test/data/xsubs_decoded.json @@ -1,5 +1,5 @@ { - "xblock1_xsub_destChainId=1": { + "xblock1_xsub_destChainId1": { "blockHeader": { "sourceChainId": "2", "blockHeight": "1", @@ -68,7 +68,7 @@ ], "signatures": [] }, - "xblock1_xsub_destChainId=3": { + "xblock1_xsub_destChainId3": { "blockHeader": { "sourceChainId": "2", "blockHeight": "1", @@ -137,7 +137,7 @@ ], "signatures": [] }, - "xblock2_xsub_destChainId=1": { + "xblock2_xsub_destChainId1": { "blockHeader": { "sourceChainId": "2", "blockHeight": "2", @@ -147,7 +147,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "10", + "streamOffset": "5", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -156,7 +156,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "11", + "streamOffset": "6", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -165,7 +165,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "12", + "streamOffset": "7", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", @@ -174,7 +174,7 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "13", + "streamOffset": "8", "sender": "0xa5906e11c3b7F5B832bcBf389295D44e7695b4A6", "to": "0xfF2Bd636B9Fc89645C2D336aeaDE2E4AbaFe1eA5", "data": "0x11cf11ae", @@ -183,17 +183,17 @@ { "sourceChainId": "2", "destChainId": "1", - "streamOffset": "14", + "streamOffset": "9", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x1240FA2A84dd9157a0e76B5Cfe98B1d52268B264", "data": "0xd09de08a", "gasLimit": "200000" } ], - "attestationRoot": "0xc8af07991ec8dea635907fb1d0c3efc357c97356a0494bffd1e63cfcfbd9d1a8", + "attestationRoot": "0xb79369d5fb6699e77f31dd88144c2acc87c18f31e8fba42926f48f96e05a8a07", "proof": [ - "0x1ed933b67942e476edb565b7f0d4a53acba6eed2565594477f3d0f59f1b69473", - "0x512fb8b704ee0028d65e05405b1c16614a725af41aa84295dbd2ce97b753b2a6" + "0xe8485f62aedbe48a85045ac26550f82d1031989c52f2b6a319e7dfcf6ec9e790", + "0xad4cc0ed36a74fc1401e5afa1d67473bf2fbebb3a04f0ea7a180ff6cc8008851" ], "proofFlags": [ true, @@ -206,7 +206,7 @@ ], "signatures": [] }, - "xblock2_xsub_destChainId=3": { + "xblock2_xsub_destChainId3": { "blockHeader": { "sourceChainId": "2", "blockHeight": "2", @@ -216,7 +216,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "10", + "streamOffset": "5", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", @@ -225,7 +225,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "11", + "streamOffset": "6", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", @@ -234,7 +234,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "12", + "streamOffset": "7", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", @@ -243,7 +243,7 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "13", + "streamOffset": "8", "sender": "0xa5906e11c3b7F5B832bcBf389295D44e7695b4A6", "to": "0xEed3f8736c808Cc675486631D77a56B9cf8f6094", "data": "0x11cf11ae", @@ -252,17 +252,17 @@ { "sourceChainId": "2", "destChainId": "3", - "streamOffset": "14", + "streamOffset": "9", "sender": "0x9101223D33eEaeA94045BB2920F00BA0F7A475Bc", "to": "0x13250CF16EEc77781DCF240b067cAC78F2b2Adf8", "data": "0xd09de08a", "gasLimit": "200000" } ], - "attestationRoot": "0xc8af07991ec8dea635907fb1d0c3efc357c97356a0494bffd1e63cfcfbd9d1a8", + "attestationRoot": "0xb79369d5fb6699e77f31dd88144c2acc87c18f31e8fba42926f48f96e05a8a07", "proof": [ - "0xa0ce6ef56d9a9f035ac0e8eeb51b9b430407f85ad18beb233d464e71b91c5413", - "0x4f4ca1c7f9547e25110351ad9a2c95f282fa5b55bca6ce094c9d3b1d7093e6b1" + "0x0dc40e7bd66debe6705672ecc7d16347e6a39165ebf445b061640c93d0e4bd7b", + "0x4952d6e9da7897d43be8520bf3e75935efd2b32bfdd1bc4415fb7139f074dbbd" ], "proofFlags": [ false, diff --git a/contracts/test/ts/script/genxsubs/main.ts b/contracts/test/ts/script/genxsubs/main.ts index 9a346bd64..ccbfc46aa 100644 --- a/contracts/test/ts/script/genxsubs/main.ts +++ b/contracts/test/ts/script/genxsubs/main.ts @@ -34,8 +34,9 @@ function getXSubs(b: NamedXBlock) { return xsubs } +// matches xsub name referenced in common/Fixture.sol:readXSubmission const xsubName = (xblockName: string, destChainId: string) => - [xblockName, 'xsub', 'destChainId=' + destChainId].join('_') + [xblockName, 'xsub', 'destChainId' + destChainId].join('_') function main() { const xblocks = readXBlocks()