Commit 632525f4 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): `raw()` helper on dispute UDTs (#8789)

* Add `raw()` helper to UDTs to reduce boilerplate syntax

* fmt

* slither + semver lock

* fmt
parent 12900b75
......@@ -31,7 +31,7 @@ var (
// FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract.
var FaultDisputeGameMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint8\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bondManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBondManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"countered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint8\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint8\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101806040523480156200001257600080fd5b506040516200346738038062003467833981016040819052620000359162000098565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b60ff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b0316610100526200013a565b600080600080600080600080610100898b031215620000b657600080fd5b885160ff81168114620000c857600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200010b57600080fd5b60e08a01519092506001600160a01b03811681146200012957600080fd5b809150509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161322d6200023a600039600081816104a60152611c7d0152600081816103d1015261274a0152600081816101cb01528181610f5a01528181611ab50152611aeb01526000818161030a0152818161150401526118140152600081816105d401528181610c360152611d7401526000818161060701528181610a7101528181610b3a015281816113ad01528181611a8b015281816120e301528181612324015281816124520152818161255a015261263601526000818161067e01528181610add0152818161129c01526113ce01526000818161046e0152611452015261322d6000f3fe6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612ce5565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d26565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3139000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612db3565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612ddb565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f58565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d26565b61116e565b34801561052c57600080fd5b5061054061053b366004612e10565b61117a565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612e72565b6111eb565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612efc565b611786565b34801561065757600080fd5b50610660611c7b565b6040516101f593929190612f28565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e10565b611cd8565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612cb6565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612f53565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612cb6565b02179055600281111561085a5761085a612cb6565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a3602080612012565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612cb6565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612f53565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b890839086906120a916565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f00000000000000000000000000000000000000000000000000000000000000006002612fb1565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8103610b7257610b72868885886120b1565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612f53565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608085015160009067ffffffffffffffff1667ffffffffffffffff1642610c0b846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c1f9190612fb1565b610c299190612fc9565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610c9c576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d1a576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610eab57610eab612f53565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f0c90600190612fc9565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161100f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604636111561105a5763c407e0256000526004601cfd5b6040805160a08101825263ffffffff8152600060208201526003918101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff90931692909217949094178155604083015181850155606083015160809093015182167001000000000000000000000000000000000292909116919091176002909101556111689043612fc9565b40600255565b610892828260016108a8565b6003818154811061118a57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561121757611217612cb6565b1461124e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061126357611263612f53565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112c27f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b61135e826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161461139f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561147c576113f27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612fc9565b6001901b611411846fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16611425919061300f565b1561145057611447611438600186613023565b865463ffffffff166000612304565b60010154611472565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611496565b846001015491506114938460016114389190613054565b90505b600882901b60088a8a6040516114ad929190613088565b6040518091039020901b146114ee576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114f98c6123e8565b9050600082600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e14ced328d8d8d8d886040518663ffffffff1660e01b81526004016115639594939291906130e1565b6020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061311b565b600285810154929091149250600091611651906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116ed896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116f79190613134565b6117019190613155565b67ffffffffffffffff161590508115158103611749576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156117b2576117b2612cb6565b146117e9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806117f886612417565b9350935093509350600061180e858585856127e4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a1919061317c565b905060018903611963576002546040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018b9052602481018490526044810191909152602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4015b6020604051808303816000875af1158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d919061311b565b50611c70565b600289036119da576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101879052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60038903611a51576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101859052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60048903611bc55760006fffffffffffffffffffffffffffffffff861615611ae957611aaf6fffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000006128a4565b611ad9907f0000000000000000000000000000000000000000000000000000000000000000612fb1565b611ae4906001612fb1565b611b0b565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018c90526024810185905260c082901b604482015260086064820152608481018a905290915073ffffffffffffffffffffffffffffffffffffffff8316906352f0f3ad9060a4016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe919061311b565b5050611c70565b60058903611c3e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611cd1610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611d0457611d04612cb6565b14611d3b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d5057611d50612f53565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611dc090700100000000000000000000000000000000900467ffffffffffffffff1642612fc9565b6002830154611df09190700100000000000000000000000000000000900460401c67ffffffffffffffff16612fb1565b11611e27576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e45575060065460ff165b15611e7c576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e8a57508215155b15611ec1576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f8f576000838281548110611ee257611ee2612f53565b6000918252602080832090910154808352600590915260409091205490915015611f38576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f4d57611f4d612f53565b600091825260209091206003909102018054909150640100000000900460ff16611f7c57600193505050611f8f565b505080611f88906131b9565b9050611ec5565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fd891612c7c565b8360000361200c57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061204984367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612fb1565b90508267ffffffffffffffff1667ffffffffffffffff81111561206e5761206e6131f1565b6040519080825280601f01601f191660200182016040528015612098576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120be836001613054565b905060006120ce82866001612304565b9050600086901a83806121bf575061210760027f000000000000000000000000000000000000000000000000000000000000000061300f565b6002838101546121a9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121b39190613155565b67ffffffffffffffff16145b156122175760ff8116600114806121d9575060ff81166002145b612212576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b612255565b60ff811615612255576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b50505050505050565b6000806122eb837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261234d576123486fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612959565b612368565b612368856fffffffffffffffffffffffffffffffff16612b20565b90506003848154811061237d5761237d612f53565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123e057815460038054909163ffffffff169081106123cb576123cb612f53565b9060005260206000209060030201915061238e565b509392505050565b60008060008060006123f986612417565b935093509350935061240d848484846127e4565b9695505050505050565b600080600080600085905060006003828154811061243757612437612f53565b600091825260209091206002600390920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061250e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161254f576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612616906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561269257825463ffffffff1661265c7f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8303612666578391505b6003818154811061267957612679612f53565b9060005260206000209060030201935080945050612553565b600280820154908401546fffffffffffffffffffffffffffffffff91821691166000816126bf8460011c90565b6fffffffffffffffffffffffffffffffff1614905080156127925760006126f7836fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16111561274857600061271f612717600185613023565b896001612304565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a5061276c9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff1697506127d6565b60006127a2612717846001613054565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b6000836fffffffffffffffffffffffffffffffff1660000361284b57828260405160200161282e9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061289c565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612931847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b6000816129f8846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612a39576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4283612b20565b905081612ae1826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b1a57612b17612afe836001612fb1565b6fffffffffffffffffffffffffffffffff831690612bcc565b90505b92915050565b60008119600183011681612bb4827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612c59847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612c9a9190612c9d565b50565b5b80821115612cb25760008155600101612c9e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d20577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612d3957600080fd5b50508035926020909101359150565b6000815180845260005b81811015612d6e57602081850181015186830182015201612d52565b81811115612d80576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b176020830184612d48565b80358015158114612dd657600080fd5b919050565b600080600060608486031215612df057600080fd5b8335925060208401359150612e0760408501612dc6565b90509250925092565b600060208284031215612e2257600080fd5b5035919050565b60008083601f840112612e3b57600080fd5b50813567ffffffffffffffff811115612e5357600080fd5b602083019150836020828501011115612e6b57600080fd5b9250929050565b60008060008060008060808789031215612e8b57600080fd5b86359550612e9b60208801612dc6565b9450604087013567ffffffffffffffff80821115612eb857600080fd5b612ec48a838b01612e29565b90965094506060890135915080821115612edd57600080fd5b50612eea89828a01612e29565b979a9699509497509295939492505050565b600080600060608486031215612f1157600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612f4a6060830184612d48565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612fc457612fc4612f82565b500190565b600082821015612fdb57612fdb612f82565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261301e5761301e612fe0565b500690565b60006fffffffffffffffffffffffffffffffff8381169083168181101561304c5761304c612f82565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561307f5761307f612f82565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006130f5606083018789613098565b8281036020840152613108818688613098565b9150508260408301529695505050505050565b60006020828403121561312d57600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561304c5761304c612f82565b600067ffffffffffffffff8084168061317057613170612fe0565b92169190910692915050565b60006020828403121561318e57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146131b257600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131ea576131ea612f82565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a",
Bin: "0x6101806040523480156200001257600080fd5b50604051620034d3380380620034d3833981016040819052620000359162000098565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b60ff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b0316610100526200013a565b600080600080600080600080610100898b031215620000b657600080fd5b885160ff81168114620000c857600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200010b57600080fd5b60e08a01519092506001600160a01b03811681146200012957600080fd5b809150509295985092959890939650565b60805160a05160c05160e051610100516101205161014051610160516132996200023a600039600081816104a60152611c480152600081816103d101526127a50152600081816101cb01528181610f6f01528181611a7c0152611ab201526000818161030a01528181611568015261186b0152600081816105d401528181610c420152611d3201526000818161060701528181610a7101528181610b3a015281816113c201528181611a52015281816120f0015281816123310152818161245f01528181612567015261264301526000818161067e01528181610add015281816112b101526113e301526000818161046e015261147901526132996000f3fe6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612d51565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d92565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3230000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612e1f565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612e47565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f6d565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d92565b611183565b34801561052c57600080fd5b5061054061053b366004612e7c565b61118f565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612ede565b611200565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612f68565b6117dd565b34801561065757600080fd5b50610660611c46565b6040516101f593929190612f94565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e7c565b611ca3565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612d22565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612fbf565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612d22565b02179055600281111561085a5761085a612d22565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a360208061200d565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612d22565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612fbf565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b890839086906120a416565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f0000000000000000000000000000000000000000000000000000000000000000600261301d565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f0000000000000000000000000000000000000000000000000000000000000000600161301d565b8103610b7257610b72868885886120ac565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612fbf565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6080850151600090610bf69067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610c20610be9856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c34919061301d565b610c3e9190613035565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610cb1576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d2f576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610ec057610ec0612fbf565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f2190600190613035565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013511611024576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604636111561106f5763c407e0256000526004601cfd5b6040805160a08101825263ffffffff8152600060208201526003918101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff909316929092179490941781556040830151818501556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015561117d9043613035565b40600255565b610892828260016108a8565b6003818154811061119f57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561122c5761122c612d22565b14611263576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061127857611278612fbf565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112d77f0000000000000000000000000000000000000000000000000000000000000000600161301d565b611373826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16146113b4576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156114a3576114077f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613035565b6001901b611426846fffffffffffffffffffffffffffffffff1661226b565b67ffffffffffffffff1661143a919061307b565b156114775761146e61145f60016fffffffffffffffffffffffffffffffff871661308f565b865463ffffffff166000612311565b60010154611499565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506114ce565b600185015491506114cb6fffffffffffffffffffffffffffffffff851661145f9060016130c0565b90505b600882901b60088a8a6040516114e59291906130f4565b6040518091039020901b14611526576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115318c6123f5565b90506000611540836001015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced32906115ba908f908f908f908f908a9060040161314d565b6020604051808303816000875af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd9190613187565b6002858101549290911492506000916116a8906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611744896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61174e91906131a0565b61175891906131c1565b67ffffffffffffffff1615905081151581036117a0576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561180957611809612d22565b14611840576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061184f86612424565b9350935093509350600061186585858585612851565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f891906131e8565b9050600189036119c05773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846002545b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190613187565b50611c3b565b600289036119ec5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611924565b60038903611a185773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611924565b60048903611b905760006fffffffffffffffffffffffffffffffff861615611ab057611a766fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612910565b611aa0907f000000000000000000000000000000000000000000000000000000000000000061301d565b611aab90600161301d565b611ad2565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b899190613187565b5050611c3b565b60058903611c09576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611977565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611c9c610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611ccf57611ccf612d22565b14611d06576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d1b57611d1b612fbf565b906000526020600020906003020190506001611d5e7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1690565b600283015467ffffffffffffffff91821690921c811691611d949170010000000000000000000000000000000090910416610be9565b611da89067ffffffffffffffff1642613035565b6002830154611dd790700100000000000000000000000000000000900460401c67ffffffffffffffff16610be9565b67ffffffffffffffff16611deb919061301d565b11611e22576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e40575060065460ff165b15611e77576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e8557508215155b15611ebc576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f8a576000838281548110611edd57611edd612fbf565b6000918252602080832090910154808352600590915260409091205490915015611f33576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f4857611f48612fbf565b600091825260209091206003909102018054909150640100000000900460ff16611f7757600193505050611f8a565b505080611f8390613225565b9050611ec0565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fd391612ce8565b8360000361200757600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061204484367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361301d565b90508267ffffffffffffffff1667ffffffffffffffff8111156120695761206961325d565b6040519080825280601f01601f191660200182016040528015612093576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120cb6fffffffffffffffffffffffffffffffff841660016130c0565b905060006120db82866001612311565b9050600086901a83806121cc575061211460027f000000000000000000000000000000000000000000000000000000000000000061307b565b6002838101546121b6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121c091906131c1565b67ffffffffffffffff16145b156122245760ff8116600114806121e6575060ff81166002145b61221f576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161101b565b612262565b60ff811615612262576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161101b565b50505050505050565b6000806122f8837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261235a576123556fffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000006129c5565b612375565b612375856fffffffffffffffffffffffffffffffff16612b8c565b90506003848154811061238a5761238a612fbf565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123ed57815460038054909163ffffffff169081106123d8576123d8612fbf565b9060005260206000209060030201915061239b565b509392505050565b600080600080600061240686612424565b935093509350935061241a84848484612851565b9695505050505050565b600080600080600085905060006003828154811061244457612444612fbf565b600091825260209091206002600390920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061251b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161255c576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612623906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561269f57825463ffffffff166126697f0000000000000000000000000000000000000000000000000000000000000000600161301d565b8303612673578391505b6003818154811061268657612686612fbf565b9060005260206000209060030201935080945050612560565b600281810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff166127086126f3856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156127ed576000612740836fffffffffffffffffffffffffffffffff1661226b565b67ffffffffffffffff1611156127a357600061277a61277260016fffffffffffffffffffffffffffffffff861661308f565b896001612311565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a506127c79050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff169750612843565b600061280f6127726fffffffffffffffffffffffffffffffff851660016130c0565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff841681036128b757828260405160200161289a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612908565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b60008061299d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b600081612a64846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612aa5576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612aae83612b8c565b905081612b4d826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b8657612b83612b6a83600161301d565b6fffffffffffffffffffffffffffffffff831690612c38565b90505b92915050565b60008119600183011681612c20827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612cc5847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612d069190612d09565b50565b5b80821115612d1e5760008155600101612d0a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612da557600080fd5b50508035926020909101359150565b6000815180845260005b81811015612dda57602081850181015186830182015201612dbe565b81811115612dec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b836020830184612db4565b80358015158114612e4257600080fd5b919050565b600080600060608486031215612e5c57600080fd5b8335925060208401359150612e7360408501612e32565b90509250925092565b600060208284031215612e8e57600080fd5b5035919050565b60008083601f840112612ea757600080fd5b50813567ffffffffffffffff811115612ebf57600080fd5b602083019150836020828501011115612ed757600080fd5b9250929050565b60008060008060008060808789031215612ef757600080fd5b86359550612f0760208801612e32565b9450604087013567ffffffffffffffff80821115612f2457600080fd5b612f308a838b01612e95565b90965094506060890135915080821115612f4957600080fd5b50612f5689828a01612e95565b979a9699509497509295939492505050565b600080600060608486031215612f7d57600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612fb66060830184612db4565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561303057613030612fee565b500190565b60008282101561304757613047612fee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261308a5761308a61304c565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156130b8576130b8612fee565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156130eb576130eb612fee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000613161606083018789613104565b8281036020840152613174818688613104565b9150508260408301529695505050505050565b60006020828403121561319957600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156130b8576130b8612fee565b600067ffffffffffffffff808416806131dc576131dc61304c565b92169190910692915050565b6000602082840312156131fa57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461321e57600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361325657613256612fee565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a",
}
// FaultDisputeGameABI is the input ABI used to generate the binding from.
......
......@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr
var FaultDisputeGameStorageLayout = new(solc.StorageLayout)
var FaultDisputeGameDeployedBin = "0x6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612ce5565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d26565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3139000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612db3565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612ddb565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f58565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d26565b61116e565b34801561052c57600080fd5b5061054061053b366004612e10565b61117a565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612e72565b6111eb565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612efc565b611786565b34801561065757600080fd5b50610660611c7b565b6040516101f593929190612f28565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e10565b611cd8565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612cb6565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612f53565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612cb6565b02179055600281111561085a5761085a612cb6565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a3602080612012565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612cb6565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612f53565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b890839086906120a916565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f00000000000000000000000000000000000000000000000000000000000000006002612fb1565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8103610b7257610b72868885886120b1565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612f53565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608085015160009067ffffffffffffffff1667ffffffffffffffff1642610c0b846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c1f9190612fb1565b610c299190612fc9565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610c9c576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d1a576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610eab57610eab612f53565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f0c90600190612fc9565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161100f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604636111561105a5763c407e0256000526004601cfd5b6040805160a08101825263ffffffff8152600060208201526003918101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff90931692909217949094178155604083015181850155606083015160809093015182167001000000000000000000000000000000000292909116919091176002909101556111689043612fc9565b40600255565b610892828260016108a8565b6003818154811061118a57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561121757611217612cb6565b1461124e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061126357611263612f53565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112c27f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b61135e826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161461139f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561147c576113f27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612fc9565b6001901b611411846fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16611425919061300f565b1561145057611447611438600186613023565b865463ffffffff166000612304565b60010154611472565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611496565b846001015491506114938460016114389190613054565b90505b600882901b60088a8a6040516114ad929190613088565b6040518091039020901b146114ee576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114f98c6123e8565b9050600082600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e14ced328d8d8d8d886040518663ffffffff1660e01b81526004016115639594939291906130e1565b6020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061311b565b600285810154929091149250600091611651906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116ed896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116f79190613134565b6117019190613155565b67ffffffffffffffff161590508115158103611749576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156117b2576117b2612cb6565b146117e9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806117f886612417565b9350935093509350600061180e858585856127e4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a1919061317c565b905060018903611963576002546040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018b9052602481018490526044810191909152602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4015b6020604051808303816000875af1158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d919061311b565b50611c70565b600289036119da576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101879052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60038903611a51576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101859052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60048903611bc55760006fffffffffffffffffffffffffffffffff861615611ae957611aaf6fffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000006128a4565b611ad9907f0000000000000000000000000000000000000000000000000000000000000000612fb1565b611ae4906001612fb1565b611b0b565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018c90526024810185905260c082901b604482015260086064820152608481018a905290915073ffffffffffffffffffffffffffffffffffffffff8316906352f0f3ad9060a4016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe919061311b565b5050611c70565b60058903611c3e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611cd1610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611d0457611d04612cb6565b14611d3b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d5057611d50612f53565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611dc090700100000000000000000000000000000000900467ffffffffffffffff1642612fc9565b6002830154611df09190700100000000000000000000000000000000900460401c67ffffffffffffffff16612fb1565b11611e27576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e45575060065460ff165b15611e7c576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e8a57508215155b15611ec1576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f8f576000838281548110611ee257611ee2612f53565b6000918252602080832090910154808352600590915260409091205490915015611f38576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f4d57611f4d612f53565b600091825260209091206003909102018054909150640100000000900460ff16611f7c57600193505050611f8f565b505080611f88906131b9565b9050611ec5565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fd891612c7c565b8360000361200c57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061204984367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612fb1565b90508267ffffffffffffffff1667ffffffffffffffff81111561206e5761206e6131f1565b6040519080825280601f01601f191660200182016040528015612098576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120be836001613054565b905060006120ce82866001612304565b9050600086901a83806121bf575061210760027f000000000000000000000000000000000000000000000000000000000000000061300f565b6002838101546121a9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121b39190613155565b67ffffffffffffffff16145b156122175760ff8116600114806121d9575060ff81166002145b612212576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b612255565b60ff811615612255576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b50505050505050565b6000806122eb837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261234d576123486fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612959565b612368565b612368856fffffffffffffffffffffffffffffffff16612b20565b90506003848154811061237d5761237d612f53565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123e057815460038054909163ffffffff169081106123cb576123cb612f53565b9060005260206000209060030201915061238e565b509392505050565b60008060008060006123f986612417565b935093509350935061240d848484846127e4565b9695505050505050565b600080600080600085905060006003828154811061243757612437612f53565b600091825260209091206002600390920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061250e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161254f576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612616906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561269257825463ffffffff1661265c7f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8303612666578391505b6003818154811061267957612679612f53565b9060005260206000209060030201935080945050612553565b600280820154908401546fffffffffffffffffffffffffffffffff91821691166000816126bf8460011c90565b6fffffffffffffffffffffffffffffffff1614905080156127925760006126f7836fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16111561274857600061271f612717600185613023565b896001612304565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a5061276c9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff1697506127d6565b60006127a2612717846001613054565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b6000836fffffffffffffffffffffffffffffffff1660000361284b57828260405160200161282e9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061289c565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612931847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b6000816129f8846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612a39576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4283612b20565b905081612ae1826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b1a57612b17612afe836001612fb1565b6fffffffffffffffffffffffffffffffff831690612bcc565b90505b92915050565b60008119600183011681612bb4827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612c59847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612c9a9190612c9d565b50565b5b80821115612cb25760008155600101612c9e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d20577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612d3957600080fd5b50508035926020909101359150565b6000815180845260005b81811015612d6e57602081850181015186830182015201612d52565b81811115612d80576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b176020830184612d48565b80358015158114612dd657600080fd5b919050565b600080600060608486031215612df057600080fd5b8335925060208401359150612e0760408501612dc6565b90509250925092565b600060208284031215612e2257600080fd5b5035919050565b60008083601f840112612e3b57600080fd5b50813567ffffffffffffffff811115612e5357600080fd5b602083019150836020828501011115612e6b57600080fd5b9250929050565b60008060008060008060808789031215612e8b57600080fd5b86359550612e9b60208801612dc6565b9450604087013567ffffffffffffffff80821115612eb857600080fd5b612ec48a838b01612e29565b90965094506060890135915080821115612edd57600080fd5b50612eea89828a01612e29565b979a9699509497509295939492505050565b600080600060608486031215612f1157600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612f4a6060830184612d48565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612fc457612fc4612f82565b500190565b600082821015612fdb57612fdb612f82565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261301e5761301e612fe0565b500690565b60006fffffffffffffffffffffffffffffffff8381169083168181101561304c5761304c612f82565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561307f5761307f612f82565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006130f5606083018789613098565b8281036020840152613108818688613098565b9150508260408301529695505050505050565b60006020828403121561312d57600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561304c5761304c612f82565b600067ffffffffffffffff8084168061317057613170612fe0565b92169190910692915050565b60006020828403121561318e57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146131b257600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131ea576131ea612f82565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
var FaultDisputeGameDeployedBin = "0x6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612d51565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d92565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3230000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612e1f565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612e47565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f6d565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d92565b611183565b34801561052c57600080fd5b5061054061053b366004612e7c565b61118f565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612ede565b611200565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612f68565b6117dd565b34801561065757600080fd5b50610660611c46565b6040516101f593929190612f94565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e7c565b611ca3565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612d22565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612fbf565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612d22565b02179055600281111561085a5761085a612d22565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a360208061200d565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612d22565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612fbf565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b890839086906120a416565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f0000000000000000000000000000000000000000000000000000000000000000600261301d565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f0000000000000000000000000000000000000000000000000000000000000000600161301d565b8103610b7257610b72868885886120ac565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612fbf565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6080850151600090610bf69067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610c20610be9856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c34919061301d565b610c3e9190613035565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610cb1576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d2f576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610ec057610ec0612fbf565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f2190600190613035565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013511611024576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604636111561106f5763c407e0256000526004601cfd5b6040805160a08101825263ffffffff8152600060208201526003918101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff909316929092179490941781556040830151818501556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015561117d9043613035565b40600255565b610892828260016108a8565b6003818154811061119f57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561122c5761122c612d22565b14611263576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061127857611278612fbf565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112d77f0000000000000000000000000000000000000000000000000000000000000000600161301d565b611373826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16146113b4576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156114a3576114077f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613035565b6001901b611426846fffffffffffffffffffffffffffffffff1661226b565b67ffffffffffffffff1661143a919061307b565b156114775761146e61145f60016fffffffffffffffffffffffffffffffff871661308f565b865463ffffffff166000612311565b60010154611499565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506114ce565b600185015491506114cb6fffffffffffffffffffffffffffffffff851661145f9060016130c0565b90505b600882901b60088a8a6040516114e59291906130f4565b6040518091039020901b14611526576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115318c6123f5565b90506000611540836001015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced32906115ba908f908f908f908f908a9060040161314d565b6020604051808303816000875af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd9190613187565b6002858101549290911492506000916116a8906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611744896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61174e91906131a0565b61175891906131c1565b67ffffffffffffffff1615905081151581036117a0576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561180957611809612d22565b14611840576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061184f86612424565b9350935093509350600061186585858585612851565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f891906131e8565b9050600189036119c05773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846002545b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190613187565b50611c3b565b600289036119ec5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611924565b60038903611a185773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611924565b60048903611b905760006fffffffffffffffffffffffffffffffff861615611ab057611a766fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612910565b611aa0907f000000000000000000000000000000000000000000000000000000000000000061301d565b611aab90600161301d565b611ad2565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b899190613187565b5050611c3b565b60058903611c09576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611977565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611c9c610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611ccf57611ccf612d22565b14611d06576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d1b57611d1b612fbf565b906000526020600020906003020190506001611d5e7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1690565b600283015467ffffffffffffffff91821690921c811691611d949170010000000000000000000000000000000090910416610be9565b611da89067ffffffffffffffff1642613035565b6002830154611dd790700100000000000000000000000000000000900460401c67ffffffffffffffff16610be9565b67ffffffffffffffff16611deb919061301d565b11611e22576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e40575060065460ff165b15611e77576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e8557508215155b15611ebc576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f8a576000838281548110611edd57611edd612fbf565b6000918252602080832090910154808352600590915260409091205490915015611f33576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f4857611f48612fbf565b600091825260209091206003909102018054909150640100000000900460ff16611f7757600193505050611f8a565b505080611f8390613225565b9050611ec0565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fd391612ce8565b8360000361200757600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061204484367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361301d565b90508267ffffffffffffffff1667ffffffffffffffff8111156120695761206961325d565b6040519080825280601f01601f191660200182016040528015612093576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120cb6fffffffffffffffffffffffffffffffff841660016130c0565b905060006120db82866001612311565b9050600086901a83806121cc575061211460027f000000000000000000000000000000000000000000000000000000000000000061307b565b6002838101546121b6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121c091906131c1565b67ffffffffffffffff16145b156122245760ff8116600114806121e6575060ff81166002145b61221f576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161101b565b612262565b60ff811615612262576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161101b565b50505050505050565b6000806122f8837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261235a576123556fffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000006129c5565b612375565b612375856fffffffffffffffffffffffffffffffff16612b8c565b90506003848154811061238a5761238a612fbf565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123ed57815460038054909163ffffffff169081106123d8576123d8612fbf565b9060005260206000209060030201915061239b565b509392505050565b600080600080600061240686612424565b935093509350935061241a84848484612851565b9695505050505050565b600080600080600085905060006003828154811061244457612444612fbf565b600091825260209091206002600390920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061251b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161255c576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612623906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561269f57825463ffffffff166126697f0000000000000000000000000000000000000000000000000000000000000000600161301d565b8303612673578391505b6003818154811061268657612686612fbf565b9060005260206000209060030201935080945050612560565b600281810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff166127086126f3856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156127ed576000612740836fffffffffffffffffffffffffffffffff1661226b565b67ffffffffffffffff1611156127a357600061277a61277260016fffffffffffffffffffffffffffffffff861661308f565b896001612311565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a506127c79050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff169750612843565b600061280f6127726fffffffffffffffffffffffffffffffff851660016130c0565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff841681036128b757828260405160200161289a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612908565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b60008061299d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b600081612a64846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612aa5576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612aae83612b8c565b905081612b4d826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b8657612b83612b6a83600161301d565b6fffffffffffffffffffffffffffffffff831690612c38565b90505b92915050565b60008119600183011681612c20827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612cc5847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612d069190612d09565b50565b5b80821115612d1e5760008155600101612d0a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612da557600080fd5b50508035926020909101359150565b6000815180845260005b81811015612dda57602081850181015186830182015201612dbe565b81811115612dec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b836020830184612db4565b80358015158114612e4257600080fd5b919050565b600080600060608486031215612e5c57600080fd5b8335925060208401359150612e7360408501612e32565b90509250925092565b600060208284031215612e8e57600080fd5b5035919050565b60008083601f840112612ea757600080fd5b50813567ffffffffffffffff811115612ebf57600080fd5b602083019150836020828501011115612ed757600080fd5b9250929050565b60008060008060008060808789031215612ef757600080fd5b86359550612f0760208801612e32565b9450604087013567ffffffffffffffff80821115612f2457600080fd5b612f308a838b01612e95565b90965094506060890135915080821115612f4957600080fd5b50612f5689828a01612e95565b979a9699509497509295939492505050565b600080600060608486031215612f7d57600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612fb66060830184612db4565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561303057613030612fee565b500190565b60008282101561304757613047612fee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261308a5761308a61304c565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156130b8576130b8612fee565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156130eb576130eb612fee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000613161606083018789613104565b8281036020840152613174818688613104565b9150508260408301529695505050505050565b60006020828403121561319957600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156130b8576130b8612fee565b600067ffffffffffffffff808416806131dc576131dc61304c565b92169190910692915050565b6000602082840312156131fa57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461321e57600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361325657613256612fee565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
func init() {
......
......@@ -4,15 +4,14 @@ pragma solidity ^0.8.15;
import { Script } from "forge-std/Script.sol";
import { console2 as console } from "forge-std/console2.sol";
import { FaultDisputeGame_Init } from "../test/dispute/FaultDisputeGame.t.sol";
import { DisputeGameFactory } from "../src/dispute/DisputeGameFactory.sol";
import { FaultDisputeGame } from "../src/dispute/FaultDisputeGame.sol";
import { IFaultDisputeGame } from "../src/dispute/interfaces/IFaultDisputeGame.sol";
import { FaultDisputeGame_Init } from "test/dispute/FaultDisputeGame.t.sol";
import { DisputeGameFactory } from "src/dispute/DisputeGameFactory.sol";
import { FaultDisputeGame } from "src/dispute/FaultDisputeGame.sol";
import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol";
import "../src/libraries/DisputeTypes.sol";
import "../src/libraries/DisputeErrors.sol";
import { LibClock } from "../src/dispute/lib/LibClock.sol";
import { LibPosition } from "../src/dispute/lib/LibPosition.sol";
import "src/libraries/DisputeTypes.sol";
import "src/libraries/DisputeErrors.sol";
import { LibPosition } from "src/dispute/lib/LibPosition.sol";
/**
* @title FaultDisputeGameViz
......
......@@ -92,8 +92,8 @@
"sourceCodeHash": "0x64290a5d8138c46d2ecd308e3ef62ba04663049cce8a271b9a686ddd2e630391"
},
"src/dispute/FaultDisputeGame.sol": {
"initCodeHash": "0xbd89fd5227cf5c52309cbaa24175351491180f6ff5b7a40a542bfc0e80d6ec00",
"sourceCodeHash": "0xbf39a67d44f5bcdaf65b202c393c538a87903a172056f4fb548645120f38d88c"
"initCodeHash": "0xd93d6ae410ba47724c40094ae3a19d8e9db4c5daaf43d367c4b7af0af6fccfa0",
"sourceCodeHash": "0xeb4ef33b0134a69ddf50c59494ae05b60c07e22e0634f69aafc213fbed6e1a2b"
},
"src/legacy/BlockOracle.sol": {
"initCodeHash": "0x183ce41fb2842c9853f08955ddd91e345126028fad64e07ed14f593cbf9c88bc",
......@@ -104,8 +104,8 @@
"sourceCodeHash": "0xb518a9f56136a910f2450098b4823c9982f93883fe4a9ef6f6b0a89355965d38"
},
"src/legacy/FaultDisputeGame.sol": {
"initCodeHash": "0xbd89fd5227cf5c52309cbaa24175351491180f6ff5b7a40a542bfc0e80d6ec00",
"sourceCodeHash": "0xdc119ac6d4766e6ee88fcaff31f7ef3b8f5ac79055bc426dd3c6872f3df0eb30"
"initCodeHash": "0xd93d6ae410ba47724c40094ae3a19d8e9db4c5daaf43d367c4b7af0af6fccfa0",
"sourceCodeHash": "0x16c1020857324372169e66c57c1927c19f7763bbaa69dc9c51ae4750d9e6c7a4"
},
"src/legacy/L1BlockNumber.sol": {
"initCodeHash": "0xd586c4f93caf1753e53fcdc05eb547c1f3a69afda2904ae9f9d851b73e1c9c1d",
......
......@@ -691,7 +691,7 @@
"description": "Contract locking ether found:\n\tContract LegacyFaultDisputeGame (src/legacy/FaultDisputeGame.sol#26-559) has payable functions:\n\t - ILegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#51)\n\t - ILegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#56)\n\t - ILegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/interfaces/IFaultDisputeGame.sol#83)\n\t - LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t - LegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/FaultDisputeGame.sol#273-275)\n\t - LegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/FaultDisputeGame.sol#278-280)\n\t - LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\tBut does not have a function to withdraw the ether\n",
"type": "contract",
"name": "LegacyFaultDisputeGame",
"start": 1236,
"start": 1234,
"length": 24996,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -739,7 +739,7 @@
"description": "Contract locking ether found:\n\tContract LegacyFaultDisputeGame (src/legacy/FaultDisputeGame.sol#26-559) has payable functions:\n\t - ILegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#51)\n\t - ILegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#56)\n\t - ILegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/interfaces/IFaultDisputeGame.sol#83)\n\t - LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t - LegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/FaultDisputeGame.sol#273-275)\n\t - LegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/FaultDisputeGame.sol#278-280)\n\t - LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "move",
"start": 9194,
"start": 9192,
"length": 3953,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -751,7 +751,7 @@
"description": "Contract locking ether found:\n\tContract LegacyFaultDisputeGame (src/legacy/FaultDisputeGame.sol#26-559) has payable functions:\n\t - ILegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#51)\n\t - ILegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#56)\n\t - ILegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/interfaces/IFaultDisputeGame.sol#83)\n\t - LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t - LegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/FaultDisputeGame.sol#273-275)\n\t - LegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/FaultDisputeGame.sol#278-280)\n\t - LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "attack",
"start": 13197,
"start": 13195,
"length": 118,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -763,7 +763,7 @@
"description": "Contract locking ether found:\n\tContract LegacyFaultDisputeGame (src/legacy/FaultDisputeGame.sol#26-559) has payable functions:\n\t - ILegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#51)\n\t - ILegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#56)\n\t - ILegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/interfaces/IFaultDisputeGame.sol#83)\n\t - LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t - LegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/FaultDisputeGame.sol#273-275)\n\t - LegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/FaultDisputeGame.sol#278-280)\n\t - LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "defend",
"start": 13365,
"start": 13363,
"length": 119,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -775,7 +775,7 @@
"description": "Contract locking ether found:\n\tContract LegacyFaultDisputeGame (src/legacy/FaultDisputeGame.sol#26-559) has payable functions:\n\t - ILegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#51)\n\t - ILegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/interfaces/IFaultDisputeGame.sol#56)\n\t - ILegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/interfaces/IFaultDisputeGame.sol#83)\n\t - LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t - LegacyFaultDisputeGame.attack(uint256,Claim) (src/legacy/FaultDisputeGame.sol#273-275)\n\t - LegacyFaultDisputeGame.defend(uint256,Claim) (src/legacy/FaultDisputeGame.sol#278-280)\n\t - LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "resolveClaim",
"start": 17332,
"start": 17330,
"length": 2033,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -808,11 +808,11 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "contract",
"name": "FaultDisputeGame",
"start": 961,
"length": 32911,
"start": 835,
"length": 32522,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
{
......@@ -820,7 +820,7 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "attack",
"start": 1133,
......@@ -832,7 +832,7 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "defend",
"start": 1406,
......@@ -844,7 +844,7 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "resolveClaim",
"start": 3423,
......@@ -856,11 +856,11 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "move",
"start": 9596,
"length": 4545,
"start": 9425,
"length": 4476,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
{
......@@ -868,10 +868,10 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "attack",
"start": 14185,
"start": 13945,
"length": 118,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
......@@ -880,10 +880,10 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "defend",
"start": 14347,
"start": 14107,
"length": 119,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
......@@ -892,11 +892,11 @@
"impact": "Medium",
"confidence": "High",
"check": "locked-ether",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#22-701) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#288-290)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#293-295)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\tBut does not have a function to withdraw the ether\n",
"description": "Contract locking ether found:\n\tContract FaultDisputeGame (src/dispute/FaultDisputeGame.sol#20-695) has payable functions:\n\t - IFaultDisputeGame.attack(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#30)\n\t - IFaultDisputeGame.defend(uint256,Claim) (src/dispute/interfaces/IFaultDisputeGame.sol#35)\n\t - IFaultDisputeGame.resolveClaim(uint256) (src/dispute/interfaces/IFaultDisputeGame.sol#62)\n\t - FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t - FaultDisputeGame.attack(uint256,Claim) (src/dispute/FaultDisputeGame.sol#284-286)\n\t - FaultDisputeGame.defend(uint256,Claim) (src/dispute/FaultDisputeGame.sol#289-291)\n\t - FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\tBut does not have a function to withdraw the ether\n",
"type": "function",
"name": "resolveClaim",
"start": 18005,
"length": 2043,
"start": 17696,
"length": 2009,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
{
......@@ -1063,7 +1063,7 @@
"description": "Reentrancy in LegacyFaultDisputeGame.step(uint256,bool,bytes,bytes) (src/legacy/FaultDisputeGame.sol#123-186):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,0) == Claim.unwrap(postState.claim) (src/legacy/FaultDisputeGame.sol#179)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/legacy/FaultDisputeGame.sol#185)\n\tLegacyFaultDisputeGame.claimData (src/legacy/FaultDisputeGame.sol#70) can be used in cross function reentrancies:\n\t- LegacyFaultDisputeGame.claimData (src/legacy/FaultDisputeGame.sol#70)\n\t- LegacyFaultDisputeGame.claimDataLen() (src/legacy/FaultDisputeGame.sol#534-536)\n\t- LegacyFaultDisputeGame.findTraceAncestor(Position,uint256) (src/legacy/FaultDisputeGame.sol#548-558)\n\t- LegacyFaultDisputeGame.initialize() (src/legacy/FaultDisputeGame.sol#450-531)\n\t- LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t- LegacyFaultDisputeGame.resolve() (src/legacy/FaultDisputeGame.sol#362-371)\n\t- LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\t- LegacyFaultDisputeGame.step(uint256,bool,bytes,bytes) (src/legacy/FaultDisputeGame.sol#123-186)\n",
"type": "function",
"name": "step",
"start": 5204,
"start": 5202,
"length": 3685,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -1075,7 +1075,7 @@
"description": "Reentrancy in LegacyFaultDisputeGame.step(uint256,bool,bytes,bytes) (src/legacy/FaultDisputeGame.sol#123-186):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,0) == Claim.unwrap(postState.claim) (src/legacy/FaultDisputeGame.sol#179)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/legacy/FaultDisputeGame.sol#185)\n\tLegacyFaultDisputeGame.claimData (src/legacy/FaultDisputeGame.sol#70) can be used in cross function reentrancies:\n\t- LegacyFaultDisputeGame.claimData (src/legacy/FaultDisputeGame.sol#70)\n\t- LegacyFaultDisputeGame.claimDataLen() (src/legacy/FaultDisputeGame.sol#534-536)\n\t- LegacyFaultDisputeGame.findTraceAncestor(Position,uint256) (src/legacy/FaultDisputeGame.sol#548-558)\n\t- LegacyFaultDisputeGame.initialize() (src/legacy/FaultDisputeGame.sol#450-531)\n\t- LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t- LegacyFaultDisputeGame.resolve() (src/legacy/FaultDisputeGame.sol#362-371)\n\t- LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\t- LegacyFaultDisputeGame.step(uint256,bool,bytes,bytes) (src/legacy/FaultDisputeGame.sol#123-186)\n",
"type": "node",
"name": "validStep = VM.step(_stateData,_proof,0) == Claim.unwrap(postState.claim)",
"start": 8450,
"start": 8448,
"length": 80,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -1087,7 +1087,7 @@
"description": "Reentrancy in LegacyFaultDisputeGame.step(uint256,bool,bytes,bytes) (src/legacy/FaultDisputeGame.sol#123-186):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,0) == Claim.unwrap(postState.claim) (src/legacy/FaultDisputeGame.sol#179)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/legacy/FaultDisputeGame.sol#185)\n\tLegacyFaultDisputeGame.claimData (src/legacy/FaultDisputeGame.sol#70) can be used in cross function reentrancies:\n\t- LegacyFaultDisputeGame.claimData (src/legacy/FaultDisputeGame.sol#70)\n\t- LegacyFaultDisputeGame.claimDataLen() (src/legacy/FaultDisputeGame.sol#534-536)\n\t- LegacyFaultDisputeGame.findTraceAncestor(Position,uint256) (src/legacy/FaultDisputeGame.sol#548-558)\n\t- LegacyFaultDisputeGame.initialize() (src/legacy/FaultDisputeGame.sol#450-531)\n\t- LegacyFaultDisputeGame.move(uint256,Claim,bool) (src/legacy/FaultDisputeGame.sol#192-270)\n\t- LegacyFaultDisputeGame.resolve() (src/legacy/FaultDisputeGame.sol#362-371)\n\t- LegacyFaultDisputeGame.resolveClaim(uint256) (src/legacy/FaultDisputeGame.sol#374-424)\n\t- LegacyFaultDisputeGame.step(uint256,bool,bytes,bytes) (src/legacy/FaultDisputeGame.sol#123-186)\n",
"type": "node",
"name": "parent.countered = true",
"start": 8859,
"start": 8857,
"length": 23,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......@@ -1176,38 +1176,38 @@
"filename_relative": "src/L1/DelayedVetoable.sol"
},
{
"id": "d88c6033eee20fb40bd07078b2901d30fffb58b210979c8669346c8edd606ba1",
"id": "c4fc32b91ce132a5935375d328a85fc0538959e5857532739d1bd06565811ccf",
"impact": "Medium",
"confidence": "Medium",
"check": "reentrancy-no-eth",
"description": "Reentrancy in FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/FaultDisputeGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/FaultDisputeGame.sol#190)\n\tFaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#72) can be used in cross function reentrancies:\n\t- FaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#72)\n\t- FaultDisputeGame.claimDataLen() (src/dispute/FaultDisputeGame.sol#487-489)\n\t- FaultDisputeGame.findStartingAndDisputedOutputs(uint256) (src/dispute/FaultDisputeGame.sol#605-666)\n\t- FaultDisputeGame.findTraceAncestor(Position,uint256,bool) (src/dispute/FaultDisputeGame.sol#578-596)\n\t- FaultDisputeGame.initialize() (src/dispute/FaultDisputeGame.sol#441-484)\n\t- FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t- FaultDisputeGame.resolve() (src/dispute/FaultDisputeGame.sol#350-362)\n\t- FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\t- FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#124-191)\n",
"description": "Reentrancy in FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#122-189):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,uuid.raw()) == postState.claim.raw() (src/dispute/FaultDisputeGame.sol#182)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/FaultDisputeGame.sol#188)\n\tFaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#70) can be used in cross function reentrancies:\n\t- FaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#70)\n\t- FaultDisputeGame.claimDataLen() (src/dispute/FaultDisputeGame.sol#483-485)\n\t- FaultDisputeGame.findStartingAndDisputedOutputs(uint256) (src/dispute/FaultDisputeGame.sol#601-660)\n\t- FaultDisputeGame.findTraceAncestor(Position,uint256,bool) (src/dispute/FaultDisputeGame.sol#574-592)\n\t- FaultDisputeGame.initialize() (src/dispute/FaultDisputeGame.sol#437-480)\n\t- FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t- FaultDisputeGame.resolve() (src/dispute/FaultDisputeGame.sol#346-358)\n\t- FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\t- FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#122-189)\n",
"type": "function",
"name": "step",
"start": 5029,
"length": 4262,
"start": 4903,
"length": 4217,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
{
"id": "d88c6033eee20fb40bd07078b2901d30fffb58b210979c8669346c8edd606ba1",
"id": "c4fc32b91ce132a5935375d328a85fc0538959e5857532739d1bd06565811ccf",
"impact": "Medium",
"confidence": "Medium",
"check": "reentrancy-no-eth",
"description": "Reentrancy in FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/FaultDisputeGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/FaultDisputeGame.sol#190)\n\tFaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#72) can be used in cross function reentrancies:\n\t- FaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#72)\n\t- FaultDisputeGame.claimDataLen() (src/dispute/FaultDisputeGame.sol#487-489)\n\t- FaultDisputeGame.findStartingAndDisputedOutputs(uint256) (src/dispute/FaultDisputeGame.sol#605-666)\n\t- FaultDisputeGame.findTraceAncestor(Position,uint256,bool) (src/dispute/FaultDisputeGame.sol#578-596)\n\t- FaultDisputeGame.initialize() (src/dispute/FaultDisputeGame.sol#441-484)\n\t- FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t- FaultDisputeGame.resolve() (src/dispute/FaultDisputeGame.sol#350-362)\n\t- FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\t- FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#124-191)\n",
"description": "Reentrancy in FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#122-189):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,uuid.raw()) == postState.claim.raw() (src/dispute/FaultDisputeGame.sol#182)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/FaultDisputeGame.sol#188)\n\tFaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#70) can be used in cross function reentrancies:\n\t- FaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#70)\n\t- FaultDisputeGame.claimDataLen() (src/dispute/FaultDisputeGame.sol#483-485)\n\t- FaultDisputeGame.findStartingAndDisputedOutputs(uint256) (src/dispute/FaultDisputeGame.sol#601-660)\n\t- FaultDisputeGame.findTraceAncestor(Position,uint256,bool) (src/dispute/FaultDisputeGame.sol#574-592)\n\t- FaultDisputeGame.initialize() (src/dispute/FaultDisputeGame.sol#437-480)\n\t- FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t- FaultDisputeGame.resolve() (src/dispute/FaultDisputeGame.sol#346-358)\n\t- FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\t- FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#122-189)\n",
"type": "node",
"name": "validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim)",
"start": 8836,
"length": 96,
"name": "validStep = VM.step(_stateData,_proof,uuid.raw()) == postState.claim.raw()",
"start": 8680,
"length": 81,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
{
"id": "d88c6033eee20fb40bd07078b2901d30fffb58b210979c8669346c8edd606ba1",
"id": "c4fc32b91ce132a5935375d328a85fc0538959e5857532739d1bd06565811ccf",
"impact": "Medium",
"confidence": "Medium",
"check": "reentrancy-no-eth",
"description": "Reentrancy in FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/FaultDisputeGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/FaultDisputeGame.sol#190)\n\tFaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#72) can be used in cross function reentrancies:\n\t- FaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#72)\n\t- FaultDisputeGame.claimDataLen() (src/dispute/FaultDisputeGame.sol#487-489)\n\t- FaultDisputeGame.findStartingAndDisputedOutputs(uint256) (src/dispute/FaultDisputeGame.sol#605-666)\n\t- FaultDisputeGame.findTraceAncestor(Position,uint256,bool) (src/dispute/FaultDisputeGame.sol#578-596)\n\t- FaultDisputeGame.initialize() (src/dispute/FaultDisputeGame.sol#441-484)\n\t- FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#197-285)\n\t- FaultDisputeGame.resolve() (src/dispute/FaultDisputeGame.sol#350-362)\n\t- FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#365-415)\n\t- FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#124-191)\n",
"description": "Reentrancy in FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#122-189):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,uuid.raw()) == postState.claim.raw() (src/dispute/FaultDisputeGame.sol#182)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/FaultDisputeGame.sol#188)\n\tFaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#70) can be used in cross function reentrancies:\n\t- FaultDisputeGame.claimData (src/dispute/FaultDisputeGame.sol#70)\n\t- FaultDisputeGame.claimDataLen() (src/dispute/FaultDisputeGame.sol#483-485)\n\t- FaultDisputeGame.findStartingAndDisputedOutputs(uint256) (src/dispute/FaultDisputeGame.sol#601-660)\n\t- FaultDisputeGame.findTraceAncestor(Position,uint256,bool) (src/dispute/FaultDisputeGame.sol#574-592)\n\t- FaultDisputeGame.initialize() (src/dispute/FaultDisputeGame.sol#437-480)\n\t- FaultDisputeGame.move(uint256,Claim,bool) (src/dispute/FaultDisputeGame.sol#195-281)\n\t- FaultDisputeGame.resolve() (src/dispute/FaultDisputeGame.sol#346-358)\n\t- FaultDisputeGame.resolveClaim(uint256) (src/dispute/FaultDisputeGame.sol#361-411)\n\t- FaultDisputeGame.step(uint256,bool,bytes,bytes) (src/dispute/FaultDisputeGame.sol#122-189)\n",
"type": "node",
"name": "parent.countered = true",
"start": 9261,
"start": 9090,
"length": 23,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
......@@ -1288,10 +1288,10 @@
"impact": "Medium",
"confidence": "Medium",
"check": "uninitialized-local",
"description": "FaultDisputeGame.findStartingAndDisputedOutputs(uint256).currentDepth (src/dispute/FaultDisputeGame.sol#623) is a local variable never initialized\n",
"description": "FaultDisputeGame.findStartingAndDisputedOutputs(uint256).currentDepth (src/dispute/FaultDisputeGame.sol#619) is a local variable never initialized\n",
"type": "variable",
"name": "currentDepth",
"start": 29599,
"start": 29182,
"length": 20,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
......@@ -1300,10 +1300,10 @@
"impact": "Medium",
"confidence": "Medium",
"check": "uninitialized-local",
"description": "FaultDisputeGame.move(uint256,Claim,bool).grandparentClock (src/dispute/FaultDisputeGame.sol#232) is a local variable never initialized\n",
"description": "FaultDisputeGame.move(uint256,Claim,bool).grandparentClock (src/dispute/FaultDisputeGame.sol#230) is a local variable never initialized\n",
"type": "variable",
"name": "grandparentClock",
"start": 11770,
"start": 11599,
"length": 22,
"filename_relative": "src/dispute/FaultDisputeGame.sol"
},
......@@ -1315,7 +1315,7 @@
"description": "LegacyFaultDisputeGame.move(uint256,Claim,bool).grandparentClock (src/legacy/FaultDisputeGame.sol#217) is a local variable never initialized\n",
"type": "variable",
"name": "grandparentClock",
"start": 10788,
"start": 10786,
"length": 22,
"filename_relative": "src/legacy/FaultDisputeGame.sol"
},
......
......@@ -10,9 +10,7 @@ import { IBigStepper, IPreimageOracle } from "src/dispute/interfaces/IBigStepper
import { Clone } from "src/libraries/Clone.sol";
import { Types } from "src/libraries/Types.sol";
import { ISemver } from "src/universal/ISemver.sol";
import { LibHashing } from "src/dispute/lib/LibHashing.sol";
import { LibPosition } from "src/dispute/lib/LibPosition.sol";
import { LibClock } from "src/dispute/lib/LibClock.sol";
import { LibClock } from "src/dispute/lib/LibUDT.sol";
import "src/libraries/DisputeTypes.sol";
import "src/libraries/DisputeErrors.sol";
......@@ -81,8 +79,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
bool internal subgameAtRootResolved;
/// @notice Semantic version.
/// @custom:semver 0.0.19
string public constant version = "0.0.19";
/// @custom:semver 0.0.20
string public constant version = "0.0.20";
/// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace.
......@@ -150,21 +148,21 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// determine whether or not the step position is represents the `ABSOLUTE_PRESTATE`.
preStateClaim = (stepPos.indexAtDepth() % (1 << (MAX_GAME_DEPTH - SPLIT_DEPTH))) == 0
? ABSOLUTE_PRESTATE
: findTraceAncestor(Position.wrap(Position.unwrap(parentPos) - 1), parent.parentIndex, false).claim;
: findTraceAncestor(Position.wrap(parentPos.raw() - 1), parent.parentIndex, false).claim;
// For all attacks, the poststate is the parent claim.
postState = parent;
} else {
// If the step is a defense, the poststate exists elsewhere in the game state,
// and the parent claim is the expected pre-state.
preStateClaim = parent.claim;
postState = findTraceAncestor(Position.wrap(Position.unwrap(parentPos) + 1), parent.parentIndex, false);
postState = findTraceAncestor(Position.wrap(parentPos.raw() + 1), parent.parentIndex, false);
}
// INVARIANT: The prestate is always invalid if the passed `_stateData` is not the
// preimage of the prestate claim hash.
// We ignore the highest order byte of the digest because it is used to
// indicate the VM Status and is added after the digest is computed.
if (keccak256(_stateData) << 8 != Claim.unwrap(preStateClaim) << 8) revert InvalidPrestate();
if (keccak256(_stateData) << 8 != preStateClaim.raw() << 8) revert InvalidPrestate();
// Compute the local preimage context for the step.
Hash uuid = findLocalContext(_claimIndex);
......@@ -181,7 +179,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// SAFETY: While the `attack` path does not need an extra check for the post
// state's depth in relation to the parent, we don't need another
// branch because (n - n) % 2 == 0.
bool validStep = VM.step(_stateData, _proof, Hash.unwrap(uuid)) == Claim.unwrap(postState.claim);
bool validStep = VM.step(_stateData, _proof, uuid.raw()) == postState.claim.raw();
bool parentPostAgree = (parentPos.depth() - postState.position.depth()) % 2 == 0;
if (parentPostAgree == validStep) revert ValidStep();
......@@ -240,18 +238,16 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
Duration nextDuration = Duration.wrap(
uint64(
// First, fetch the duration of the grandparent claim.
Duration.unwrap(grandparentClock.duration())
grandparentClock.duration().raw()
// Second, add the difference between the current block timestamp and the
// parent's clock timestamp.
+ block.timestamp - Timestamp.unwrap(parent.clock.timestamp())
+ block.timestamp - parent.clock.timestamp().raw()
)
);
// INVARIANT: A move can never be made once its clock has exceeded `GAME_DURATION / 2`
// seconds of time.
if (Duration.unwrap(nextDuration) > Duration.unwrap(GAME_DURATION) >> 1) {
revert ClockTimeExceeded();
}
if (nextDuration.raw() > GAME_DURATION.raw() >> 1) revert ClockTimeExceeded();
// Construct the next clock with the new duration and the current block timestamp.
Clock nextClock = LibClock.wrap(nextDuration, Timestamp.wrap(uint64(block.timestamp)));
......@@ -306,27 +302,27 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
IPreimageOracle oracle = VM.oracle();
if (_ident == LocalPreimageKey.L1_HEAD_HASH) {
// Load the L1 head hash
oracle.loadLocalData(_ident, Hash.unwrap(uuid), Hash.unwrap(l1Head), 32, _partOffset);
oracle.loadLocalData(_ident, uuid.raw(), l1Head.raw(), 32, _partOffset);
} else if (_ident == LocalPreimageKey.STARTING_OUTPUT_ROOT) {
// Load the starting proposal's output root.
oracle.loadLocalData(_ident, Hash.unwrap(uuid), Claim.unwrap(starting), 32, _partOffset);
oracle.loadLocalData(_ident, uuid.raw(), starting.raw(), 32, _partOffset);
} else if (_ident == LocalPreimageKey.DISPUTED_OUTPUT_ROOT) {
// Load the disputed proposal's output root
oracle.loadLocalData(_ident, Hash.unwrap(uuid), Claim.unwrap(disputed), 32, _partOffset);
oracle.loadLocalData(_ident, uuid.raw(), disputed.raw(), 32, _partOffset);
} else if (_ident == LocalPreimageKey.STARTING_L2_BLOCK_NUMBER) {
// Load the starting proposal's L2 block number as a big-endian uint64 in the
// high order 8 bytes of the word.
// If the starting position is 0 (invalid), the starting output root is genesis. Otherwise,
// we add the index at depth + 1 to the genesis block number to get the L2 block number.
uint256 l2Number = Position.unwrap(startingPos) == 0
uint256 l2Number = startingPos.raw() == 0
? GENESIS_BLOCK_NUMBER
: GENESIS_BLOCK_NUMBER + startingPos.traceIndex(SPLIT_DEPTH) + 1;
oracle.loadLocalData(_ident, Hash.unwrap(uuid), bytes32(l2Number << 0xC0), 8, _partOffset);
oracle.loadLocalData(_ident, uuid.raw(), bytes32(l2Number << 0xC0), 8, _partOffset);
} else if (_ident == LocalPreimageKey.CHAIN_ID) {
// Load the chain ID as a big-endian uint64 in the high order 8 bytes of the word.
oracle.loadLocalData(_ident, Hash.unwrap(uuid), bytes32(block.chainid << 0xC0), 8, _partOffset);
oracle.loadLocalData(_ident, uuid.raw(), bytes32(block.chainid << 0xC0), 8, _partOffset);
} else {
revert InvalidLocalIdent();
}
......@@ -370,8 +366,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// INVARIANT: Cannot resolve a subgame unless the clock of its root has expired
if (
Duration.unwrap(parent.clock.duration()) + (block.timestamp - Timestamp.unwrap(parent.clock.timestamp()))
<= Duration.unwrap(GAME_DURATION) >> 1
parent.clock.duration().raw() + (block.timestamp - parent.clock.timestamp().raw())
<= GAME_DURATION.raw() >> 1
) {
revert ClockNotExpired();
}
......@@ -550,19 +546,19 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// If the move is a defense, the disputed output could have been made by either party. In this case, we
// need to search for the parent output to determine what the expected status byte should be.
Position disputedLeafPos = Position.wrap(Position.unwrap(_parentPos) + 1);
Position disputedLeafPos = Position.wrap(_parentPos.raw() + 1);
ClaimData storage disputed = findTraceAncestor({ _pos: disputedLeafPos, _start: _parentIdx, _global: true });
uint8 vmStatus = uint8(Claim.unwrap(_rootClaim)[0]);
uint8 vmStatus = uint8(_rootClaim.raw()[0]);
if (_isAttack || disputed.position.depth() % 2 == SPLIT_DEPTH % 2) {
// If the move is an attack, the parent output is always deemed to be disputed. In this case, we only need
// to check that the root claim signals that the VM panicked or resulted in an invalid transition.
// If the move is a defense, and the disputed output and creator of the execution trace subgame disagree,
// the root claim should also signal that the VM panicked or resulted in an invalid transition.
if (!(vmStatus == VMStatus.unwrap(VMStatuses.INVALID) || vmStatus == VMStatus.unwrap(VMStatuses.PANIC))) {
if (!(vmStatus == VMStatuses.INVALID.raw() || vmStatus == VMStatuses.PANIC.raw())) {
revert UnexpectedRootClaim(_rootClaim);
}
} else if (vmStatus != VMStatus.unwrap(VMStatuses.VALID)) {
} else if (vmStatus != VMStatuses.VALID.raw()) {
// The disputed output and the creator of the execution trace subgame agree. The status byte should
// have signaled that the VM succeeded.
revert UnexpectedRootClaim(_rootClaim);
......@@ -590,7 +586,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// Walk up the DAG to find a claim that commits to the same trace index as `_pos`. It is
// guaranteed that such a claim exists.
ancestor_ = claimData[_start];
while (Position.unwrap(ancestor_.position) != Position.unwrap(traceAncestorPos)) {
while (ancestor_.position.raw() != traceAncestorPos.raw()) {
ancestor_ = claimData[ancestor_.parentIndex];
}
}
......@@ -638,7 +634,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// above. This is important because it determines which claim is the starting output root and which
// is the disputed output root.
(Position execRootPos, Position outputPos) = (execRootClaim.position, claim.position);
bool wasAttack = Position.unwrap(execRootPos.parent()) == Position.unwrap(outputPos);
bool wasAttack = execRootPos.parent().raw() == outputPos.raw();
// Determine the starting and disputed output root indices.
// 1. If it was an attack, the disputed output root is `claim`, and the starting output root is
......@@ -650,16 +646,14 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// starting claim nor position exists in the tree. We leave these as 0, which can be easily
// identified due to 0 being an invalid Gindex.
if (outputPos.indexAtDepth() > 0) {
ClaimData storage starting =
findTraceAncestor(Position.wrap(Position.unwrap(outputPos) - 1), claimIdx, true);
ClaimData storage starting = findTraceAncestor(Position.wrap(outputPos.raw() - 1), claimIdx, true);
(startingClaim_, startingPos_) = (starting.claim, starting.position);
} else {
startingClaim_ = Claim.wrap(Hash.unwrap(GENESIS_OUTPUT_ROOT));
startingClaim_ = Claim.wrap(GENESIS_OUTPUT_ROOT.raw());
}
(disputedClaim_, disputedPos_) = (claim.claim, claim.position);
} else {
ClaimData storage disputed =
findTraceAncestor(Position.wrap(Position.unwrap(outputPos) + 1), claimIdx, true);
ClaimData storage disputed = findTraceAncestor(Position.wrap(outputPos.raw() + 1), claimIdx, true);
(startingClaim_, startingPos_) = (claim.claim, claim.position);
(disputedClaim_, disputedPos_) = (disputed.claim, disputed.position);
}
......@@ -692,7 +686,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
{
// A position of 0 indicates that the starting claim is the absolute prestate. In this special case,
// we do not include the starting claim within the local context hash.
if (Position.unwrap(_startingPos) == 0) {
if (_startingPos.raw() == 0) {
uuid_ = Hash.wrap(keccak256(abi.encode(_disputed, _disputedPos)));
} else {
uuid_ = Hash.wrap(keccak256(abi.encode(_starting, _startingPos, _disputed, _disputedPos)));
......
......@@ -176,4 +176,13 @@ library LibPosition {
move_ := shl(1, or(iszero(_isAttack), _position))
}
}
/// @notice Get the value of a `Position` type in the form of the underlying uint128.
/// @param _position The position to get the value of.
/// @return raw_ The value of the `position` as a uint128 type.
function raw(Position _position) internal pure returns (uint128 raw_) {
assembly {
raw_ := _position
}
}
}
......@@ -36,4 +36,91 @@ library LibClock {
timestamp_ := shr(0xC0, shl(0xC0, _clock))
}
}
/// @notice Get the value of a `Clock` type in the form of the underlying uint128.
/// @param _clock The `Clock` type to get the value of.
/// @return clock_ The value of the `Clock` type as a uint128 type.
function raw(Clock _clock) internal pure returns (uint128 clock_) {
assembly {
clock_ := _clock
}
}
}
/// @title LibClaim
/// @notice This library contains helper functions for working with the `Claim` type.
library LibClaim {
/// @notice Get the value of a `Claim` type in the form of the underlying bytes32.
/// @param _claim The `Claim` type to get the value of.
/// @return claim_ The value of the `Claim` type as a bytes32 type.
function raw(Claim _claim) internal pure returns (bytes32 claim_) {
assembly {
claim_ := _claim
}
}
}
/// @title LibDuration
/// @notice This library contains helper functions for working with the `Duration` type.
library LibDuration {
/// @notice Get the value of a `Duration` type in the form of the underlying uint64.
/// @param _duration The `Duration` type to get the value of.
/// @return duration_ The value of the `Duration` type as a uint64 type.
function raw(Duration _duration) internal pure returns (uint64 duration_) {
assembly {
duration_ := _duration
}
}
}
/// @title LibHash
/// @notice This library contains helper functions for working with the `Hash` type.
library LibHash {
/// @notice Get the value of a `Hash` type in the form of the underlying bytes32.
/// @param _hash The `Hash` type to get the value of.
/// @return hash_ The value of the `Hash` type as a bytes32 type.
function raw(Hash _hash) internal pure returns (bytes32 hash_) {
assembly {
hash_ := _hash
}
}
}
/// @title LibTimestamp
/// @notice This library contains helper functions for working with the `Timestamp` type.
library LibTimestamp {
/// @notice Get the value of a `Timestamp` type in the form of the underlying uint64.
/// @param _timestamp The `Timestamp` type to get the value of.
/// @return timestamp_ The value of the `Timestamp` type as a uint64 type.
function raw(Timestamp _timestamp) internal pure returns (uint64 timestamp_) {
assembly {
timestamp_ := _timestamp
}
}
}
/// @title LibVMStatus
/// @notice This library contains helper functions for working with the `VMStatus` type.
library LibVMStatus {
/// @notice Get the value of a `VMStatus` type in the form of the underlying uint8.
/// @param _vmstatus The `VMStatus` type to get the value of.
/// @return vmstatus_ The value of the `VMStatus` type as a uint8 type.
function raw(VMStatus _vmstatus) internal pure returns (uint8 vmstatus_) {
assembly {
vmstatus_ := _vmstatus
}
}
}
/// @title LibGameType
/// @notice This library contains helper functions for working with the `GameType` type.
library LibGameType {
/// @notice Get the value of a `GameType` type in the form of the underlying uint8.
/// @param _gametype The `GameType` type to get the value of.
/// @return gametype_ The value of the `GameType` type as a uint8 type.
function raw(GameType _gametype) internal pure returns (uint8 gametype_) {
assembly {
gametype_ := _gametype
}
}
}
......@@ -14,7 +14,7 @@ import { Types } from "src/libraries/Types.sol";
import { ISemver } from "src/universal/ISemver.sol";
import { LibHashing } from "src/dispute/lib/LibHashing.sol";
import { LibPosition } from "src/dispute/lib/LibPosition.sol";
import { LibClock } from "src/dispute/lib/LibClock.sol";
import { LibClock } from "src/dispute/lib/LibUDT.sol";
import "src/libraries/DisputeTypes.sol";
import "src/libraries/DisputeErrors.sol";
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
import { LibHashing } from "../dispute/lib/LibHashing.sol";
import { LibPosition } from "../dispute/lib/LibPosition.sol";
import { LibClock } from "../dispute/lib/LibClock.sol";
import { LibGameId } from "../dispute/lib/LibGameId.sol";
import { LibHashing } from "src/dispute/lib/LibHashing.sol";
import {
LibClaim,
LibHash,
LibDuration,
LibClock,
LibTimestamp,
LibVMStatus,
LibGameType
} from "src/dispute/lib/LibUDT.sol";
import { LibPosition } from "src/dispute/lib/LibPosition.sol";
import { LibGameId } from "src/dispute/lib/LibGameId.sol";
using LibClaim for Claim global;
using LibHashing for Claim global;
using LibHash for Hash global;
using LibPosition for Position global;
using LibDuration for Duration global;
using LibClock for Clock global;
using LibGameId for GameId global;
using LibTimestamp for Timestamp global;
using LibVMStatus for VMStatus global;
using LibGameType for GameType global;
/// @notice A custom type for a generic hash.
type Hash is bytes32;
......
......@@ -13,7 +13,7 @@ import { PreimageKeyLib } from "src/cannon/PreimageKeyLib.sol";
import "src/libraries/DisputeTypes.sol";
import "src/libraries/DisputeErrors.sol";
import { Types } from "src/libraries/Types.sol";
import { LibClock } from "src/dispute/lib/LibClock.sol";
import { LibClock } from "src/dispute/lib/LibUDT.sol";
import { LibPosition } from "src/dispute/lib/LibPosition.sol";
import { IBigStepper, IPreimageOracle } from "src/dispute/interfaces/IBigStepper.sol";
import { AlphabetVM } from "test/mocks/AlphabetVM.sol";
......@@ -68,13 +68,13 @@ contract FaultDisputeGame_Init is DisputeGameFactory_Init {
gameProxy = FaultDisputeGame(address(factory.create(GAME_TYPE, rootClaim, extraData)));
// Check immutables
assertEq(GameType.unwrap(gameProxy.gameType()), GameType.unwrap(GAME_TYPE));
assertEq(Claim.unwrap(gameProxy.absolutePrestate()), Claim.unwrap(absolutePrestate));
assertEq(gameProxy.gameType().raw(), GAME_TYPE.raw());
assertEq(gameProxy.absolutePrestate().raw(), absolutePrestate.raw());
assertEq(gameProxy.genesisBlockNumber(), genesisBlockNumber);
assertEq(Hash.unwrap(gameProxy.genesisOutputRoot()), Hash.unwrap(genesisOutputRoot));
assertEq(gameProxy.genesisOutputRoot().raw(), genesisOutputRoot.raw());
assertEq(gameProxy.maxGameDepth(), 2 ** 3);
assertEq(gameProxy.splitDepth(), 2 ** 2);
assertEq(Duration.unwrap(gameProxy.gameDuration()), 7 days);
assertEq(gameProxy.gameDuration().raw(), 7 days);
assertEq(address(gameProxy.vm()), address(_vm));
// Label the proxy
......@@ -126,7 +126,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @dev Tests that the game's root claim is set correctly.
function test_rootClaim_succeeds() public {
assertEq(Claim.unwrap(gameProxy.rootClaim()), Claim.unwrap(ROOT_CLAIM));
assertEq(gameProxy.rootClaim().raw(), ROOT_CLAIM.raw());
}
/// @dev Tests that the game's extra data is set correctly.
......@@ -136,20 +136,20 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @dev Tests that the game's starting timestamp is set correctly.
function test_createdAt_succeeds() public {
assertEq(Timestamp.unwrap(gameProxy.createdAt()), block.timestamp);
assertEq(gameProxy.createdAt().raw(), block.timestamp);
}
/// @dev Tests that the game's type is set correctly.
function test_gameType_succeeds() public {
assertEq(GameType.unwrap(gameProxy.gameType()), GameType.unwrap(GAME_TYPE));
assertEq(gameProxy.gameType().raw(), GAME_TYPE.raw());
}
/// @dev Tests that the game's data is set correctly.
function test_gameData_succeeds() public {
(GameType gameType, Claim rootClaim, bytes memory _extraData) = gameProxy.gameData();
assertEq(GameType.unwrap(gameType), GameType.unwrap(GAME_TYPE));
assertEq(Claim.unwrap(rootClaim), Claim.unwrap(ROOT_CLAIM));
assertEq(gameType.raw(), GAME_TYPE.raw());
assertEq(rootClaim.raw(), ROOT_CLAIM.raw());
assertEq(_extraData, extraData);
}
......@@ -195,17 +195,15 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
(uint32 parentIndex, bool countered, Claim claim, Position position, Clock clock) = gameProxy.claimData(0);
assertEq(parentIndex, type(uint32).max);
assertEq(countered, false);
assertEq(Claim.unwrap(claim), Claim.unwrap(ROOT_CLAIM));
assertEq(Position.unwrap(position), 1);
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(0), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(claim.raw(), ROOT_CLAIM.raw());
assertEq(position.raw(), 1);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(0), Timestamp.wrap(uint64(block.timestamp))).raw());
// Assert that the `createdAt` timestamp is correct.
assertEq(Timestamp.unwrap(gameProxy.createdAt()), block.timestamp);
assertEq(gameProxy.createdAt().raw(), block.timestamp);
// Assert that the blockhash provided is correct.
assertEq(Hash.unwrap(gameProxy.l1Head()), blockhash(block.number - 1));
assertEq(gameProxy.l1Head().raw(), blockhash(block.number - 1));
}
/// @dev Tests that a move while the game status is not `IN_PROGRESS` causes the call to revert
......@@ -279,25 +277,19 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @notice Static unit test for the correctness of the chess clock incrementation.
function test_move_clockCorrectness_succeeds() public {
(,,,, Clock clock) = gameProxy.claimData(0);
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(0), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(0), Timestamp.wrap(uint64(block.timestamp))).raw());
Claim claim = _dummyClaim();
vm.warp(block.timestamp + 15);
gameProxy.attack(0, claim);
(,,,, clock) = gameProxy.claimData(1);
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(15), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(15), Timestamp.wrap(uint64(block.timestamp))).raw());
vm.warp(block.timestamp + 10);
gameProxy.attack(1, claim);
(,,,, clock) = gameProxy.claimData(2);
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(10), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(10), Timestamp.wrap(uint64(block.timestamp))).raw());
// We are at the split depth, so we need to set the status byte of the claim
// for the next move.
......@@ -306,16 +298,12 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
vm.warp(block.timestamp + 10);
gameProxy.attack(2, claim);
(,,,, clock) = gameProxy.claimData(3);
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(25), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(25), Timestamp.wrap(uint64(block.timestamp))).raw());
vm.warp(block.timestamp + 10);
gameProxy.attack(3, claim);
(,,,, clock) = gameProxy.claimData(4);
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(20), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(20), Timestamp.wrap(uint64(block.timestamp))).raw());
}
/// @dev Tests that an identical claim cannot be made twice. The duplicate claim attempt should
......@@ -364,11 +352,9 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
// Assert correctness of the attack claim's data.
assertEq(parentIndex, 0);
assertEq(countered, false);
assertEq(Claim.unwrap(claim), Claim.unwrap(counter));
assertEq(Position.unwrap(position), Position.unwrap(Position.wrap(1).move(true)));
assertEq(
Clock.unwrap(clock), Clock.unwrap(LibClock.wrap(Duration.wrap(5), Timestamp.wrap(uint64(block.timestamp))))
);
assertEq(claim.raw(), counter.raw());
assertEq(position.raw(), Position.wrap(1).move(true).raw());
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(5), Timestamp.wrap(uint64(block.timestamp))).raw());
// Grab the claim data of the parent.
(parentIndex, countered, claim, position, clock) = gameProxy.claimData(0);
......@@ -376,12 +362,9 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
// Assert correctness of the parent claim's data.
assertEq(parentIndex, type(uint32).max);
assertEq(countered, true);
assertEq(Claim.unwrap(claim), Claim.unwrap(ROOT_CLAIM));
assertEq(Position.unwrap(position), 1);
assertEq(
Clock.unwrap(clock),
Clock.unwrap(LibClock.wrap(Duration.wrap(0), Timestamp.wrap(uint64(block.timestamp - 5))))
);
assertEq(claim.raw(), ROOT_CLAIM.raw());
assertEq(position.raw(), 1);
assertEq(clock.raw(), LibClock.wrap(Duration.wrap(0), Timestamp.wrap(uint64(block.timestamp - 5))).raw());
}
/// @dev Tests that making a claim at the execution trace bisection root level with an invalid status
......@@ -569,13 +552,13 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.attack(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
// Expected start/disputed claims
bytes32 startingClaim = Hash.unwrap(gameProxy.genesisOutputRoot());
bytes32 startingClaim = gameProxy.genesisOutputRoot().raw();
bytes32 disputedClaim = bytes32(uint256(3));
Position disputedPos = LibPosition.wrap(4, 0);
// Expected local data
bytes32[5] memory data =
[Hash.unwrap(gameProxy.l1Head()), startingClaim, disputedClaim, bytes32(0), bytes32(block.chainid << 0xC0)];
[gameProxy.l1Head().raw(), startingClaim, disputedClaim, bytes32(0), bytes32(block.chainid << 0xC0)];
for (uint256 i = 1; i <= 5; i++) {
uint256 expectedLen = i > 3 ? 8 : 32;
......@@ -616,7 +599,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
// Expected local data
bytes32[5] memory data = [
Hash.unwrap(gameProxy.l1Head()),
gameProxy.l1Head().raw(),
startingClaim,
disputedClaim,
bytes32(uint256(1) << 0xC0),
......
......@@ -2,7 +2,7 @@
pragma solidity ^0.8.15;
import { Test } from "forge-std/Test.sol";
import { LibClock } from "src/dispute/lib/LibClock.sol";
import { LibClock } from "src/dispute/lib/LibUDT.sol";
import "src/libraries/DisputeTypes.sol";
/// @notice Tests for `LibClock`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment