@keep-network/tbtc-v2 0.1.1-dev.29 → 0.1.1-dev.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -131,8 +131,8 @@
131
131
  "type": "event"
132
132
  }
133
133
  ],
134
- "bytecode": "0x611d9561003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063403994031161006557806340399403146101195780635452278714610139578063c945968614610159578063e6d20d451461018b57600080fd5b806305cf9ce3146100975780632123f1c4146100b95780632a6f2ad8146100d95780633f31f49f146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046118d8565b6101ab565b005b8180156100c557600080fd5b506100b76100d436600461192b565b6104b8565b8180156100e557600080fd5b506100b76100f436600461194d565b6104f3565b81801561010557600080fd5b506100b76101143660046119e2565b610763565b81801561012557600080fd5b506100b761013436600461192b565b610954565b81801561014557600080fd5b506100b761015436600461192b565b6109ee565b81801561016557600080fd5b50610179610174366004611a87565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a636600461192b565b610c72565b60008383836040516020016101c293929190611b0a565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102485760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102b75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161023f565b600280870154908201546102d1919063ffffffff16611b32565b4210156103465760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161023f565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103c0576040519150601f19603f3d011682016040523d82523d6000602084013e6103c5565b606091505b5050506000610455610411600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261045091908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061046282610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b856003015434101561056d5760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161023f565b6105c585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506105b99150506060850160408601611b4a565b84356020860135610de6565b6106115760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161023f565b600085858460405160200161062893929190611b0a565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156106aa5760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161023f565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d85856107236060870160408801611b4a565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104a6565b60006107a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ef692505050565b905060008686836040516020016107bd93929190611b0a565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b50505060006108ef6108b060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261045091908d8d808385018382808284376000920191909152509293925050610d0c9050565b905060006108fc82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116109b75760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161023f565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016104e7565b6064811115610a655760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161023f565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016104e7565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ef692505050565b90506000878783604051602001610af793929190611b0a565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161023f565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161023f565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161023f565b84610c5a57610c558787611036565b610c64565b610c64878761127a565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161023f565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016104e7565b016020015190565b60606000610d23600284611b6d565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b60008551604014610e5f5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161023f565b6000610e6a87611370565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610ec2573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600060028083604051610f099190611b8f565b602060405180830381855afa158015610f26573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f499190611bca565b604051602001610f5b91815260200190565b60408051601f1981840301815290829052610f7591611b8f565b602060405180830381855afa158015610f92573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db99190611bca565b600080610ffc600485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f59050565b9050600061100982611422565b9050600881811b63ff00ff001662ff00ff9183901c9190911617601081811b91901c175b95945050505050565b600080600061107f600486868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a79050565b90925090506000611091836005611b32565b905060005b828110156112705760006110e38389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116259050565b9050600061112a848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116709050565b915050801561124f576000611178858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116b79050565b905060006111e86111c2878d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116cd9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122b92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c985050505050611270565b6112598285611b32565b93505050808061126890611be3565b915050611096565b5050505092915050565b6000806112c1604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116b79050565b9050600061130c6111c2604487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116cd9050565b9050818160405160200161134f92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e95760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161023f565b50805160209091012090565b6060600061140d8385516116e490919063ffffffff16565b905061141a848285611740565b949350505050565b60008060005b83518110156114a05761143c816001611b32565b84516114489190611bfe565b611453906008611c15565b61145e906002611d18565b84828151811061147057611470611d24565b0160200151611482919060f81c611c15565b61148c9083611b32565b91508061149881611be3565b915050611428565b5092915050565b60008060006114b6858561180a565b905060ff81166114e85760008585815181106114d4576114d4611d24565b016020015190935060f81c915061161e9050565b836114f4826001611d3a565b60ff166115019190611b32565b85511015611518576000196000925092505061161e565b60008160ff166002141561155d5761155261153e611537876001611b32565b88906116b7565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611614565b8160ff16600414156115875761157a6111c2611537876001611b32565b63ffffffff169050611614565b8160ff1660081415611614576116076115a4611537876001611b32565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b60008060006116348585611670565b909250905060001982141561164f5760001992505050610db9565b8061165b836025611b32565b6116659190611b32565b61102d906004611b32565b60008061167e836025611b32565b8451101561169357506000199050600061161e565b6000806116aa866116a5876024611b32565b6114a7565b9097909650945050505050565b60006116c68383016020015190565b9392505050565b60006116c66116dd836020611b32565b84906116b7565b6000828211156117365760405162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015260640161023f565b6116c68284611bfe565b60608161175c57506040805160208101909152600081526116c6565b60006117688385611b32565b9050838111801561177a575080855110155b6117c65760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e647300000000000000000000000000604482015260640161023f565b604051915082604083010160405282825283850182038460208701018481015b808210156117ff578151838301526020820191506117e6565b505050509392505050565b600082828151811061181e5761181e611d24565b60209101015160f81c60ff141561183757506008610db9565b82828151811061184957611849611d24565b60209101015160f81c60fe141561186257506004610db9565b82828151811061187457611874611d24565b60209101015160f81c60fd141561188d57506002610db9565b50600092915050565b60008083601f8401126118a857600080fd5b50813567ffffffffffffffff8111156118c057600080fd5b60208301915083602082850101111561161e57600080fd5b600080600080606085870312156118ee57600080fd5b84359350602085013567ffffffffffffffff81111561190c57600080fd5b61191887828801611896565b9598909750949560400135949350505050565b6000806040838503121561193e57600080fd5b50508035926020909101359150565b60008060008060008086880360e081121561196757600080fd5b87359650602088013567ffffffffffffffff81111561198557600080fd5b6119918a828b01611896565b90975095505060408801356bffffffffffffffffffffffff19811681146119b757600080fd5b93506060888101359350607f19820112156119d157600080fd5b506080870190509295509295509295565b600080600080600080608087890312156119fb57600080fd5b86359550602087013567ffffffffffffffff80821115611a1a57600080fd5b611a268a838b01611896565b90975095506040890135915080821115611a3f57600080fd5b50611a4c89828a01611896565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff81168114611a7957600080fd5b809150509295509295509295565b60008060008060008060808789031215611aa057600080fd5b86359550602087013567ffffffffffffffff80821115611abf57600080fd5b611acb8a838b01611896565b90975095506040890135915080821115611ae457600080fd5b50611af189828a01611896565b90945092505060608701358015158114611a7957600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611b4557611b45611b1c565b500190565b600060208284031215611b5c57600080fd5b813560ff811681146116c657600080fd5b600082611b8a57634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b81811015611bb05760208186018101518583015201611b96565b81811115611bbf576000828501525b509190910192915050565b600060208284031215611bdc57600080fd5b5051919050565b6000600019821415611bf757611bf7611b1c565b5060010190565b600082821015611c1057611c10611b1c565b500390565b6000816000190483118215151615611c2f57611c2f611b1c565b500290565b600181815b80851115611c6f578160001904821115611c5557611c55611b1c565b80851615611c6257918102915b93841c9390800290611c39565b509250929050565b600082611c8657506001610db9565b81611c9357506000610db9565b8160018114611ca95760028114611cb357611ccf565b6001915050610db9565b60ff841115611cc457611cc4611b1c565b50506001821b610db9565b5060208310610133831016604e8410600b8410161715611cf2575081810a610db9565b611cfc8383611c34565b8060001904821115611d1057611d10611b1c565b029392505050565b60006116c68383611c77565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611d5757611d57611b1c565b01939250505056fea2646970667358221220c98ff1e6ffd051702a40208c35c6d2ffe502c592dd6ab77990e1ffdefbde06c364736f6c63430008090033",
135
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063403994031161006557806340399403146101195780635452278714610139578063c945968614610159578063e6d20d451461018b57600080fd5b806305cf9ce3146100975780632123f1c4146100b95780632a6f2ad8146100d95780633f31f49f146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046118d8565b6101ab565b005b8180156100c557600080fd5b506100b76100d436600461192b565b6104b8565b8180156100e557600080fd5b506100b76100f436600461194d565b6104f3565b81801561010557600080fd5b506100b76101143660046119e2565b610763565b81801561012557600080fd5b506100b761013436600461192b565b610954565b81801561014557600080fd5b506100b761015436600461192b565b6109ee565b81801561016557600080fd5b50610179610174366004611a87565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a636600461192b565b610c72565b60008383836040516020016101c293929190611b0a565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102485760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102b75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161023f565b600280870154908201546102d1919063ffffffff16611b32565b4210156103465760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161023f565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103c0576040519150601f19603f3d011682016040523d82523d6000602084013e6103c5565b606091505b5050506000610455610411600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261045091908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061046282610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b856003015434101561056d5760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161023f565b6105c585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506105b99150506060850160408601611b4a565b84356020860135610de6565b6106115760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161023f565b600085858460405160200161062893929190611b0a565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156106aa5760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161023f565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d85856107236060870160408801611b4a565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104a6565b60006107a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ef692505050565b905060008686836040516020016107bd93929190611b0a565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b50505060006108ef6108b060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261045091908d8d808385018382808284376000920191909152509293925050610d0c9050565b905060006108fc82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116109b75760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161023f565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016104e7565b6064811115610a655760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161023f565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016104e7565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ef692505050565b90506000878783604051602001610af793929190611b0a565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161023f565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161023f565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161023f565b84610c5a57610c558787611036565b610c64565b610c64878761127a565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161023f565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016104e7565b016020015190565b60606000610d23600284611b6d565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b60008551604014610e5f5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161023f565b6000610e6a87611370565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610ec2573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600060028083604051610f099190611b8f565b602060405180830381855afa158015610f26573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f499190611bca565b604051602001610f5b91815260200190565b60408051601f1981840301815290829052610f7591611b8f565b602060405180830381855afa158015610f92573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db99190611bca565b600080610ffc600485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f59050565b9050600061100982611422565b9050600881811b63ff00ff001662ff00ff9183901c9190911617601081811b91901c175b95945050505050565b600080600061107f600486868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a79050565b90925090506000611091836005611b32565b905060005b828110156112705760006110e38389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116259050565b9050600061112a848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116709050565b915050801561124f576000611178858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116b79050565b905060006111e86111c2878d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116cd9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122b92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c985050505050611270565b6112598285611b32565b93505050808061126890611be3565b915050611096565b5050505092915050565b6000806112c1604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116b79050565b9050600061130c6111c2604487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116cd9050565b9050818160405160200161134f92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e95760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161023f565b50805160209091012090565b6060600061140d8385516116e490919063ffffffff16565b905061141a848285611740565b949350505050565b60008060005b83518110156114a05761143c816001611b32565b84516114489190611bfe565b611453906008611c15565b61145e906002611d18565b84828151811061147057611470611d24565b0160200151611482919060f81c611c15565b61148c9083611b32565b91508061149881611be3565b915050611428565b5092915050565b60008060006114b6858561180a565b905060ff81166114e85760008585815181106114d4576114d4611d24565b016020015190935060f81c915061161e9050565b836114f4826001611d3a565b60ff166115019190611b32565b85511015611518576000196000925092505061161e565b60008160ff166002141561155d5761155261153e611537876001611b32565b88906116b7565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611614565b8160ff16600414156115875761157a6111c2611537876001611b32565b63ffffffff169050611614565b8160ff1660081415611614576116076115a4611537876001611b32565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b60008060006116348585611670565b909250905060001982141561164f5760001992505050610db9565b8061165b836025611b32565b6116659190611b32565b61102d906004611b32565b60008061167e836025611b32565b8451101561169357506000199050600061161e565b6000806116aa866116a5876024611b32565b6114a7565b9097909650945050505050565b60006116c68383016020015190565b9392505050565b60006116c66116dd836020611b32565b84906116b7565b6000828211156117365760405162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015260640161023f565b6116c68284611bfe565b60608161175c57506040805160208101909152600081526116c6565b60006117688385611b32565b9050838111801561177a575080855110155b6117c65760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e647300000000000000000000000000604482015260640161023f565b604051915082604083010160405282825283850182038460208701018481015b808210156117ff578151838301526020820191506117e6565b505050509392505050565b600082828151811061181e5761181e611d24565b60209101015160f81c60ff141561183757506008610db9565b82828151811061184957611849611d24565b60209101015160f81c60fe141561186257506004610db9565b82828151811061187457611874611d24565b60209101015160f81c60fd141561188d57506002610db9565b50600092915050565b60008083601f8401126118a857600080fd5b50813567ffffffffffffffff8111156118c057600080fd5b60208301915083602082850101111561161e57600080fd5b600080600080606085870312156118ee57600080fd5b84359350602085013567ffffffffffffffff81111561190c57600080fd5b61191887828801611896565b9598909750949560400135949350505050565b6000806040838503121561193e57600080fd5b50508035926020909101359150565b60008060008060008086880360e081121561196757600080fd5b87359650602088013567ffffffffffffffff81111561198557600080fd5b6119918a828b01611896565b90975095505060408801356bffffffffffffffffffffffff19811681146119b757600080fd5b93506060888101359350607f19820112156119d157600080fd5b506080870190509295509295509295565b600080600080600080608087890312156119fb57600080fd5b86359550602087013567ffffffffffffffff80821115611a1a57600080fd5b611a268a838b01611896565b90975095506040890135915080821115611a3f57600080fd5b50611a4c89828a01611896565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff81168114611a7957600080fd5b809150509295509295509295565b60008060008060008060808789031215611aa057600080fd5b86359550602087013567ffffffffffffffff80821115611abf57600080fd5b611acb8a838b01611896565b90975095506040890135915080821115611ae457600080fd5b50611af189828a01611896565b90945092505060608701358015158114611a7957600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611b4557611b45611b1c565b500190565b600060208284031215611b5c57600080fd5b813560ff811681146116c657600080fd5b600082611b8a57634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b81811015611bb05760208186018101518583015201611b96565b81811115611bbf576000828501525b509190910192915050565b600060208284031215611bdc57600080fd5b5051919050565b6000600019821415611bf757611bf7611b1c565b5060010190565b600082821015611c1057611c10611b1c565b500390565b6000816000190483118215151615611c2f57611c2f611b1c565b500290565b600181815b80851115611c6f578160001904821115611c5557611c55611b1c565b80851615611c6257918102915b93841c9390800290611c39565b509250929050565b600082611c8657506001610db9565b81611c9357506000610db9565b8160018114611ca95760028114611cb357611ccf565b6001915050610db9565b60ff841115611cc457611cc4611b1c565b50506001821b610db9565b5060208310610133831016604e8410600b8410161715611cf2575081810a610db9565b611cfc8383611c34565b8060001904821115611d1057611d10611b1c565b029392505050565b60006116c68383611c77565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611d5757611d57611b1c565b01939250505056fea2646970667358221220c98ff1e6ffd051702a40208c35c6d2ffe502c592dd6ab77990e1ffdefbde06c364736f6c63430008090033",
134
+ "bytecode": "0x611aad61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea26469706673582212201b8f084575ec98c25e842f2cb4d026008b246c6fc61d9f1c733d7a3178f13d6f64736f6c63430008090033",
135
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea26469706673582212201b8f084575ec98c25e842f2cb4d026008b246c6fc61d9f1c733d7a3178f13d6f64736f6c63430008090033",
136
136
  "linkReferences": {},
137
137
  "deployedLinkReferences": {}
138
138
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/6194e398651cefa3876c393ee3457ea6.json"
3
+ "buildInfo": "../../../build-info/4f3252cf5c5b3ab5098f03748fc2a9f6.json"
4
4
  }
@@ -840,7 +840,12 @@ contract Bridge is Ownable, EcdsaWalletOwner {
840
840
  walletPubKeyHash
841
841
  ];
842
842
 
843
- // TODO: Validate if `walletPubKeyHash` is a known and live wallet.
843
+ Wallets.WalletState walletState = wallet.state;
844
+ require(
845
+ walletState == Wallets.WalletState.Live ||
846
+ walletState == Wallets.WalletState.MovingFunds,
847
+ "Wallet must be in Live or MovingFunds state"
848
+ );
844
849
 
845
850
  // Check if the main UTXO for given wallet exists. If so, validate
846
851
  // passed main UTXO data against the stored hash and use them for
@@ -1195,6 +1200,183 @@ contract Bridge is Ownable, EcdsaWalletOwner {
1195
1200
  return (depositTxFee, depositTxFeeRemainder);
1196
1201
  }
1197
1202
 
1203
+ /// @notice Submits a fraud challenge indicating that a UTXO being under
1204
+ /// wallet control was unlocked by the wallet but was not used
1205
+ /// according to the protocol rules. That means the wallet signed
1206
+ /// a transaction input pointing to that UTXO and there is a unique
1207
+ /// sighash and signature pair associated with that input. This
1208
+ /// function uses those parameters to create a fraud accusation that
1209
+ /// proves a given transaction input unlocking the given UTXO was
1210
+ /// actually signed by the wallet. This function cannot determine
1211
+ /// whether the transaction was actually broadcast and the input was
1212
+ /// consumed in a fraudulent way so it just opens a challenge period
1213
+ /// during which the wallet can defeat the challenge by submitting
1214
+ /// proof of a transaction that consumes the given input according
1215
+ /// to protocol rules. To prevent spurious allegations, the caller
1216
+ /// must deposit ETH that is returned back upon justified fraud
1217
+ /// challenge or confiscated otherwise.
1218
+ ///@param walletPublicKey The public key of the wallet in the uncompressed
1219
+ /// and unprefixed format (64 bytes)
1220
+ /// @param sighash The hash that was used to produce the ECDSA signature
1221
+ /// that is the subject of the fraud claim. This hash is constructed
1222
+ /// by applying double SHA-256 over a serialized subset of the
1223
+ /// transaction. The exact subset used as hash preimage depends on
1224
+ /// the transaction input the signature is produced for. See BIP-143
1225
+ /// for reference
1226
+ /// @param signature Bitcoin signature in the R/S/V format
1227
+ /// @dev Requirements:
1228
+ /// - Wallet behind `walletPubKey` must be in `Live` or `MovingFunds`
1229
+ /// state
1230
+ /// - The challenger must send appropriate amount of ETH used as
1231
+ /// fraud challenge deposit
1232
+ /// - The signature (represented by r, s and v) must be generated by
1233
+ /// the wallet behind `walletPubKey` during signing of `sighash`
1234
+ /// - Wallet can be challenged for the given signature only once
1235
+ function submitFraudChallenge(
1236
+ bytes calldata walletPublicKey,
1237
+ bytes32 sighash,
1238
+ BitcoinTx.RSVSignature calldata signature
1239
+ ) external payable {
1240
+ bytes memory compressedWalletPublicKey = EcdsaLib.compressPublicKey(
1241
+ walletPublicKey.slice32(0),
1242
+ walletPublicKey.slice32(32)
1243
+ );
1244
+ bytes20 walletPubKeyHash = compressedWalletPublicKey.hash160View();
1245
+
1246
+ Wallets.Wallet storage wallet = wallets.registeredWallets[
1247
+ walletPubKeyHash
1248
+ ];
1249
+
1250
+ require(
1251
+ wallet.state == Wallets.WalletState.Live ||
1252
+ wallet.state == Wallets.WalletState.MovingFunds,
1253
+ "Wallet is neither in Live nor MovingFunds state"
1254
+ );
1255
+
1256
+ frauds.submitChallenge(
1257
+ walletPublicKey,
1258
+ walletPubKeyHash,
1259
+ sighash,
1260
+ signature
1261
+ );
1262
+ }
1263
+
1264
+ /// @notice Allows to defeat a pending fraud challenge against a wallet if
1265
+ /// the transaction that spends the UTXO follows the protocol rules.
1266
+ /// In order to defeat the challenge the same `walletPublicKey` and
1267
+ /// signature (represented by `r`, `s` and `v`) must be provided as
1268
+ /// were used to calculate the sighash during input signing.
1269
+ /// The fraud challenge defeat attempt will only succeed if the
1270
+ /// inputs in the preimage are considered honestly spent by the
1271
+ /// wallet. Therefore the transaction spending the UTXO must be
1272
+ /// proven in the Bridge before a challenge defeat is called.
1273
+ /// If successfully defeated, the fraud challenge is marked as
1274
+ /// resolved and the amount of ether deposited by the challenger is
1275
+ /// sent to the treasury.
1276
+ /// @param walletPublicKey The public key of the wallet in the uncompressed
1277
+ /// and unprefixed format (64 bytes)
1278
+ /// @param preimage The preimage which produces sighash used to generate the
1279
+ /// ECDSA signature that is the subject of the fraud claim. It is a
1280
+ /// serialized subset of the transaction. The exact subset used as
1281
+ /// the preimage depends on the transaction input the signature is
1282
+ /// produced for. See BIP-143 for reference
1283
+ /// @param witness Flag indicating whether the preimage was produced for a
1284
+ /// witness input. True for witness, false for non-witness input
1285
+ /// @dev Requirements:
1286
+ /// - `walletPublicKey` and `sighash` calculated as `hash256(preimage)`
1287
+ /// must identify an open fraud challenge
1288
+ /// - the preimage must be a valid preimage of a transaction generated
1289
+ /// according to the protocol rules and already proved in the Bridge
1290
+ /// - before a defeat attempt is made the transaction that spends the
1291
+ /// given UTXO must be proven in the Bridge
1292
+ function defeatFraudChallenge(
1293
+ bytes calldata walletPublicKey,
1294
+ bytes calldata preimage,
1295
+ bool witness
1296
+ ) external {
1297
+ uint256 utxoKey = frauds.unwrapChallenge(
1298
+ walletPublicKey,
1299
+ preimage,
1300
+ witness
1301
+ );
1302
+
1303
+ // Check that the UTXO key identifies a correctly spent UTXO.
1304
+ require(
1305
+ deposits[utxoKey].sweptAt > 0 || spentMainUTXOs[utxoKey],
1306
+ "Spent UTXO not found among correctly spent UTXOs"
1307
+ );
1308
+
1309
+ frauds.defeatChallenge(walletPublicKey, preimage, treasury);
1310
+ }
1311
+
1312
+ /// @notice Notifies about defeat timeout for the given fraud challenge.
1313
+ /// Can be called only if there was a fraud challenge identified by
1314
+ /// the provided `walletPublicKey` and `sighash` and it was not
1315
+ /// defeated on time. The amount of time that needs to pass after
1316
+ /// a fraud challenge is reported is indicated by the
1317
+ /// `challengeDefeatTimeout`. After a successful fraud challenge
1318
+ /// defeat timeout notification the fraud challenge is marked as
1319
+ /// resolved, the stake of each operator is slashed, the ether
1320
+ /// deposited is returned to the challenger and the challenger is
1321
+ /// rewarded.
1322
+ /// @param walletPublicKey The public key of the wallet in the uncompressed
1323
+ /// and unprefixed format (64 bytes)
1324
+ /// @param sighash The hash that was used to produce the ECDSA signature
1325
+ /// that is the subject of the fraud claim. This hash is constructed
1326
+ /// by applying double SHA-256 over a serialized subset of the
1327
+ /// transaction. The exact subset used as hash preimage depends on
1328
+ /// the transaction input the signature is produced for. See BIP-143
1329
+ /// for reference
1330
+ /// @dev Requirements:
1331
+ /// - `walletPublicKey`and `sighash` must identify an open fraud
1332
+ /// challenge
1333
+ /// - the amount of time indicated by `challengeDefeatTimeout` must
1334
+ /// pass after the challenge was reported
1335
+ function notifyFraudChallengeDefeatTimeout(
1336
+ bytes calldata walletPublicKey,
1337
+ bytes32 sighash
1338
+ ) external {
1339
+ frauds.notifyChallengeDefeatTimeout(walletPublicKey, sighash);
1340
+ }
1341
+
1342
+ /// @notice Returns parameters used by the `Frauds` library.
1343
+ /// @return slashingAmount Value of the slashing amount
1344
+ /// @return notifierRewardMultiplier Value of the notifier reward multiplier
1345
+ /// @return challengeDefeatTimeout Value of the challenge defeat timeout
1346
+ /// @return challengeDepositAmount Value of the challenge deposit amount
1347
+ function getFraudParameters()
1348
+ external
1349
+ view
1350
+ returns (
1351
+ uint256 slashingAmount,
1352
+ uint256 notifierRewardMultiplier,
1353
+ uint256 challengeDefeatTimeout,
1354
+ uint256 challengeDepositAmount
1355
+ )
1356
+ {
1357
+ slashingAmount = frauds.slashingAmount;
1358
+ notifierRewardMultiplier = frauds.notifierRewardMultiplier;
1359
+ challengeDefeatTimeout = frauds.challengeDefeatTimeout;
1360
+ challengeDepositAmount = frauds.challengeDepositAmount;
1361
+
1362
+ return (
1363
+ slashingAmount,
1364
+ notifierRewardMultiplier,
1365
+ challengeDefeatTimeout,
1366
+ challengeDepositAmount
1367
+ );
1368
+ }
1369
+
1370
+ /// @notice Returns the fraud challenge identified by the given key built
1371
+ /// as keccak256(walletPublicKey|sighash).
1372
+ function fraudChallenges(uint256 challengeKey)
1373
+ external
1374
+ view
1375
+ returns (Frauds.FraudChallenge memory)
1376
+ {
1377
+ return frauds.challenges[challengeKey];
1378
+ }
1379
+
1198
1380
  /// @notice Requests redemption of the given amount from the specified
1199
1381
  /// wallet to the redeemer Bitcoin output script.
1200
1382
  /// @param walletPubKeyHash The 20-byte wallet public key hash (computed
@@ -1464,187 +1646,6 @@ contract Bridge is Ownable, EcdsaWalletOwner {
1464
1646
  bank.transferBalance(treasury, outputsInfo.totalTreasuryFee);
1465
1647
  }
1466
1648
 
1467
- /// @notice Submits a fraud challenge indicating that a UTXO being under
1468
- /// wallet control was unlocked by the wallet but was not used
1469
- /// according to the protocol rules. That means the wallet signed
1470
- /// a transaction input pointing to that UTXO and there is a unique
1471
- /// sighash and signature pair associated with that input. This
1472
- /// function uses those parameters to create a fraud accusation that
1473
- /// proves a given transaction input unlocking the given UTXO was
1474
- /// actually signed by the wallet. This function cannot determine
1475
- /// whether the transaction was actually broadcast and the input was
1476
- /// consumed in a fraudulent way so it just opens a challenge period
1477
- /// during which the wallet can defeat the challenge by submitting
1478
- /// proof of a transaction that consumes the given input according
1479
- /// to protocol rules. To prevent spurious allegations, the caller
1480
- /// must deposit ETH that is returned back upon justified fraud
1481
- /// challenge or confiscated otherwise.
1482
- /// @param walletPublicKey The public key of the wallet in the uncompressed
1483
- /// and unprefixed format (64 bytes)
1484
- /// @param sighash The hash that was used to produce the ECDSA signature
1485
- /// that is the subject of the fraud claim. This hash is constructed
1486
- /// by applying double SHA-256 over a serialized subset of the
1487
- /// transaction. The exact subset used as hash preimage depends on
1488
- /// the transaction input the signature is produced for. See BIP-143
1489
- /// for reference
1490
- /// @param signature Bitcoin signature in the R/S/V format
1491
- /// @dev Requirements:
1492
- /// - Wallet behind `walletPubKey` must be in `Live` or `MovingFunds`
1493
- /// state
1494
- /// - The challenger must send appropriate amount of ETH used as
1495
- /// fraud challenge deposit
1496
- /// - The signature (represented by r, s and v) must be generated by
1497
- /// the wallet behind `walletPubKey` during signing of `sighash`
1498
- /// - Wallet can be challenged for the given signature only once
1499
- /// TODO: Consider using wallet public key in the X/Y form to avoid slicing.
1500
- function submitFraudChallenge(
1501
- bytes calldata walletPublicKey,
1502
- bytes32 sighash,
1503
- BitcoinTx.RSVSignature calldata signature
1504
- ) external payable {
1505
- bytes memory compressedWalletPublicKey = EcdsaLib.compressPublicKey(
1506
- walletPublicKey.slice32(0),
1507
- walletPublicKey.slice32(32)
1508
- );
1509
- bytes20 walletPubKeyHash = compressedWalletPublicKey.hash160View();
1510
-
1511
- Wallets.Wallet storage wallet = wallets.registeredWallets[
1512
- walletPubKeyHash
1513
- ];
1514
-
1515
- require(
1516
- wallet.state == Wallets.WalletState.Live ||
1517
- wallet.state == Wallets.WalletState.MovingFunds,
1518
- "Wallet is neither in Live nor MovingFunds state"
1519
- );
1520
-
1521
- frauds.submitFraudChallenge(
1522
- walletPublicKey,
1523
- walletPubKeyHash,
1524
- sighash,
1525
- signature
1526
- );
1527
- }
1528
-
1529
- /// @notice Allows to defeat a pending fraud challenge against a wallet if
1530
- /// the transaction that spends the UTXO follows the protocol rules.
1531
- /// In order to defeat the challenge the same `walletPublicKey` and
1532
- /// signature (represented by `r`, `s` and `v`) must be provided as
1533
- /// were used in the fraud challenge. Additionally a preimage must
1534
- /// be provided which was used to calculate the sighash during input
1535
- /// signing. The fraud challenge defeat attempt will only succeed if
1536
- /// the inputs in the preimage are considered honestly spent by the
1537
- /// wallet. Therefore the transaction spending the UTXO must be
1538
- /// proven in the Bridge before a challenge defeat is called.
1539
- /// If successfully defeated, the fraud challenge is marked as
1540
- /// resolved and the amount of ether deposited by the challenger is
1541
- /// sent to the treasury.
1542
- /// @param walletPublicKey The public key of the wallet in the uncompressed
1543
- /// and unprefixed format (64 bytes)
1544
- /// @param preimage The preimage which produces sighash used to generate the
1545
- /// ECDSA signature that is the subject of the fraud claim. It is a
1546
- /// serialized subset of the transaction. The exact subset used as
1547
- /// the preimage depends on the transaction input the signature is
1548
- /// produced for. See BIP-143 for reference
1549
- /// @param witness Flag indicating whether the preimage was produced for a
1550
- /// witness input. True for witness, false for non-witness input
1551
- /// @dev Requirements:
1552
- /// - `walletPublicKey` and `sighash` calculated as `hash256(preimage)`
1553
- /// must identify an open fraud challenge
1554
- /// - the preimage must be a valid preimage of a transaction generated
1555
- /// according to the protocol rules and already proved in the Bridge
1556
- /// - before a defeat attempt is made the transaction that spends the
1557
- /// given UTXO must be proven in the Bridge
1558
- /// TODO: Consider using wallet public key in the X/Y form to avoid slicing.
1559
- function defeatFraudChallenge(
1560
- bytes calldata walletPublicKey,
1561
- bytes calldata preimage,
1562
- bool witness
1563
- ) external {
1564
- uint256 utxoKey = frauds.unwrapChallenge(
1565
- walletPublicKey,
1566
- preimage,
1567
- witness
1568
- );
1569
-
1570
- // Check that the UTXO key identifies a correctly spent UTXO.
1571
- require(
1572
- deposits[utxoKey].sweptAt > 0 || spentMainUTXOs[utxoKey],
1573
- "Spent UTXO not found among correctly spent UTXOs"
1574
- );
1575
-
1576
- frauds.defeatChallenge(walletPublicKey, preimage, treasury);
1577
- }
1578
-
1579
- /// @notice Notifies about defeat timeout for the given fraud challenge.
1580
- /// Can be called only if there was a fraud challenge identified by
1581
- /// the provided `walletPublicKey` and `sighash` and it was not
1582
- /// defeated on time. The amount of time that needs to pass after
1583
- /// a fraud challenge is reported is indicated by the
1584
- /// `challengeDefeatTimeout`. After a successful fraud challenge
1585
- /// defeat timeout notification the fraud challenge is marked as
1586
- /// resolved, the stake of each operator is slashed, the ether
1587
- /// deposited is returned to the challenger and the challenger is
1588
- /// rewarded.
1589
- /// @param walletPublicKey The public key of the wallet in the uncompressed
1590
- /// and unprefixed format (64 bytes)
1591
- /// @param sighash The hash that was used to produce the ECDSA signature
1592
- /// that is the subject of the fraud claim. This hash is constructed
1593
- /// by applying double SHA-256 over a serialized subset of the
1594
- /// transaction. The exact subset used as hash preimage depends on
1595
- /// the transaction input the signature is produced for. See BIP-143
1596
- /// for reference
1597
- /// @dev Requirements:
1598
- /// - `walletPublicKey`and `sighash` must identify an open fraud
1599
- /// challenge
1600
- /// - the amount of time indicated by `challengeDefeatTimeout` must
1601
- /// pass after the challenge was reported
1602
- /// TODO: Consider using wallet public key in the X/Y form to avoid slicing.
1603
- function notifyFraudChallengeDefeatTimeout(
1604
- bytes calldata walletPublicKey,
1605
- bytes32 sighash
1606
- ) external {
1607
- frauds.notifyFraudChallengeDefeatTimeout(walletPublicKey, sighash);
1608
- }
1609
-
1610
- /// @notice Returns parameters used by the `Frauds` library.
1611
- /// @return slashingAmount Value of the slashing amount
1612
- /// @return notifierRewardMultiplier Value of the notifier reward multiplier
1613
- /// @return challengeDefeatTimeout Value of the challenge defeat timeout
1614
- /// @return challengeDepositAmount Value of the challenge deposit amount
1615
- function getFraudParameters()
1616
- external
1617
- view
1618
- returns (
1619
- uint256 slashingAmount,
1620
- uint256 notifierRewardMultiplier,
1621
- uint256 challengeDefeatTimeout,
1622
- uint256 challengeDepositAmount
1623
- )
1624
- {
1625
- slashingAmount = frauds.slashingAmount;
1626
- notifierRewardMultiplier = frauds.notifierRewardMultiplier;
1627
- challengeDefeatTimeout = frauds.challengeDefeatTimeout;
1628
- challengeDepositAmount = frauds.challengeDepositAmount;
1629
-
1630
- return (
1631
- slashingAmount,
1632
- notifierRewardMultiplier,
1633
- challengeDefeatTimeout,
1634
- challengeDepositAmount
1635
- );
1636
- }
1637
-
1638
- /// @notice Returns the fraud challenge identified by the given key built
1639
- /// as keccak256(walletPublicKey|sighash|v|r|s).
1640
- function fraudChallenges(uint256 challengeKey)
1641
- external
1642
- view
1643
- returns (Frauds.FraudChallenge memory)
1644
- {
1645
- return frauds.challenges[challengeKey];
1646
- }
1647
-
1648
1649
  /// @notice Validates whether the redemption Bitcoin transaction input
1649
1650
  /// vector contains a single input referring to the wallet's main
1650
1651
  /// UTXO. Reverts in case the validation fails.
@@ -40,7 +40,7 @@ library Frauds {
40
40
  /// needs to deposit.
41
41
  uint256 challengeDepositAmount;
42
42
  /// Collection of all submitted fraud challenges indexed by challenge
43
- /// key built as keccak256(walletPublicKey|sighash|v|r|s).
43
+ /// key built as keccak256(walletPublicKey|sighash).
44
44
  mapping(uint256 => FraudChallenge) challenges;
45
45
  }
46
46
 
@@ -116,7 +116,7 @@ library Frauds {
116
116
  /// - The signature (represented by r, s and v) must be generated by
117
117
  /// the wallet behind `walletPubKey` during signing of `sighash`
118
118
  /// - Wallet can be challenged for the given signature only once
119
- function submitFraudChallenge(
119
+ function submitChallenge(
120
120
  Data storage self,
121
121
  bytes calldata walletPublicKey,
122
122
  bytes20 walletPubKeyHash,
@@ -285,7 +285,7 @@ library Frauds {
285
285
  /// challenge
286
286
  /// - the amount of time indicated by `challengeDefeatTimeout` must pass
287
287
  /// after the challenge was reported
288
- function notifyFraudChallengeDefeatTimeout(
288
+ function notifyChallengeDefeatTimeout(
289
289
  Data storage self,
290
290
  bytes calldata walletPublicKey,
291
291
  bytes32 sighash
@@ -522,10 +522,8 @@ library Frauds {
522
522
  pure
523
523
  returns (uint32 sighashType)
524
524
  {
525
- // TODO: Consider using `bytes4` instead allocating `bytes` if it's
526
- // cheaper.
527
- bytes memory sighashTypeBytes = preimage.lastBytes(4);
528
- uint32 sighashTypeLE = uint32(sighashTypeBytes.bytesToUint());
525
+ bytes4 sighashTypeBytes = preimage.slice4(preimage.length - 4);
526
+ uint32 sighashTypeLE = uint32(sighashTypeBytes);
529
527
  return sighashTypeLE.reverseUint32();
530
528
  }
531
529
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keep-network/tbtc-v2",
3
- "version": "0.1.1-dev.29+main.84caf27f30462db96e05f5df7300861213ab1688",
3
+ "version": "0.1.1-dev.31+main.749b9391b64c3a3fcc1eb2a1412a5f5620189e34",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "artifacts/",